2014-10-02 54 views
-2

我正在寫一個函數,以便從我的字典文件中動態分配一個字符串數組,該數組將通過命令行參數進行訪問。我不斷收到分段錯誤11和想不通爲什麼動態分配數組時分段錯誤

int 
allocateArray(int count) 
    { 
    int i; 
    char **array; 
    char **argv; 
    char *fileName = argv[1]; 
    FILE *fp = fopen(fileName, "r"); 
    count = countTokens(argv); 
    array = malloc(sizeof(char *) * count); 
    if (array == 0) 
     { 
     fprintf(stderr, "memory allocation failed\n"); 
     exit(1); 
     } 
    for(i = 0; i < count; i++) 
     { 
     array[i] = malloc(count); 
     } 
    for (i = 0; i < count; i ++) 
     { 
     fscanf (fp,"%s", array[i]); 
     } 
    free(array); 
    fclose(fp); 
    return **array; 
    } 
+0

除了快樂的答案,如何處理countTokens argv的? – 2014-10-02 18:22:38

+0

countTokens計數作爲命令行參數傳遞的字典文件中字符串/標記的數量 – charliehorse111 2014-10-02 18:26:14

回答

1

char *fileName = argv[1];,取消引用argv[1]。但是,它並未指向您擁有的內存位置,因爲您在前一行char **argv;上尚未分配任何內存。

您似乎對命令行參數(CLA)有一些誤解。在int main(int argc, char **argv),argv是一個CLA(你似乎已經知道)。但是,當main()調用另一個函數時,CLA不會自動將傳遞給它。

其結果是,在你的int allocateArray(int count)功能,argv你聲明僅僅是另一個局部變量。您需要明確地將argvmain()傳遞到allocateArray()

代碼中的其他指針變量也是如此。我建議您閱讀標準書中的「變量的範圍和生命週期」。 (我不居高臨下的方式意味着這一點。)