以下はコードです:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int *p;
p=(int *)malloc(sizeof(int));
*p=5;
printf("Before freeing=%p\n",p);
printf("Value of p=%d\n",*p);
//making it dangling pointer
free(p);
printf("After freeing =%p\n",p);
printf("Value of p=%d\n",*p);
return 0;
}
以下は出力です。
Before freeing=0x1485010
Value of p=5
After freeing =0x1485010
Value of p=0
ポインターを解放した後、逆参照すると、出力 "0" (ゼロ) が得られます。
以下は、「0」を与える別のコードです
include <stdio.h>
#include <stdlib.h>
int main()
{
int *p;
p=(int *)malloc(sizeof(int));
printf("Before freeing=%p\n",(void *)p);
printf("Value of p=%d\n",*p);
return 0;
}
これでは、メモリを解放せず、割り当てただけですが、それでも「0」が返されます。初期化されていないすべてのポインターのデフォルト値が「0」のようですか??
なぜそうなのですか?