我想從文件加載字符到二維數組。但我不知道單獨行的長度(陣列中每行1行(1行))。所以我分配了1 * char *數組,然後計算1行中的字符並分配它們。然後我想realloc
(2 * char *)數組,因此它可以處理2行。在第二回閤中,它總是崩潰(行patterns=realloc(patterns, sizeof(*patterns)*patternCounter);
)。我知道代碼不完美(我不控制錯誤等),但我認爲這不會有幫助。現在它也不起作用。C realloc二維字符數組
注:的函數的第一個參數尚未
輸入文件(每行1個字,端線「\ n」,所以最後一行是空的)
woman
man
meat
animal
anim
我的代碼中使用
void failure(state *automaton, FILE *fpattern){
int patternCounter=0, charCounter=0, i;
char c;
char **patterns=NULL;
rewind(fpattern);
while((c=fgetc(fpattern))!=EOF){
charCounter++;
if(c=='\n') {
patternCounter++;
patterns=realloc(patterns, sizeof(*patterns)*patternCounter);
fseek(fpattern, -charCounter, SEEK_CUR);
for (i = 0; i < charCounter; i++) {
patterns[i]=malloc(1);
}
for (i = 0; i < charCounter-1; i++) {
patterns[patternCounter-1][i]=(char)fgetc(fpattern);
}
patterns[patternCounter-1][i]='\0';
fgetc(fpattern);
charCounter=0;
printf("%s\n", patterns[patternCounter-1]);
}
}
for (i = 0; i < patternCounter; i++) {
printf("%s\n", patterns[i]);
}
}
我不明白什麼是錯的。調試沒有幫助。
線'圖案[patternCounter-1] [I] =(char)的龜etc(fpattern);'應引起,因爲只有1個字節的緩衝區溢出被分配給'patterns [patternCounter-1]'。另外,拋出以前讀取的數據是非常糟糕的主意。 – MikeCAT
Fmmm,實際上'patterns [patternCounter-1]'可能是未初始化的。 – MikeCAT
你的單詞有最大長度嗎?它會讓你更容易,因爲按字節分配數組並不是那麼好... – Holt