再问有关内存释放的函数(急)

liqian99 2007-03-01 06:46:33
有一函数,返回值为
unsigned char* Func(void)
{
unsinged char* A;
A=malloc(10)
....
return A;
}
main()
{
unsigned char *B
B=malloc(10); //B申请了空间
B=Func(); //B改变指向
free(B); //释放了A, 但没有释放B
}

当释放B时,是不是同时也释放了A,如果没有,怎样释放A.急需各位指点.

上述注释是一仁兄指点,给A付值后,再打印A,B,都没有值.且再释放B报错.

如果B没释放,怎样释放呢,哪位高手再指点一下,先谢谢了.
...全文
293 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
bgqy2000 2007-03-02
  • 打赏
  • 举报
回复
zoco33(沈浩翔) ( ) 信誉:101 Blog

同意
nicole_lixp 2007-03-01
  • 打赏
  • 举报
回复
既然B调用FUNC是为了控制新分配的空间,那么在调用只前就应该判断B指针是否有指向,如果有就先free掉或移交
zoco33 2007-03-01
  • 打赏
  • 举报
回复
这里解释一下,LZ的程序实际上是有问题的。

unsigned char* Func(void)
{
unsinged char* A;
A=malloc(10)
....
return A;
}
main()
{
unsigned char *B
B=malloc(10); //这里错了,根本就不应该有这一句。
B=Func();
free(B);
}

上面几位说的对,但是没解释明白。LZ就是想让B指向字符串A,但A已经在函数中申请空间了,在主函数中B就不用再申请空间了。LZ 这句:B=malloc(10);申请了内存空间, B=Func();是把B的指向改为了A所指的那段内存空间,而主函数中B申请的内存空间这时候由于没有了变量指向就泄漏了。free(B);是指把B指向的内存空间释放掉,这时候释放掉的就是函数中A申请的空间。最后程序结束了,B申请的空间根本就没有用到,而且由于后来B指向了A的空间,所以B申请的空间
也没有被释放。


正确的程序应该是:
unsigned char* Func(void)
{
unsinged char* A;
A=malloc(10);
....
return A;
}
main()
{
unsigned char *B;
B=Func(); //B指向A申请的空间
free(B); //释放了A申请的那段空间
}
晨星 2007-03-01
  • 打赏
  • 举报
回复
B=malloc(10);

//这里应该先释放B原来指向的空间,再给B赋予新值。
B=Func();
free(B);

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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