结构阵列分段故障

时间:2013-10-20 18:02:24

标签: c arrays struct

我继续遇到读取结构数组值的问题,我不断遇到分段错误。这是代码:

int main() 
{
    /* Get PATH Environment Variable */
    char *pathv[MAX_PATHS];
    char cmd_line[MAX_ARGS];
    struct command_t cmd[3];         //THIS IS THE STRUCT ARRAY
    size_t len = 0;

    /* Parse The Path */
    ParsePath(pathv);

    while(1) {

        /* Print Continuous Prompt */
        PrintPrompt();

        /* Read Command Line & Parse It */
        ReadCommand(cmd_line);

        ParseCommand(cmd_line, cmd);    //PASSING IT TO THIS METHOD
    }

    return 0;
}



int ParseCommand(char *buffer, struct command_t *cmd)
{
    char *name = "Test";
    cmd[0].name;  //IF THIS IS COMMENTED OUT AND THE OTHER LINE AS WELL, PROGRAM RUNS
    printf("%s\n", cmd[0].name); //FINE....THESE TWO LINES CAUSE SEG. FAULT
}

struct command_t {
    char *name;
    int argc;
    char *argv[MAX_ARGS];
};

struct command_t { char *name; int argc; char *argv[MAX_ARGS]; };

我做错了什么?非常感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

您永远不会初始化cmd也不会写任何数据。访问的未初始化数据是C中未定义的行为,因此它是有效的崩溃。在阅读之前,您需要在cmd[0].name中写一些内容。

答案 1 :(得分:1)

在C中,当您声明变量而不为其赋值时并不意味着它是空的。它可能指向以前运行的内存中的内存垃圾。

printf() cmd[0].name未尝试初始化memset(cmd, sizeof(*cmd) * 3); 的尝试可能是灾难性的。

您应该在尝试访问其值之前初始化结构中的每个变量,或者至少对所有内容进行零填充以使其安全可读:

{{1}}