社区
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上层的结构指针会不会造成内存泄露?
...全文
125
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
作业
写回复
配置赞助广告
用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
打赏
举报
回复
都得释放吧
vs2010
内存泄露
检查工具
vs2010的c++
内存泄露
检查工具,可定位到出错代码行、开源免费工具。
内存泄露
Demo leaky app
内存泄露
Demo leaky app
内存泄漏检测工具leakdiag和配套图形化查看工具LDGrapher
LeakDiag是一个监测内存泄漏的工具,可以用来精确地找到
内存泄露
一直到代码行。它使用微软的Detours 技术,拦截指定内存分配的调用并跟踪各种调用栈,并报告已分配但尚未释放的内存,这一信息允许让我们在排除一个
内存泄露
问题
时,能精确查看哪些组件进行了该分配。使用正确的调试符号,我们甚至可以看见请求分配的代码行。
关于内存泄漏
问题
(共享内存、请求调页、缺页异常处理)
1.
问题
描述 最近发现了一个
问题
,当不同的进程申请了同一块共享内存时,会有内存泄漏现象,即当程序运行时,有些进程的内存会逐渐 增加,波动幅度较为明显。 2.
问题
排查 通过调试排查,我们发现是共享内存引起的。我们用两个进程分别初始化同一个共享内存(5M),然后什么都不做,测试结果是第一个进程占用的内存是5M左右,第二个进程占用的内存是200K左右,结果如下图所示。 ...
如何解决内存泄漏
问题
内存泄漏是指程序运行过程中,由于程序员的疏忽或者程序设计的缺陷,导致一些内存资源无法被回收,从而占用了系统的内存空间,最终导致系统的性能下降或崩溃。使用编程工具,如Valgrind、Purify等,检查内存泄漏
问题
,这些工具能够监测程序运行时的内存使用情况,从而找出内存泄漏
问题
。通过增加系统内存,提高系统内存的使用效率,可以缓解因内存泄漏带来的系统性能
问题
。分析代码,找出可能存在内存泄漏的代码段,比如未释放内存、循环引用等。及时释放内存,对于已经分配的内存资源,需要在使用完毕后及时释放。
C语言
70,020
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章