这是C中的双重免费吗?

时间:2010-08-02 16:33:44

标签: c free

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

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);

谢谢。

5 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:10)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

printf( "%p", ptr);

或在调试器中查看它

答案 4 :(得分:0)

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