这是C语言中的双重释放吗?

4

通常,如果一个指针被释放两次,那么就会出现双重释放的情况。例如:

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

谢谢。

第二个例子有悬空指针。 - user195488
5个回答

10

是的。您正在释放相同的内存两次。


10

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


0

没错。双重释放是指尝试释放已经被释放的内存块。ptr和ptr1都指向同一个内存块,因此第二次调用free会尝试释放一个已经被释放的内存块。


0

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

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

printf( "%p", ptr);

或者在调试器中查看它


0
是的,这是一个双重释放(非常糟糕的行为)。ptr1是指向由malloc分配的内存的指针。它指向的位置与ptr相同。通过释放ptr和ptr1,你实际上是两次释放了同一块内存。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接