したがって、私のこのコードには次のrealloc
ブロックがありました。
char **ptr = NULL;
void realloc_ptr(unsigned int new_size)
{
void *temp = NULL;
temp = realloc(ptr, new_size * sizeof(*ptr));
if(temp != NULL) {
ptr = temp;
}
else {
exit(EXIT_FAILURE);
}
}
new_size
この関数が呼び出される直前にインクリメントされます。この配列は常に展開されるだけです。また、new_size
私のコードでは 3 を超えることはありません (今のところ)。
上記のrealloc
呼び出しは、Windows 7 でのテスト中に正常に機能しました。このコードを XP でテストしたところ、上記のコードは 3 回成功し、4 回目に例外がスローされました。コードに戻ったら、正確な例外を投稿します (このコンピューターにはコードがありません)。
メモリが断片化しすぎて、システムが連続したメモリ ブロックを割り当てることができなかったと推測しています。コードのメモリ リークをテストし、すべて修正しました (願わくば)。なぜこれが起こっているのですか?
編集:
Doug Lea のmalloc.cを使用すると、上記の問題はなくなりました。しかし、なぜこれが起こったのかを知りたいです。
ありがとう!