通常,如果一个指针被释放两次,那么就会出现双重释放的情况。例如:
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);
或者在调试器中查看它