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);
我想从文件加载字符到二维数组。但我不知道单独行的长度(数组中每 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);