2016-11-25 22 views
0

したがって、2次元のchar配列をプログラムして、いくつかの子プロセスから塗りつぶす必要があります。実行時に返される行数はわかりません。Cダイナミックな2D char配列に文字列または(char *)を挿入します。セグメンテーションフォールト

最初の3つの文字列(またはchar*)が挿入されていてもうまく動作するプログラムを作成しましたが、その後はセグメント化エラーが発生します。配列には値/文字列を保持する必要があります。

グローバル行数:

static int rows = 1; 

アレイの初期化:

char **output = (char **)malloc(sizeof(char*) * 1); 
output[0] = (char *)malloc(sizeof(char) * 1023); 
output[0][0] = '#'; 

を追加:ここでは、コードです

char foo[1023]; 
insertArray(output, "bbb"); 
insertArray(output, foo); 
insertArray(output, "bbb"); 
insertArray(output, "bbb"); 

それは実際には正常に動作します最初の3回は

機能:

static void insertArray(char **c, char *itemToInsert) { 

    if (c[0][0] == '#') { 
     strncpy(c[0], itemToInsert, 1023); 
    } 
    else { 

     c = (char **)realloc(c, (rows + 1) * sizeof(char*)); 
     for (int i = 0; i < rows+1; i++) { 
      c[i] = realloc(c[i],sizeof(char) * 1024); 
     } 
     strcpy(c[rows], itemToInsert); 
     rows++; 
    } 

} 

私はちょうどあなたがあなたの再割り当て、あなたがoutputに古いポインタを使用しようとする次回の結果を失っいただきました間違った

答えて

0

を把握することはできません。

あなたは次のように再設計することができます。だから、私はそれをバック再割り当て、一時的なポインタのようなものを作るべきであることを意味

output = insertArray(output, ...); 
output = insertArray(output, ...); 
output = insertArray(output, ...); 
... 

static char **insertArray(char **c, char const *itemToInsert) 
{ 
    ... 
    return c; 
} 
+0

?どのように私はそれを正確に行うのですか? – Cnoffel

+0

今、もう何も動作しません、申し訳ありません、私の誤りはTypoを得ました、答えのおかげで、それは魅力のように動作します – Cnoffel

関連する問題