2013-11-28 227 views
1

我想創建動態字符串數組作爲讀取文件的緩衝區。重點在於數組必須以給定的大小聲明,但是如果文件包含的行數多於緩衝區大小,它必須調整大小。緩衝區我創建看起來是這樣的:Realloc C字符串數組堆損壞

#define N 32 

char **array = (char**) malloc((N+1)*sizeof(char*)); 

當談到重新分配我試着這樣說:

array = (char**) realloc(array, (2*N+1)*sizeof(char*)); 

但不幸的是它會導致堆損壞。我應該如何正確地做到這一點?

+0

問題可能出現在您使用char **而不是char *的事實中;如果你爲二維數組動態分配內存,那麼你做錯了。 – Pandrei

+0

我應該如何爲字符串創建動態數組? –

+0

如果你想要一串字符串,使用char **沒有問題。但是,您的重新分配只能使用一次(因爲大小是硬編碼的),您使用realloc()的方式不能正確處理失敗。也許你自己設置字符串的方式有問題嗎? – Medinoc

回答

0

你需要兩個維度,就像這樣:

char **array = malloc((N+1) * (numEntries) * sizeof(char)); 

注意我使用sizeof(char),不sizeof(char *)

+0

您可能忘記了在malloc之前放置(char **),但您的建議已成功完成。我不記得通過numEntries插入乘法。謝謝。 –

+1

要小心。你應該只分配指針數組,你不能分配兩個維數組,因爲編譯器不知道如何分割「行」,在一些編譯器中,只要你訪問數組[0] [x]一切正常,但是當你嘗試去數組[1] [0]時會遇到問題,其他編譯器也將無法訪問array [0] [0]。 – SHR

+0

我懷疑'char **'是否正確。這應該是char(* array)[N + 1] = ...'asuming'N + 1'是要存儲在這個數組中的字符串的大小。 – alk