通常情况下,如果指针被释放两次,则它是双重释放。例如,
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);
谢谢。
答案 0 :(得分:10)
是。你两次释放相同的内存。
答案 1 :(得分:10)
是。该库并不关心您在源代码中提供了什么名称(在代码执行时它早已消失)。重要的是价值,在这种情况下,传递给free()
的值将是相同的。
答案 2 :(得分:0)
是的。当您尝试释放已释放的内存块时,双重释放。 ptr和ptr1都指向相同的内存块,因此第二次调用free
试图释放已经释放的内存块。
答案 3 :(得分:0)
是的,因为指针都指向同一个地址,因此将相同的地址传递给free。
您可以通过打印来显示指针的值
printf( "%p", ptr);
或在调试器中查看它
答案 4 :(得分:0)
是的,这是一个双重免费(并且非常糟糕的事情)。 ptr1是指向malloc分配的内存的指针。它与ptr指向的位置相同。通过释放ptr和ptr1,你可以释放两次相同的内存。