错误消息“分段错误(核心已转储)”

0 c posix

我正在尝试运行以下 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)

我能够编译代码,但是当我尝试运行可执行文件时,我收到“分段错误(核心转储)”错误消息。

谁能告诉我是什么导致了这样的问题以及如何解决它?

Ted*_*gmo 5

您没有检查用户是否提供了任何参数。如果提供给程序的参数少于 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)