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之前手动释放不? p指向的内存不会泄露,旧进程的数据段/代码段彻底被替换,malloc使用的堆也是数据段的一部分。 只fork不exec的话,还是算内存泄漏,要free的。 回复 2# timespace
我开始也是这么想的,可是没有找到确切的依据。
回复 3# linux_c_py_php
不执行exec很好理解,主要是不清楚exec到底做了些什么,没有研究过exec的代码。
回复 4# bfdhczw
想要什么样的依据?看man exec或任何一本将系统编程的书,如果还有疑虑,看内核代码。
回复 2# timespace
不理解???我认为p是无效的,旧进程的数据段/代码段彻底被替换,被替换不等于子进程也执行了void *p=malloc(100);函数。。。难道楼主的代码里,fork子进程返回的时候,难道子进程也执行了void *p=malloc(100);函数吗???
页:
[1]