malloc内存分配,必须释放。否则内存泄漏?

幸福的面包 2014-01-03 12:19:15
#include <stdio.h>
#include <malloc.h>

int main(void)
{
char *ptr = (char*)malloc(10);
if(NULL == ptr)
{
printf("\n Malloc failed \n");
return 0;
}
else
{
free(ptr);
}
return 0;
}

刚才看了一道题。解释如下:
尽管上面的代码并没有释放分配给“ptr”的内存,但并不会在程序退出后导致内存泄漏。在程序结束后,所有这个程序分配的内存都会自动被处理掉。
这是为什么呢?
...全文
796 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Adol1111 2014-01-04
  • 打赏
  • 举报
回复
对于1S种就结束的程序来说弹内存泄漏没意义。除非你来个循环,次次内存泄漏,这我就不说了。 对于长期运行的程序,内存泄漏是很有问题的,严重影响系统资源。用完了,就必须释放,不要侥幸。
幸福的面包 2014-01-04
  • 打赏
  • 举报
回复
引用 12 楼 cjfdqchwh 的回复:
[quote=引用 11 楼 cjfdqchwh 的回复:] [quote=引用 6 楼 u011939931 的回复:] 不好意思,程序上错了。是这个……
int main(void)
{
  char *ptr = (char*)malloc(10);
  if(NULL == ptr)
  {
    printf("\n Malloc failed \n");
    return 0;
  }
  else
  {
  }
  return 0;
 }
这肯定内存泄露,不过这个函数不再一个循环里头,只是运行一次,所以程序运行一次,就会泄露了 10个char类型的内存[/quote] 当这个程序结束后,操作系统会自动去清扫分配给这个进程的资源。[/quote]
幸福的面包 2014-01-04
  • 打赏
  • 举报
回复
引用 14 楼 taodm 的回复:
这说明楼主看错了书,把错误结论/有限制条件结论当普遍真理了。
taodm 2014-01-04
  • 打赏
  • 举报
回复
这说明楼主看错了书,把错误结论/有限制条件结论当普遍真理了。
版主大哥 2014-01-04
  • 打赏
  • 举报
回复
对于运行7*24小时的程序,不能容忍内存泄漏,你想想,一直想系统要内存,内存肯定会用光的 对于运行一下,就关掉的程序,内存泄漏一下也没什么关系。因为关掉程序后,内存又归系统了 但是你想,好的程序能让系统的内存用光吗?
cjfdqchwhj 2014-01-04
  • 打赏
  • 举报
回复
引用 11 楼 cjfdqchwh 的回复:
[quote=引用 6 楼 u011939931 的回复:] 不好意思,程序上错了。是这个……
int main(void)
{
  char *ptr = (char*)malloc(10);
  if(NULL == ptr)
  {
    printf("\n Malloc failed \n");
    return 0;
  }
  else
  {
  }
  return 0;
 }
这肯定内存泄露,不过这个函数不再一个循环里头,只是运行一次,所以程序运行一次,就会泄露了 10个char类型的内存[/quote] 当这个程序结束后,操作系统会自动去清扫分配给这个进程的资源。
cjfdqchwhj 2014-01-04
  • 打赏
  • 举报
回复
引用 6 楼 u011939931 的回复:
不好意思,程序上错了。是这个……
int main(void)
{
  char *ptr = (char*)malloc(10);
  if(NULL == ptr)
  {
    printf("\n Malloc failed \n");
    return 0;
  }
  else
  {
  }
  return 0;
 }
这肯定内存泄露,不过这个函数不再一个循环里头,只是运行一次,所以程序运行一次,就会泄露了 10个char类型的内存
SKATE11 2014-01-03
  • 打赏
  • 举报
回复
但是在程序运行期间要是不释放那就是泄露了
SKATE11 2014-01-03
  • 打赏
  • 举报
回复
因为在进程正常结束的情况下有操作系统给你做清理工作
max_min_ 2014-01-03
  • 打赏
  • 举报
回复
如果整个过程中都需要使用的话,可以不释放!但是习惯不好!不推荐! 还是释放会比较靠谱
幸福的面包 2014-01-03
  • 打赏
  • 举报
回复
不好意思,程序上错了。是这个…… #include <stdio.h> #include <malloc.h> int main(void) { char *ptr = (char*)malloc(10); if(NULL == ptr) { printf("\n Malloc failed \n"); return 0; } else { } return 0; }
幸福的面包 2014-01-03
  • 打赏
  • 举报
回复
引用 2 楼 zhuobattle 的回复:
如果不free,那就内存泄漏了。
我给程序弄错了,本来里面没有free(ptr)这句。
lin5161678 2014-01-03
  • 打赏
  • 举报
回复
malloc得到的内存不free 自然会 内存泄露 然后内存泄露是一个运行期的隐患 说什么程序结束之后 会回收资源就前言不搭后语了 另外你的代码有释放malloc得到的内存 至于返回值NULL 这种情况你没有获得malloc得到的内存 自然不存在什么释放的问题 再另外 free 之前 判断指针是否为NULL是多余的 因为free NULL是安全的 不过malloc 之后 判断指针是否是NULL 就是有必要的
Pump天天学习 2014-01-03
  • 打赏
  • 举报
回复
如果这个程序要连续跑上一个月不结束,那么分配的内存如果不释放就会有问题 另外,这段代码释放掉了内存
zhuobattle 2014-01-03
  • 打赏
  • 举报
回复
如果不free,那就内存泄漏了。
lm_whales 2014-01-03
  • 打赏
  • 举报
回复
不释放分配的内存,内存泄露是有的,只是没有影响到操作系统而已。 操作系统变聪明了,所以内存泄露不怕了。 如此而已. 另外,这段代码,已经释放内存了。 malloc 结果为NULL,表示分配内存失败,内存没有分配,不必释放。
赵4老师 2014-01-03
  • 打赏
  • 举报
回复
参考《深入解析Windows操作系统-Windows Internals》进程管理。

70,023

社区成员

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

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