2013-10-20 78 views
1

我一直遇到一個讀取結構數組值的問題,我一直在得到一個分段錯誤。下面是代碼:結構數組分段錯誤

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]; 
}; 

我在做什麼錯?非常感謝您的幫助。

+0

你在哪裏分配給'CMD [0 ] .name'? – vroomfondel

+2

您可能還想向我們展示'struct command_t'的定義。 – alk

+0

對不起,我剛剛添加了我的結構代碼。這個結構在一個單獨的頭文件中! –

回答

2

您從不初始化cmd也不寫任何數據。訪問未初始化的數據在C中是未定義的行爲,所以是有效的崩潰。在閱讀之前,您需要寫入cmd[0].name

+0

我是個白癡。我發現問題是什麼......我忘了說=名字...... WOW。對不起大家!謝謝。 –

1

在C中,當你聲明一個變量而不賦值給它時並不意味着它是空的。它可能指向之前運行的內存垃圾。

你試圖printf()cmd[0].name什麼在沒有初始化它可能是災難性的。

你應該嘗試訪問它的值之前,初始化你的結構數據中每個變量,或爲了使其安全地讀取至少填零的一切:

memset(cmd, sizeof(*cmd) * 3);