关于内存泄露的问题

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 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
都得释放吧

69,371

社区成员

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

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