[英]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.