2017-10-09 23 views
-1

ファイルから2Dダイナミックアレイへの読み込み中にセグメンテーションフォルトが発生しました。私はこれが少し漠然とした質問であることを知っていますが、これが私の最初のCコードであり、私は問題の原因を突き止めることができませんでした。どんな方向にも感謝します。 これらは私の変数です:ファイルから2D配列を読み込もうとしているときにセグメンテーションエラーが発生しました

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行の文字列(Array size、enterance、exitなど)を読み込み、次に2d配列にforループを書き込んでみます。

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

ませバイトがmazearrayに割り当てられません。 forループは何度も実行されません。

rowSizecolSizestdinから読みましたが、それらを読み込んだ場合、新しいサイズの任意のポイントに配列を割り当てないでください。

+0

ありがとうございます。私はもうseg障害がありません。しかし、私はまだforループを底に読み込むことはできません。私は最初の3行を読むことができます。 –

関連する問題