我想在C中使用fork()做一個程序,但是當我在代碼中創建一個char數組時,程序會產生一個意外的結果(而不是創建5個五個兒子6個兒子?而且爸爸?)意外的結果與字符數組和叉
的代碼是這個
#include <stdlib.h>
#include <stdio.h>
#define NUMPROC 5
int main (int argc, char *args[]){
//UNCOMMENTTHIS LINE
//char a[] = {'a','b','c','d','\0'};
int i;
pid_t status[NUMPROC];
for(i = 0; i< NUMPROC; i++){
status[i] = fork();
//fork error
if(status[i] == -1){
perror("fork() error");
exit(1);
}
//quit because I'm a son
if(status[i] == 0)
break;
}
//son
if(status[i] == 0){
printf("I'm son number: %i\n", i);
}
//father
else{
//wait sons
for(i = 0; i < NUMPROC; i++){
wait(&status[0]);
}
printf("Father terminated\n");
}
}
如果試圖取消對數組的線,但從未使用過的結果改變了這種陣!
你能解釋我爲什麼嗎?
結果有什麼變化? –
'if(status [i] == 0)'在for之外,所以'i == NUMPROC':調用UB。 – LPs
我剛用Eclipse試了一下,用線評論輸出是: '我是兒子號碼:0 我是兒子號碼:1 我是兒子號碼:2 我是兒子號碼:3 我兒子數:4 父terminated' 隨着線未註釋的輸出爲: '我兒子數量:0 我子數:1 我子數:2 I」 m兒子數量:5 我的兒子編號:3 我是兒子編號:4' – Niles