内存释放问题,望有经验者指点。。。

xjlqlqlq 2003-08-20 12:41:55
我创建一个节点(结构),并分配了内存,
使用后如何完全释放呢怎样才算释放完了?
我的做法:
//p为结构指针
free(p);
//但是我发现free()后还能访问p的数据成员,只不过其值是随机数了,所以添加如下
//一句代码显示。。。
printf("the value is %d \n",p->data);

为什么最后一句也正常运行不报错!
是不是说明内存没有释放干净。。。

请大家指点。。。
...全文
29 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
金笛子 2003-08-23
  • 打赏
  • 举报
回复
我同意hlnpro的观点
Marffin 2003-08-22
  • 打赏
  • 举报
回复
一楼正解
jinkaoyan 2003-08-22
  • 打赏
  • 举报
回复
scott mayer 教导我们不要用malloc/free,以new/free取代之
hillyee 2003-08-21
  • 打赏
  • 举报
回复
一楼的解释很到位。
xjlqlqlq 2003-08-20
  • 打赏
  • 举报
回复
谢谢 to:hlnpro
limd 2003-08-20
  • 打赏
  • 举报
回复
虽然释放了内存,但使得p成为野指针,仍然能够使用,所以最好释放完后,赋值为NULL;
hlnpro 2003-08-20
  • 打赏
  • 举报
回复
其实内存已经被释放过了,你还能访问是因为该内存刚刚被释放,还没有别的进程占用

你的访问没有被windows的内存保护机制所拒绝,你的这种做法是很危险的。

建议你可以使用

free(p);
p=NULL;

虽然麻烦了点,但是这是好习惯哦!可以防止你盗用内存!
sirouni2003 2003-08-20
  • 打赏
  • 举报
回复
上面解释得很好了!
bm1408 2003-08-20
  • 打赏
  • 举报
回复
很详细了!
bm1408 2003-08-20
  • 打赏
  • 举报
回复
同意!
P变为了也指针了!

FREE(P)
这个函数的功能主查切短P与P具体内容之间的联系而己!
也就是就P所向的内存,现在可以利用了

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧