fgets()中的分段错误

时间:2014-12-07 23:06:55

标签: c segmentation-fault fgets

我在fgets上遇到了段错误 我之前和之后使用printf进行了测试,并且它停止了(在循环之前的main方法中) 具有讽刺意味的是,我有另一个程序可以执行相同的调用并且可以正常工作 这是我的代码:

child(char * input){
    shrink(input);

    char ** words;
    char * word = strsep(&input, " ");
    int spaces = 0;

    while (word != NULL){
        words = realloc(words, ++spaces);

        if (words == NULL){ /* memory allocation failed */
            exit (1);
        }

        words[spaces-1] = word;
     word = strsep(&input, " ");
    }

    words = realloc (words, ++spaces);
    words[spaces] = NULL;

    char str[105];
    strcpy(str, "/bin/");
    strcat(str, words[1]);
    shrink(str);
    execvp(str, words);
    exit(0);

}

main() {

    char * input;
    int pid;

    printf("$ ");
    fgets(input, 100, stdin);

    while (strncmp(input, "exit", 4)){  /* while exit command has not been entered */
        pid = fork();
        if(pid == 0){           /* child process */
            child(input);
        }
        else if(pid < 0){       /* error while doing fork */
            exit(1);
        }
        else{                   /* parent process */
            wait(0);
        }

        printf("$ ");
        fgets(input, 100, stdin);
    }

    exit(0);

}

(收缩方法从输入中取出\ n)

1 个答案:

答案 0 :(得分:0)

您尚未向input分配任何内存,即尚未初始化。 它保存的地址是随机的,很可能指向一个不可写的内存区域(例如NULL),这就是存在分段错误的原因。