bfdhczw 发表于 2014-03-31 10:21

exec之后malloc的内存是否已经释放?

void *p=malloc(100);
pid_t pid=fork();
if(pid>0)//parent
{
    free(p);
}
else if(pid==0)//child
{
    exec(......);
}
else
{
    //error
}这样会有内存泄露吗?在子进程中,exec之后p所指向的那段内存释放没?需要在exec之前手动释放不?

timespace 发表于 2014-03-31 10:47

p指向的内存不会泄露,旧进程的数据段/代码段彻底被替换,malloc使用的堆也是数据段的一部分。

linux_c_py_php 发表于 2014-03-31 17:00

只fork不exec的话,还是算内存泄漏,要free的。

bfdhczw 发表于 2014-04-01 10:17

回复 2# timespace

我开始也是这么想的,可是没有找到确切的依据。
   

bfdhczw 发表于 2014-04-01 10:18

回复 3# linux_c_py_php

不执行exec很好理解,主要是不清楚exec到底做了些什么,没有研究过exec的代码。
   

timespace 发表于 2014-04-01 10:28

回复 4# bfdhczw
想要什么样的依据?看man exec或任何一本将系统编程的书,如果还有疑虑,看内核代码。


   

daxiguagg 发表于 2014-04-20 16:42

回复 2# timespace

不理解???我认为p是无效的,旧进程的数据段/代码段彻底被替换,被替换不等于子进程也执行了void *p=malloc(100);函数。。。难道楼主的代码里,fork子进程返回的时候,难道子进程也执行了void *p=malloc(100);函数吗???
页: [1]
查看完整版本: exec之后malloc的内存是否已经释放?