-3

为什么悬空指针不能存储任何值,为什么它会抛出 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?
 }
4

2 回答 2

2

访问释放的内存是未定义的行为。任何事情都有可能发生。这次你得了零,下次你可以得到任何东西。

http://en.wikipedia.org/wiki/Undefined_behavior供参考

于 2014-08-20T04:28:30.260 回答
1

这是非法的内存访问。释放后不应使用该地址。

释放地址后,将指针设置为 NULL。从而杜绝非法内存访问。

例子:

  free(p); 
  p=NULL;
于 2014-08-20T04:34:33.670 回答