为什么Dangling指针不能存储任何值,为什么它会抛出0?因为它指向被释放的相同内存。如果我们尝试存储一些值,为什么为0?
#include<stdio.h>
#include<stdlib.h>
int main()
{
int *p;
p=(int*)malloc(sizeof(int)*5);//allocating memory in heap
printf("%p\n",p);
free(p); //freeing memory
printf("%p\n",p); //still pointer same loaction(dangling pointer)
scanf("%d",p); // why cant i scan if it is still pointing same location
// i know memory is delete but why 0 is thrown?
printf("%d\n",*p);// i am getting zero here?
}
答案 0 :(得分:2)
访问释放的内存是未定义的行为。任何事情都可能发生。这次你得零,下次你可以得到任何东西。
答案 1 :(得分:1)
这是非法内存访问。释放后不应使用该地址。
取消分配地址后,将指针设置为NULL。这样就可以根除非法的内存访问。
示例:
free(p);
p=NULL;