我正在学习操作系统。当我测试这段代码时,我遇到了这个问题 - 分段错误,核心转储。 如何解决这个问题?
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <sys/types.h>
int main()
{
int p,*stat_addr;
while((p=fork())==-1);
if(p==0)
exit(0);
else
{
wait(stat_addr);
printf("%d\n",*stat_addr);
exit(0);
}
}
答案 0 :(得分:1)
那是因为你还没有初始化stat_addr。做类似的事情:
int stat_addr = 10;
然后像:
一样使用它wait(&stat_addr);
答案 1 :(得分:0)
使用:
int status;
int corpse = wait(&status);
尸体是死亡孩子的PID(如果没有孩子,则为-1)。退出状态以status
编码,除非corpse == -1
。
因为你有一个未初始化的指针而崩溃。我怀疑你对wait()
函数的原型感到困惑:
pid_t wait(int *stat_loc);
是的,它需要一个指针,但它必须是一个初始化为指针点的指针。或者,通常情况下,它是int
变量的地址,与我建议用法中的&status
一样。