搜索
编程论坛
→
开发语言
→
『 C语言论坛 』
→ 论坛内存在的关于内存泄露的问题
标题:
论坛内存在的关于内存泄露的问题
只看楼主
gao_guai
等 级:
论坛游民
帖 子:73
专家分:16
注 册:2011-6-5
第
11
楼
得分:0
回复 10楼 Kid_X
可是在 stat(p1);函数中,p1已经指向了一个没有在这个程序中分配的一块空间,那么free(p1)是什么意思呢,不是自己申请的空间也释放??
2012-06-19 09:41
hellovfp
等 级:
禁止访问
威 望:
30
帖 子:2976
专家分:7697
注 册:2009-7-21
第
12
楼
得分: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
等 级:
论坛游民
帖 子:73
专家分:16
注 册:2011-6-5
第
13
楼
得分:0
回复 12楼 hellovfp
貌似不对吧,传过去的是地址,而不是值传递,kid_x说的蛮对的,其实p1已经指向不是自己分配的空间了,所以free的时候才会报错
2012-06-19 15:50
Kid_X
等 级:
黑侠
帖 子:216
专家分:515
注 册:2007-10-8
第
14
楼
得分:0
回复 13楼 gao_guai
其实12说的对的。
传递的既是值,也是地址。具体要看是对谁而言的。说到底,计算机处理的都是二进制数,其具体的含义是相对的。
传递的是指针变量的值,而这个值同时也表示一个地址,指针变量说到底也是一个变量,它也占用内存,可以通过&运算符取其地址,只是它的值在含义上可以表示一个地址而已。
可能我说的不是很清楚,lz自己领悟一下。只要理解透彻了,指针也就不是什么难懂的东西了。
[
本帖最后由 Kid_X 于 2012-6-19 20:26 编辑
]
2012-06-19 20:21
gao_guai
等 级:
论坛游民
帖 子:73
专家分:16
注 册:2011-6-5
第
15
楼
得分:0
谢谢
2012-06-19 21:14
15
2/2页
1
2
参与讨论请移步原网站贴子:
https://bbs.bccn.net/thread-371593-1-1.html
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.264024 second(s), 9 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved