【发布时间】:2015-07-24 17:14:14
【问题描述】:
此代码导致分段错误:
int main(int argc, char *argv[]){
int *n;
*n = atoi(argv[1]);
printf("n: %d \n", *n);
return 0;
}
虽然这有效:
int main(int argc, char *argv[]){
int *n;
*n = atoi(argv[1]);
pid_t pid = fork();
if (pid == 0)
return 0;
else
printf("n: %d \n", *n);
return 0;
}
为什么用叉子的第二个有效?我知道在int *n 之后,我应该为int 和malloc() 分配空间,但使用fork() 似乎会自动执行此操作。
编辑: 现在我了解未定义的行为:) 但现在我要问:这个具体案例的原因是什么?
【问题讨论】:
-
未定义的行为是未定义的;任何事情都可能发生,结果是合法的。不要调用未定义的行为。
-
“曾经有人告诉我,在篮球运动中你不能拿着球跑。我拿了一个篮球试了一下,效果很好。他显然不懂篮球。”——罗杰米勒关于未定义的行为
标签: c segmentation-fault fork