割り当てのために、私がしなければならないことの一部には、malloc
との使用が含まれますrealloc
。最初に char の 2D 配列を作成します。次元は行数と文字数です。次にmalloc
、いくつかのファイルからの入力を格納するのに十分なメモリを割り当てるために使用します。を使用fgets
して、一度に 1 行ずつ読み取り、配列に格納します。この部分はうまく機能します(またはそう思います)。必要に応じてより多くの行にメモリを再割り当てしようとすると、問題が発生します。プログラム フローは次のようになっているはずです。
1 行あたり 80 文字で、50 行の文字配列を作成します (機能)
fgets
一度に 1 行ずつ読み取り、配列に保存するために使用します (作業中)。
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)
ポインターのサイズですchar
。
読んでいただきありがとうございます。どんな助けでも大歓迎です:)
編集: 返信ありがとうございます。今すぐすべての回答を読む時間はありませんが、この差し迫った締め切りが過ぎれば、すべての回答をより完全に読んで理解することができます :D