这是C中的双重免费?

通常情况下,如果指针被释放两次,则它是双重释放。 例如,

char *ptr; ptr=malloc(5 * sizeof(*ptr)); free(ptr); free(ptr); 

以上代码被视为双重免费。 以下是否也被视为双重免费?

 char *ptr; char *ptr1; ptr=malloc(5 * sizeof(*ptr)); ptr1=ptr; free(ptr); free(ptr1); 

谢谢。

是。 该库并不关心您在源代码中提供了什么名称(在代码执行时它早已消失)。 重要的是值,在这种情况下,传递给free()的值将是相同的。

是。 你释放了两次相同的内存。

是的。 双重释放是指当您尝试释放已释放的内存块时。 ptr和ptr1都指向相同的内存块,因此第二次调用free是试图释放已经释放的内存块。

是的,因为指针都指向同一个地址,因此将相同的地址传递给free。

您可以通过打印来显示指针的值

 printf( "%p", ptr); 

或者在调试器中查看它

是的,这是一个双重免费(并且非常糟糕的事情)。 ptr1是指向malloc分配的内存的指针。 它与ptr指向的位置相同。 通过释放ptr和ptr1,你可以释放两次相同的内存。