看看这段代码
int main(int argc, char **argv) { int pid[3]; int i,tmp; pid[0]=getpid(); if((tmp=fork()) == 0) { pid[2]=getpid(); printf("3. PIDY %d %d %d\n", pid[0], pid[1], pid[2]); } else { pid[2]=tmp; if((tmp=fork()) == 0) { pid[1]=getpid(); printf("2. PIDY %d %d %d\n", pid[0], pid[1], pid[2]); } else { pid[1]=tmp; printf("1. PIDY %d %d %d\n", pid[0], pid[1], pid[2]); } } return 0; }
在输出我得到这样的smth:
1. PIDY 101 102 103 2. PIDY 101 102 103 3. PIDY 101 0 103
我想知道为什么我在第三个过程中得到pid [1] = 0?知道怎么解决吗?
打印3.
线的过程在任何设置之前已经分叉pid[1]
.它不在共享内存中,因此没有值可以从其他进程存储到它中,并且你从未初始化它,所以它包含内存污垢,只巧巧0.
如果数组被声明为全局变量或者它是函数中的静态变量,那么0
除非已经初始化,否则元素将被初始化为. C中int数组的初始值是一个很好的读数.