免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 9406 | 回复: 26
打印 上一主题 下一主题

调用exit的时候用malloc分配的内存会自动释放吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-06-22 16:42 |只看该作者 |倒序浏览
调用exit的时候用malloc分配的内存会自动释放吗?

看了一些unix/linux下的源程序,出错的时候就直接exit,没有free的过程。

论坛徽章:
0
2 [报告]
发表于 2005-06-22 17:19 |只看该作者

调用exit的时候用malloc分配的内存会自动释放吗?

会,铁定会。不但调用exit会,就算被kill了也会。

论坛徽章:
0
3 [报告]
发表于 2005-06-22 20:31 |只看该作者

调用exit的时候用malloc分配的内存会自动释放吗?

  1. [zdai@localhost test]$ more exit_free.c
  2. #include<stdio.h>;
  3. #include<unistd.h>;
  4. #include<stdlib.h>;

  5. void fun( int i);
  6. int *p;
  7. void fun( int i)
  8. {
  9. //      int *p;
  10.         p = malloc(sizeof(int));
  11.         *p = i;
  12.         printf("malloc successful,and %d has been store to the memory!\n",i);
  13.         printf("malloc the address is %x\n",p);
  14.         //exit (2);
  15. }

  16. int main(void)
  17. {
  18.         pid_t pid;
  19.         int k;
  20.         int status;
  21.         k = fork();
  22.         if ( k == 0)
  23.         {
  24.                 fun(1);
  25.                 exit(5);
  26.         }
  27.         else {
  28.         sleep(1);
  29.         printf("------\n");
  30.         pid = wait(&status);
  31.         printf("%x\n",p);
  32.         printf("%d\n",*p);
  33.         return 0;
  34.         }
  35. }
  36. [zdai@localhost test]$
复制代码

随便写的,大家不要见效.这样不知道算不算验证
结果是
  1. [zdai@localhost test]$ ./exit_free
  2. malloc successful,and 1 has been store to the memory!
  3. malloc the address is 80498a8
  4. ------
  5. 0
  6. Segmentation fault
  7. [zdai@localhost test]$
复制代码

子进程中malloc的空间在exit之后,好像是没了.

论坛徽章:
0
4 [报告]
发表于 2005-06-22 21:13 |只看该作者

调用exit的时候用malloc分配的内存会自动释放吗?

原帖由 "prc" 发表:

看了一些unix/linux下的源程序,出错的时候就直接exit,没有free的过程。


exit意味着进程的结束,
进程一结束,所有的内存空间全部都释放,
当然不需要free

论坛徽章:
0
5 [报告]
发表于 2005-06-23 09:17 |只看该作者

调用exit的时候用malloc分配的内存会自动释放吗?

[quote]原帖由 "bigapple2008"]子进程中malloc的空间在exit之后,好像是没了.[/quote 发表:


这个验证应该是不对的。
p指向的内存是在子进程里分配的,不管释放与否,在其父进程里去访问p指向的内存单元都是不争取的。

论坛徽章:
0
6 [报告]
发表于 2005-06-23 09:19 |只看该作者

调用exit的时候用malloc分配的内存会自动释放吗?

再顺便问一句:
那么在程序运行过程中用open,fopen,socket,accept,connect...打开的文件描述符,在exit的时候也能自动关闭吗??

论坛徽章:
0
7 [报告]
发表于 2005-06-23 09:30 |只看该作者

调用exit的时候用malloc分配的内存会自动释放吗?

os会为每一个进程维护一张打开的文件列表,不管进程如何退出,os都会知道,然后把所有它打开的文件统统关闭掉~

论坛徽章:
0
8 [报告]
发表于 2005-06-23 09:34 |只看该作者

调用exit的时候用malloc分配的内存会自动释放吗?

那个是不是叫进程控制块,PCB啊
SirFang 该用户已被删除
9 [报告]
发表于 2005-06-23 09:46 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
SirFang 该用户已被删除
10 [报告]
发表于 2005-06-23 09:49 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP