c – realloc()在Windows 7中成功,但在Windows XP中失败,为什么?

所以我的代码有以下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 7testing期间工作正常。当我在XP中testing这个代码时,上面的代码会成功3次,然后它会在第四次抛出一个exception。 当我回到代码(这台计算机没有代码)时,我会发布确切的exception。

我猜测我的内存太碎,系统无法分配连续的内存块。 我testing了我的内存泄漏代码,并修复了所有这些(我希望)。 任何想法为什么发生这种情况?

编辑:

当我使用Doug Lea的malloc.c时,上述问题就消失了。 但我仍然想知道为什么会发生这种情况。

谢谢!

Solutions Collecting From Web of "c – realloc()在Windows 7中成功,但在Windows XP中失败,为什么?"

我最好的猜测是new_size太大而无法在连续的虚拟内存中使用。 您永远无法确定在32位系统上有大量连续的虚拟内存可用。

你通常应该尝试使用多个较小的块,如果可能的话,甚至不能同时分配所有的块,但在前一个被释放之后分配下一个块。

当我在XP中测试这个代码时,上面的代码会成功3次,然后第四次会抛出一个异常。 当我回到代码(这台计算机没有代码)时,我会发布确切的异常。

这个(例外)意味着你要么有无效的指针(或索引)的地方(也许,未初始化)和/或内存损坏。 realloc()必须静默失败,如果请求不能满足,则返回NULL。

在不同的操作系统上有不同的行为是完全正常的。