fork变量随机改变

时间:2014-06-06 11:29:47

标签: memory fork

我想使用execvp通过我的程序运行命令。提示用户输入命令(退出eof)。

一旦程序有一个命令,它就会让子进程在父进程等待子进程完成时处理命令。

我正在将输入标记为一个char *数组,该数组由变量'i'跟踪。

'i'除了while循环的每次迭代都会不断更改其值。

示例输入:/ bin / ls -l <​​/ p>

    #include <stdio.h>
    #include <sys/types.h>
    #include <sys/wait.h>
    #include <unistd.h>
    #include <string.h>

    #define BUFFER 1024

    int main(){
            pid_t p;
            char* paramList[] = {};
            char input[BUFFER];
            int i = 0;
            char* segments;
            printf(">");
            while(fgets(input, BUFFER, stdin) != NULL){
                if((p = fork()) == 0){
                        printf("Executing: %s\n", input);
                        i = 0;
                        segments = strtok(input, " ");
                        paramList[i] = segments;
                        printf("%s%d\n", paramList[i], i);
                        i++;
                        while(segments != NULL){
                                segments = strtok(NULL, " ");
                                paramList[i] = segments;
                                printf("%s%d\n", segments,  i);
                                i++;
                        }
                        paramList[i] = NULL;
                        execvp(paramList[0], paramList);
                }else{
                        printf(">");
                        waitpid(p, NULL, 0);
                }
        }
        return 0;
}

1 个答案:

答案 0 :(得分:2)

您并未声明paramList的尺寸,但是您要为其提供一个空的初始化列表;因此paramList没有元素。然后你将超过零的元素写入其中,溢出到其他局部变量(如i)。