对于作业,我必须做的部分事情涉及使用malloc
and realloc
。我首先创建一个二维字符数组,维度是行数和字符数。然后我使用malloc
分配足够的内存来存储来自某个文件的输入。使用fgets
我一次读取一行,并将其存储在数组中。这部分工作正常(或者我认为)。当我尝试为更多行重新分配内存时,问题就出现了。程序流程应该是这样的:
创建一个 50 行的字符数组,每行 80 个字符(工作)
用于fgets
一次读取一行并将其保存到数组中(工作)
读取 50 行后,重新分配数组以允许 100 行(不起作用)
根据需要继续重新分配(不工作)
这是我到目前为止所拥有的(至少它的核心,我省略了不相关的代码):
#define NUMBER_OF_LINES 50
#define CHARACTERS_PER_LINE 80
FILE *inputFile = fopen("some.text", "r");
char **lines;
lines = malloc(NUMBER_OF_LINES * sizeof(*lines));
int i;
for (i = 0; i < NUMBER_OF_LINES; i++)
*(lines+i) = malloc(CHARACTERS_PER_LINE * sizeof(char));
int linesRemaining = NUMBER_OF_LINES;
int reallocCount = 1;
i = 0;
while (!feof(inputFile)) {
if (!linesRemaining) {
reallocCount++;
lines = realloc(lines, (NUM_OF_LINES * reallocCount) * sizeof(*lines));
linesRemaining = NUM_OF_LINES;
}
fgets(*(lines+i), CHARS_PER_LINE, inputFile);
i++;
linesRemaining--;
}
我的直觉告诉我问题出在realloc
.,所以我将解释我认为它在做什么。
realloc(lines, (NUM_OF_LINES * reallocCount) * sizeof(*lines));
第一个参数lines
是我想重新分配一定数量内存的指针。NUM_OF_LINES
是我想增加大小的数量。我将它乘以reallocLinesCount
,这是一个计数器,用于跟踪我应该拥有多少组 50 行。该sizeof(*lines)
部分是指向 a 的指针的大小char
。
感谢您的阅读,非常感谢您的帮助:)
编辑:谢谢大家的回复;我现在没有时间阅读所有答案,但是一旦这个迫在眉睫的截止日期过去,您的所有答案都会得到更彻底的阅读和理解:D