社区
C语言
帖子详情
有关内存释放的疑问
liqian99
2007-03-01 04:55:15
有一函数,返回值为
unsigned char* Func(void)
{
unsinged char* A;
A=malloc(10)
....
return A;
}
main()
{
unsigned char *B
B=malloc(10);
B=Func();
free(B);
}
当释放B时,是不是同时也释放了A,如果没有,怎样释放A.急需各位指点.
...全文
318
14
打赏
收藏
有关内存释放的疑问
有一函数,返回值为 unsigned char* Func(void) { unsinged char* A; A=malloc(10) .... return A; } main() { unsigned char *B B=malloc(10); B=Func(); free(B); } 当释放B时,是不是同时也释放了A,如果没有,怎样释放A.急需各位指点.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
dancewithgod
2007-03-02
打赏
举报
回复
malloc的使用是和free相配套的..
在对指针、内存操作的时候,一定要注意
qhgary
2007-03-02
打赏
举报
回复
另外你这样的设计不好,如果Func里面分配了空间,最好就在Func里面把空间释放掉,而不是退出到main函数里面再释放.当然有时候做到这个比较难,那么最好弄一个和分配空间函数Func对应的释放空间的函数FreeFunc,在调用Func的地方尽可能也调用FreeFunc.否则一旦东调西调,肯定会出现分配释放不配对的情况,即使逻辑上你检查都是配对的,在出现特殊分支或者异常的情况下,也会导致无法配对执行.
qhgary
2007-03-02
打赏
举报
回复
有一函数,返回值为
unsigned char* Func(void)
{
unsinged char* A;
A=malloc(10)
....
return A;
}
main()
{
unsigned char *B
B=malloc(10);
B=Func();
free(B);
}
当释放B时,是不是同时也释放了A,如果没有,怎样释放A.急需各位指点.
------------------------------------
释放B时,只是释放了A, 而B本身malloc(10)的空间将永远无法释放.
实际上B=malloc(10),系统给了一个地址给B, 而B=Func(),将先前的那个地址给永远的覆盖了.
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申请的那段空间
}
guoshanhe
2007-03-01
打赏
举报
回复
内存泄漏了啊
操作系统在分配给程序内存时,会记下这段内存的首地址和大小,释放时只要调用free,参数是指向这段内存的首地址的指针就行,至于指针是否变换无关紧要,只要给的指针是指向这个首地址就行,也不用管这个内存段的大小
iambic
2007-03-01
打赏
举报
回复
看书补基础。
p_zyh
2007-03-01
打赏
举报
回复
A、B不指向值不表示内存释放啦啊
就是因为没有指针指向那块内存
才造成的内存泄漏啊
感觉lz对指针的概念以及指针和内存的关系还不是很清楚
liqian99
2007-03-01
打赏
举报
回复
但我给A付值后,测试打印结果,A,B都没指向值.
p_zyh
2007-03-01
打赏
举报
回复
seas110(迷@迷) 的说法是正确的,注释的也很清楚
要确认的话用内存泄漏的检查工具跑以下就知道了
liqian99
2007-03-01
打赏
举报
回复
有什么办法确定一下,很重要,谢谢各位了
bgqy2000
2007-03-01
打赏
举报
回复
应该是释放了
seas110
2007-03-01
打赏
举报
回复
main()
{
unsigned char *B
B=malloc(10); //B申请了空间
B=Func(); //B改变指向
free(B); //释放了A, 但没有释放B
}
hand_in_hand
2007-03-01
打赏
举报
回复
释放B时没有同时释放A。
可以将A设为全局变量,
然后在主函数尾free(A)。
iu_81
2007-03-01
打赏
举报
回复
释放了
C++第3课:C++
内存
泄露检测原理及案例实战
本课程具体的内容主要包括C++
内存
泄露案例、VS2015
内存
泄露检测、野指针、VirtualAlloc/HeapAlloc/malloc/new的区别、C++堆和栈的
内存
管理、栈简介、堆简介、堆与栈区别、栈的
内存
分配、Windows的虚拟
内存
技术、...
python
内存
释放
规则_python
内存
释放
问题/回答/
疑问
等价l = range(1000 * 1000 * 10 )这样的
内存
大对象,是不会被随便
释放
的,直到进程退出;我了解到一个 Boehm GC 尝试做类似的事情.GC后全部
释放
;但只是Linux试验;并不是通用性解决方法;回答:环境:是w_xp下的虚拟机--...
java的
内存
释放
方法_Java直接
内存
分配与
释放
原理
前言在Java中分配直接
内存
大有如下三种主要方式:Unsafe.allocateMemory()ByteBuffer.allocateDirect()native方法Unsafe类Java提供了Unsafe类用来进行直接
内存
的分配与
释放
public native long allocateMemory(long ...
C语言—
内存
的管理和
释放
C语言—
内存
的管理和
释放
一、Linux下
内存
分配管理1.编译好的C程序文件分区2.C程序运行时
内存
分区3.为什么要进行
内存
分配4.
内存
分配方式二、详解堆和栈1.堆和栈的简介2.堆和栈的区别三、
内存
管理函数四、其它知识1....
linux进程占用
内存
不会
释放
,手工
释放
Linux系统进程占用的
内存
总有很多朋友对于Linux的
内存
管理有
疑问
,之前一篇linux下的
内存
管理方式似乎也没能清除大家的疑虑。而在新版核心中,似乎对这个问题提供了新的解决方法,特转出来给大家参考一下。最后,还附上我对这方法的意见,...
C语言
69,370
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章