- 論壇徽章:
- 0
|
1.代碼
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
main()
{
char *ptr;
pid_t child;
ptr=(char *)malloc(20);
child=fork() ;
if ( child<0 ) {
perror("fork err");
exit(-1);
} else if ( child==0 ) {
sleep(1);
printf("%d,%p,[%s]\n",getpid(),ptr,ptr);
exit(0);
} else {
strcpy(ptr,"hello");
printf("%d,%p,[%s]\n",getpid(),ptr,ptr);
wait(NULL);
exit(0);
}
}
|
執(zhí)行結(jié)果是:
2200,403b44,[hello]
2201,403b44,[]
以前聽說(shuō)子進(jìn)程如果不改變ptr的值,那么就不重新分配空間,地址是沒(méi)有變化,可為什么取不到值,是不是403b44是內(nèi)存相對(duì)地址?
2.還想問(wèn)個(gè)問(wèn)題,一個(gè)函數(shù),fork之后子進(jìn)程malloc,然后exit退出子進(jìn)程,再return退出函數(shù),之間沒(méi)有free會(huì)不會(huì)內(nèi)存泄露? |
|