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”的内存,但并不会在程序退出后导致内存泄漏。在程序结束后,所有这个程序分配的内存都会自动被处理掉。
这是为什么呢?
...全文
204 点赞 收藏 17
写回复
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》进程管理。
回复 点赞
发动态
发帖子
C语言
创建于2007-09-28

3.2w+

社区成员

24.0w+

社区内容

C语言相关问题讨论
社区公告
暂无公告