C realloc 二维字符数组

C realloc 2D char array

我想从文件加载字符到二维数组。但我不知道单独行的长度(数组中每 1 行 1 行(1 个字))。所以我分配了 1*char* 数组,然后计算 1 行中的字符并分配它们。然后我想要 realloc (2*char*) 数组,以便它可以处理 2 行。在这里,在第二轮,它总是崩溃(第 patterns=realloc(patterns, sizeof(*patterns)*patternCounter); 行)。我知道代码并不完美(我不控制错误等等),但我认为这不会有帮助。现在也不行了。

注意:函数的第一个参数尚未使用

输入文件(每行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]='[=11=]';

            fgetc(fpattern);

            charCounter=0;

            printf("%s\n", patterns[patternCounter-1]);
        }
    }

    for (i = 0; i < patternCounter; i++) {
        printf("%s\n", patterns[i]);
    }
}

我不明白哪里出了问题。调试没有帮助。

您正在丢弃先前分配的缓冲区并仅分配 1 个元素,然后试图在那里保存太多字符,这是非常糟糕的事情。

尝试改变

for (i = 0; i < charCounter; i++) {
    patterns[i]=malloc(1);
}

patterns[patternCounter-1]=malloc(charCounter);