2017-10-09 121 views
-1

我在嘗試從文件讀取到二維動態數組時遇到段錯誤。我知道這是一個含糊不清的問題,但這是我的第一個C代碼,我一直無法找出問題所在。任何方向將不勝感激。 這些是我的變量:嘗試從文件讀入二維數組時出現段錯誤

int i; 
    int rowsize=0; 
    int colsize=0; 
    int colenter=0; 
    int rowenter=0; 
    int colexit=0; 
    int rowexit=0; 

    char sizestring[20]; 
    char enterstring[20]; 
    char exitstring[20]; 
    int line=0; 
    int j; 
    int k; 
    char**mazearray; 
    FILE*file; 

這是我的分配。

mazearray = (char**) malloc(sizeof(char*)*rowsize); 

    for(i =0; i<rowsize; ++i) 
    { 
      mazearray[i]= (char*)malloc(sizeof(char)*colsize); 
    } 

這就是我試圖從文件中讀取和解析信息。我首先嚐試讀取包含迷宮信息(數組大小,入口,出口等)的3行字符串,然後嘗試用底部的for循環填充2d數組。

file = fopen(argv[1],"r"); 

    if (!file) 
    { 
      printf("The file is not connected/n"); 
    } 
    while (!feof(file)) 
    { 

      while(line<3) 
      { 
        if(line==0) 
        { 

          fgets(sizestring,20,file); 
          sscanf(sizestring,"%d,%d", &colsize, &rowsize); 
          line++; 
        } 
        else if(line ==1) 
        { 
          fgets(enterstring,20,file); 
          sscanf(enterstring,"%d,%d",&colenter, &rowenter); 
          line++; 
        } 
        else if(line ==2) 
        { 
          fgets(exitstring,20,file); 
          sscanf(exitstring, "%d,%d", &colexit, &rowexit); 
          line++; 
        } 
      } 
      for(j=0; j<rowsize; j++) 
      { 
        for(k=0; k<colsize; k++) 
        { 
          fscanf(file,"%c",&mazearray[j][k]); 
        } 
      } 
    } 
    fclose(file); 

再次,任何方向將有所幫助。由於

+2

那麼你什麼時候做分配?在閱讀實際尺寸之前? –

+0

我認爲問題可能在這裏'int rowsize = 0; int colsize = 0;' – roottraveller

+0

您可以在文件中添加錯誤日誌和示例數據嗎? – cse

回答

1

rowSizecolSize均爲零:

mazearray = (char**) malloc(sizeof(char*)*rowsize); 

for(i =0; i<rowsize; ++i) 
{ 
     mazearray[i]= (char*)malloc(sizeof(char)*colsize); 
} 

沒有字節將被分配到mazearrayfor循環將不會執行。

我看到你在rowSizecolSizestdin中讀到,但讀過它們之後,你不會在任何時候爲你的數組分配新的大小。

+0

謝謝。我不再有seg故障了。但我仍然無法用底部的for循環讀入。我可以閱讀前三行。 –

相關問題