简体   繁体   English

C重新分配2D char数组

[英]C realloc 2D char array

I want load char from file to 2D array. 我想将char从文件加载到2D数组。 But I don't know length of separate lines (1 line (1 word) per 1 row in array). 但是我不知道单独行的长度(数组中每1行1​​行(1个字))。 So I allocated 1*char* array and then counted chars in 1 line and allocated them. 所以我分配了1 * char *数组,然后在1行中计算了chars并分配了它们。 Then I wanted to realloc (2*char*) array so it can handle 2 lines. 然后我想realloc (2 *字符*)阵列,以便它可以处理2行。 Here, in second turn, it always crashes (line patterns=realloc(patterns, sizeof(*patterns)*patternCounter); ). 在此,它总是第二次崩溃(行patterns=realloc(patterns, sizeof(*patterns)*patternCounter); )。 I know the code isn't perfect (I don't control error and so on), but I don't think it would help. 我知道代码不是完美的(我不控制错误等等),但我认为这不会有所帮助。 Now it doesn't work either. 现在它也不起作用。

NOTE: first argument of function hasn't been used yet 注意:函数的第一个参数尚未使用

input file (1 word per line, end line '\\n', so last line is empty) 输入文件(每行1个字,最后一行'\\ n',因此最后一行为空)

woman
man
meat
animal
anim

My code 我的密码

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]);
    }
}

I don't understand what is wrong. 我不明白怎么了。 Debugging didn't help. 调试没有帮助。

You are throwing away previously allocated buffer and allocate only 1 element, then trying to save too many characters there, which are very bad things. 您将丢弃先前分配的缓冲区并仅分配1个元素,然后尝试在那里保存太多字符,这是非常糟糕的事情。

Try changing 尝试改变

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

to

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM