malloc两次或多次free一次

Turbo米 2011-12-15 09:57:41
请教,像如下代码,windows和linux编译都不报错,那怎么样检查这种错误。
另外,p在第二次malloc之后,内存是多大呢?

#include <stdlib.h>

int main()
{
void *p;

p = malloc(20);
p = malloc(200);
free(p);

getchar();
return 0;
}
...全文
978 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 skyworth98 的回复:]

引用 4 楼 et214721856 的回复:

引用 1 楼 woweiwokuang0000 的回复:

第一次开辟的内存造成泄漏,变成无用空间。free之前p的空间大小为200

对的,p只是指向开辟空间的首地址

你第二次申请空间的时候,给了个新的地址,就是第二次申请到的地址

然而第一次申请的地址因此给覆盖了,造成第一次申请的空间泄漏了,就是当你想释放的时候却找不到……
[/Quote]
支持,抵制sp...........
fredshao 2011-12-15
  • 打赏
  • 举报
回复
应该是200吧,第二次MALLOC后指针指向了200的空间,第一次申请的那块空间没用了,但没有释放啊。。。
skyworth98 2011-12-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 et214721856 的回复:]

引用 1 楼 woweiwokuang0000 的回复:

第一次开辟的内存造成泄漏,变成无用空间。free之前p的空间大小为200

对的,p只是指向开辟空间的首地址

你第二次申请空间的时候,给了个新的地址,就是第二次申请到的地址

然而第一次申请的地址因此给覆盖了,造成第一次申请的空间泄漏了,就是当你想释放的时候却找不到之前的地址了。
[/Quote]

sp.........
周晓荣 2011-12-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 woweiwokuang0000 的回复:]

第一次开辟的内存造成泄漏,变成无用空间。free之前p的空间大小为200
[/Quote]
对的,p只是指向开辟空间的首地址

你第二次申请空间的时候,给了个新的地址,就是第二次申请到的地址

然而第一次申请的地址因此给覆盖了,造成第一次申请的空间泄漏了,就是当你想释放的时候却找不到之前的地址了。
Turbo米 2011-12-15
  • 打赏
  • 举报
回复
嗯,谢谢各位,我了解了。
logicouter 2011-12-15
  • 打赏
  • 举报
回复
有内存泄漏的检测工具,可以搜一下。
shun_qizi_ran 2011-12-15
  • 打赏
  • 举报
回复
第一次开辟的内存造成泄漏,变成无用空间。free之前p的空间大小为200

70,037

社区成员

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

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