int main(void)
{
char *x=(char *)malloc(100);
if(fork()==0)
{
free(x);//这句是否必要?????
exit(0);
}
free(x);
return 0;
}
---------------------------------------------------------------
个人觉得是有必要的。
fork时子进程复制父进程的几乎所有的东西,除了 PID, PPID,文件锁和信号。
所以堆栈空间的东西一并拿来了,应该释放的。
---------------------------------------------------------------
ari说的对,按正确的逻辑是应该释放的。但如果不释放,也不会造成什么问题,毕竟OS会给你释放的。
BTW,出现这种情况,很可能表明程序逻辑需要改进,呵呵。
---------------------------------------------------------------
我不同意 cniou(混混)的说法,os是不会给你释放的,这块内存将被占用,直到os 关机重起,才会释放,fork时子进程复制父进程的几乎所有的东西,父进程死了,子进程却没有死,那么子进程的内存由子进程自己管理,所以在子进程推出之前,一定要释放的。