我正在尝试运行以下 C 程序:
/*
* Illustrates system call fork
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int
main (
int argc,
char *argv[]
)
{
int tC, tF;
pid_t pid;
tC = atoi (argv[1]);
tF = atoi (argv[2]);
fprintf (stdout, "Main : ");
fprintf (stdout, "PID=%d; My parent PID=%d\n",
getpid(), getppid());
pid = fork();
if (pid == 0){
// Child
sleep (tC);
fprintf(stdout, "Child : PIDreturned=%d ", pid);
fprintf (stdout, "PID=%d; My parent PID=%d\n",
getpid(), getppid());
} else {
// Father
sleep (tF);
fprintf(stdout, "Father: PIDreturned=%d ", pid);
fprintf (stdout, "PID=%d; My parent PID=%d\n",
getpid(), getppid());
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我能够编译代码,但是当我尝试运行可执行文件时,我收到“分段错误(核心转储)”错误消息。
谁能告诉我是什么导致了这样的问题以及如何解决它?
您没有检查用户是否提供了任何参数。如果提供给程序的参数少于 2 个,它将超出atoi范围argv(这具有未定义的行为,并且程序可能因此崩溃)。
我建议你直接在开始时检查它main。例子:
int main(int argc, char* argv[]) {
if(argc != 3) {
fprintf(stderr, "USAGE: %s child-sleeptime parent-sleeptime\n", argv[0]);
return 1;
}
// ... the rest of `main`
Run Code Online (Sandbox Code Playgroud)