社区
C语言
帖子详情
关于内存泄露的问题
zouxinfox
2008-05-12 07:51:44
struct A
{
char *p;
};
struct A *a=(struct A*)malloc(sizeof(struct A));
a->p=(char *)malloc(sizeof(char));
在释放内存时是
free(a);
还是
free(a->p);
free(a);
也就是说仅仅free上层的结构指针会不会造成内存泄露?
...全文
120
9
打赏
收藏
关于内存泄露的问题
struct A { char *p; }; struct A *a=(struct A*)malloc(sizeof(struct A)); a->p=(char *)malloc(sizeof(char)); 在释放内存时是 free(a); 还是 free(a->p); free(a); 也就是说仅仅free上层的结构指针会不会造成内存泄露?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hjack
2008-05-12
打赏
举报
回复
malloc和free配对使用.
mymtom
2008-05-12
打赏
举报
回复
[Quote=引用楼主 zouxinfox 的帖子:]
struct A
{
char *p;
};
struct A *a=(struct A*)malloc(sizeof(struct A));
a->p=(char *)malloc(sizeof(char));
在释放内存时是
free(a);
还是
free(a->p);
free(a);
也就是说仅仅free上层的结构指针会不会造成内存泄露?
[/Quote]
还是
free(a->p);
free(a);
仅仅free上层的结构指针会造成内存泄露
cjls1
2008-05-12
打赏
举报
回复
都要释放,如果觉得难理解,可以这样想
struct A *a=(struct A*)malloc(sizeof(struct A)); 对结构体开辟空间,结构体中只有个指针,那么只开辟了这个指针的空间,4字节一般(再加上其他结构体附加空间),此时这个指针指向的空间内容未定。(指针指向的内容多大不知道)
a->p=(char *)malloc(sizeof(char)); 对p指向的字符(串)开辟空间,如果p要指向比如说“abcde”这样的字符串,可以malloc(sizeof(char)*N),N自定,然后p指针指向的空间就可以赋值使用了。
如果free时,只free(a),你想想,只是把这个指针占的空间回收了,它指向的那一串东西还在内存里,所以就早成了泄露。
zouxinfox
2008-05-12
打赏
举报
回复
多谢大家,如果我没猜错的话,楼上的那位書記貌似是我所在的一个UNIX群的老大,呵呵,很热心的一说
Xshl5
2008-05-12
打赏
举报
回复
[Quote=引用 2 楼 mscf 的回复:]
都要free,malloc和free就是需要成对出现的
[/Quote]
有道理。
lixun_21
2008-05-12
打赏
举报
回复
[Quote=引用 3 楼 lixun_21 的回复:]
都要释放啊
当你free(a);后 a为一个野指针 只向随机位置
p之前分配的内存也就泄漏了。
所以要 先free(a->p);
然后free(a);才不会造成内存泄漏
[/Quote]
lixun_21
2008-05-12
打赏
举报
回复
都要释放啊
当你free(a);后 a为一个野指针 只向随机位置
p之前的内存也就泄露的
所以要 先free(p);
然后free(a);才不会造成内存泄漏
薛定谔之死猫
2008-05-12
打赏
举报
回复
都要free,malloc和free就是需要成对出现的
jieao111
2008-05-12
打赏
举报
回复
都得释放吧
内存泄露
Demo leaky app
内存泄露
Demo leaky app
vs2010
内存泄露
检查工具
vs2010的c++
内存泄露
检查工具,可定位到出错代码行、开源免费工具。
内存泄漏检测工具leakdiag和配套图形化查看工具LDGrapher
LeakDiag是一个监测内存泄漏的工具,可以用来精确地找到
内存泄露
一直到代码行。它使用微软的Detours 技术,拦截指定内存分配的调用并跟踪各种调用栈,并报告已分配但尚未释放的内存,这一信息允许让我们在排除一个...
ThreadLocal内存泄漏
问题
讲解
二、为什么ThreadLocal会发生内存泄漏
问题
? 2.1
问题
发现 以下是整体结构 ThreadLocal就相当于一个访问工具类,通过操作ThreadLocal对象的方法 来操作存储在当前线程内部的ThreadLocalMap里的值 ThreadLocalMap...
如何解决内存泄漏
问题
使用编程工具,如Valgrind、Purify等,检查内存泄漏
问题
,这些工具能够监测程序运行时的内存使用情况,从而找出内存泄漏
问题
。通过增加系统内存,提高系统内存的使用效率,可以缓解因内存泄漏带来的系统性能
问题
。...
C语言
69,371
社区成员
243,080
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章