2013-08-23 103 views
0

很容易看到在這裏試圖完成什麼。讀取文件列表並將其傳遞給另一個函數。 這是行不通的。 當我嘗試將文件名存儲在本地char **中時,它工作得很好,但無法通過指針將其發回。出現分段錯誤。無法通過char ***作爲參數

int main(){ 
    char** fileList; 
    int noOfFiles; 
    char* path = "."; 
    makeList(&fileList, &noOfFiles, path); 
    return 0; 
} 

void makeList(char ***fileList, int* noOfFiles, char* path){ 
    struct dirent **fileListTemp; 
    *noOfFiles = scandir(path, &fileListTemp, NULL, alphasort); 
    int i; 
    fileList = malloc(sizeof(char***)); 
    *fileList = malloc(sizeof(char**)); 
    printf("total: %d files",*noOfFiles); 
    for(i = 0; i < *noOfFiles; i++){ 
     printf("%s\n",fileListTemp[i] -> d_name); //works just fine 
    } 

    *fileList = malloc(*noOfFiles * sizeof(char*)); 
    for(i=0; i < *noOfFiles; i++){ 
     //*fileList[i] = fileListTemp[i] -> d_name; this didn't work either... 
     strcpy(*fileList[i], fileListTemp[i]->d_name); 
     printf("%s\n", *fileList[i]); 
    } 
    //fileList = &list; 
    return; 
} 

分段錯誤總是... 並沒有從主()

+1

刪除參數'int aFlag'或將其添加到調用中。指針'&fileList'在函數調用後不存在,因此分配給它並不是一個好主意。 – dastrobu

+0

指定它不是一個好主意?將fileList存儲在本地char **中,並將它的指針返回到main working。但我不明白爲什麼...... – kBisla

回答

0

這裏印刷的fileList的希望您覆蓋指針你char** fileList,這可能是一個問題:

fileList = malloc(sizeof(char***)); 

在這裏,您覆蓋先前分配的指針,這看起來像是另一個問題:

*fileList = malloc(*noOfFiles * sizeof(char*));