|
3鱼币
最近学到内存分配,使用malloc创建内存空间后再用free释放,
可是为什么我释放之后还能正常访问那个指针的内容
- int *p;
- p=(int *)malloc(sizeof(int));
- if(p==NULL)
- {
- printf("分配内存失败了");
- exit(1);
- }
- printf("请输入一个整数:");
- scanf("%d",p);
- printf("%d\n",*p);
- free(p);
- printf("%d\n",*p);
复制代码
然后输入520,输出520\n520\n
能不能讲讲free函数的详细原理!谢谢了!
free(p)之后并不表示p指向的那个地址的内容被清空了,它填充的还是你原来存放的内容,free只是表示这个区域可以被别的程序或者本程序下次申请空间时可以申请到这个地址。
下次你别的程序或者这个程序再次申请空间时,如果申请的还是这个空间,这时你再填写数据,这时这个地址填写的内容才会被修改,不然这个地址保存的内容会一直是520。而你的指针p指向该地址,所以你再次输出得到的还是520。因此在释放完空间后,最好把指向该空间的指针置为NULL,即p = NULL;
|
最佳答案
查看完整内容
free(p)之后并不表示p指向的那个地址的内容被清空了,它填充的还是你原来存放的内容,free只是表示这个区域可以被别的程序或者本程序下次申请空间时可以申请到这个地址。
下次你别的程序或者这个程序再次申请空间时,如果申请的还是这个空间,这时你再填写数据,这时这个地址填写的内容才会被修改,不然这个地址保存的内容会一直是520。而你的指针p指向该地址,所以你再次输出得到的还是520。因此在释放完空间后,最 ...
|