为什么下面程序中的悬空指针在释放内存后仍显示相同的内存地址?
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a = 1;
int *ptr_a = (int*)malloc((sizeof(int)));
ptr_a = &a;
printf("The address of 'a' is %p\n", ptr_a);
free(ptr_a); // A dangling pointer
printf("The address of 'a' is %p", ptr_a);
return 0;
}
我尝试了一切,但仍然遇到同样的问题。
代码首先通过调用
malloc
分配内存,并将返回的地址存储在ptr_a
中。然后它将局部变量 a
的地址分配给 ptr_a
。此时,malloc
返回的内存地址丢失,导致永久内存泄漏。
然后将
ptr_a
(即a
的地址)传递给free
。这是未定义的行为。您只能将 malloc
、realloc
、calloc
等获得的指针传递给 free
。
存储在
ptr_a
中的指针不会因对 free
的调用而更改,因此它会打印相同的地址(除非由于对 free
的错误调用导致未定义的行为而导致出现严重错误)。