急!关于free

zcjl 2003-05-22 08:36:37
在函数内部动态分配了一块空间
main中调用该函数后,指向该空间的指针通过类似于p++的方法指向了整块空间的末尾。
请问这个时候用free(p)会释放整个空间吗?

急,望达人帮忙,结贴迅速!
...全文
78 点赞 收藏 18
写回复
18 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zcjl 2003-05-22
因为设计赶得紧,没办法调试,
所以我想确切知道:我贴出的第二段代码那种做法是否正确?
回复
zcjl 2003-05-22

楼上的看清楚
长弓也是楼主
只是突然没事干
改了个名字而已
:)
不过谢谢你进来帮忙!!!
回复
zcjl 2003-05-22
感谢达人救命啊

是不是就是我贴出的第二个代码里面的做法?
回复
wshcdr 2003-05-22
free只能是指针指在一块内存的开头的时候

才能正确释放

我觉得 zcjl(长弓) 可能猜测出了楼主的意思
回复
晨星 2003-05-22
当然不会,你必须在移动p之前把原来的值记录到另一个变量里去。

malloc和free都涉及到系统调用,而操作系统只有通过原来被分配的内存的首地址,才能完成正确的释放。
回复
zcjl 2003-05-22
再等半个小时
没人来看就结贴了!
回复
zcjl 2003-05-22
用循环依次free?
不懂
楼上的能否给出一个例子看看?
回复
98440622 2003-05-22
我倾向于使用循环,依次free。
回复
zcjl 2003-05-22
晕!!
怎么我贴出例子后反而没人来看了?
回复
zcjl 2003-05-22
xiaoyunet(快乐的小猪)的意思是不是这样:

int main()
{
int Count, num;
StructA *Sp, *Tp;
Func( &Count, &Sp );
Tp = Sp;
while((Count--) > 0)
{
num = Sp->num1;
Sp++;
}
free(Tp) //这里free可以释放掉申请的那块内存空间么?
}


这样就可以了么??
回复
zcjl 2003-05-22
例子如下:
void Func(int *Count, StructA **Sp)
{
StructA *p;
int count = 5;
(*Count) = count;
p = (StructA *) malloc (sizeof(StructA) * count);
(*Sp) = p;
for( int i=0; i<count; i++)
{
p->num1 = 5;
p++;
}
}

int main()
{
int Count, num;
StructA *Sp;
Func( &Count, &Sp );
while((Count--) > 0)
{
num = Sp->num1;
Sp++;
}
free(Sp) //这里free可以释放掉申请的那块内存空间么?
}

谢天谢地,终于有人来看一下了!!!
回复
xiaoyunet 2003-05-22
此时不能用free(p)了,要解决这个问题需要用另外一个执政保存p的内容,在对p进行p++之类俄操作就没有问题了,到了释放的时候使用free(保存的指针).
我想说得够明白了吧。
回复
gzqreder 2003-05-22
他的意思应该是指向数组的指针吧,p++指向下一个数组元素
回复
liu_feng_fly 2003-05-22
不会,free的那个指针必须是malloc之类的函数返回的指针
回复
gzqreder 2003-05-22
不会
回复

一般的内存管理,free可以释放内存,不过一定要注意几个问题
1。申请内存和释放内存一定要配对
2。free之后,把指针设为NULL

但是这句话不懂:
指向该空间的指针通过类似于p++的方法指向了整块空间的末尾
回复
summerCsdn 2003-05-22
应该不会,你最好把代码贴出来,或者举个例子。
回复
zcjl 2003-05-22
真的很急啊
没人看到么??
回复
相关推荐
发帖
C语言
创建于2007-09-28

6.4w+

社区成员

C语言相关问题讨论
申请成为版主
帖子事件
创建了帖子
2003-05-22 08:36
社区公告
暂无公告