2016-11-25 42 views
0

所以我需要編寫一個需要從某些子進程中填充的2維char數組。我不知道在運行時會返回多少行。C在動態2D字符數組中插入字符串或(char *),分段錯誤

我做了一個程序,對前三個字符串(或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++; 
    } 

} 

我只是無法弄清楚什麼是錯

回答

0

你失去了你的重新分配,並在下一次嘗試使用舊指針output時間的結果。

您可以重新設計是這樣的:

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

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

因此,這意味着我應該像一個臨時的指針,一個重新分配回來?我到底怎麼做? – Cnoffel

+0

好了,現在沒有什麼工作了,對不起,我的錯得到了一個錯字,謝謝你的回答,它的作用像一個魅力 – Cnoffel