-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 に答える