| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1305 人关注过本帖
标题:论坛内存在的关于内存泄露的问题
只看楼主 加入收藏
gao_guai
Rank: 2
等 级:论坛游民
帖 子:73
专家分:16
注 册:2011-6-5
收藏
得分:0 
回复 10楼 Kid_X
可是在 stat(p1);函数中,p1已经指向了一个没有在这个程序中分配的一块空间,那么free(p1)是什么意思呢,不是自己申请的空间也释放??
2012-06-19 09:41
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:0 
stat(p1)函数并没有改变p1的地址。形参p以传值的方式把p1变量拷贝了一份,函数执行完成后,你并没有把p1指向分配的那块内存,
在get_rand()那里p1++这句已经改变了p1的地址,所以你去释放改变的p1地址自然会出错。
如果你在display();后面想手工复位,添加一句,令p1 = p2,这个时候是复位了,但两次free会释放同一块内存。
这个时候只能有一句存在,要么释放p1,要么释放p2,然后令两个指针都指向NULL是通常推荐的方式。

我们都在路上。。。。。
2012-06-19 10:30
gao_guai
Rank: 2
等 级:论坛游民
帖 子:73
专家分:16
注 册:2011-6-5
收藏
得分:0 
回复 12楼 hellovfp
貌似不对吧,传过去的是地址,而不是值传递,kid_x说的蛮对的,其实p1已经指向不是自己分配的空间了,所以free的时候才会报错
图片附件: 游客没有浏览图片的权限,请 登录注册
2012-06-19 15:50
Kid_X
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:216
专家分:515
注 册:2007-10-8
收藏
得分:0 
回复 13楼 gao_guai
其实12说的对的。
传递的既是值,也是地址。具体要看是对谁而言的。说到底,计算机处理的都是二进制数,其具体的含义是相对的。
传递的是指针变量的值,而这个值同时也表示一个地址,指针变量说到底也是一个变量,它也占用内存,可以通过&运算符取其地址,只是它的值在含义上可以表示一个地址而已。
可能我说的不是很清楚,lz自己领悟一下。只要理解透彻了,指针也就不是什么难懂的东西了。

[ 本帖最后由 Kid_X 于 2012-6-19 20:26 编辑 ]
2012-06-19 20:21
gao_guai
Rank: 2
等 级:论坛游民
帖 子:73
专家分:16
注 册:2011-6-5
收藏
得分:0 
谢谢
2012-06-19 21:14
快速回复:论坛内存在的关于内存泄露的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.062915 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved