所以我的这段代码有以下 realloc
block :
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 时,上述问题就消失了。 。但我还是想知道为什么会这样。
谢谢!
最佳答案
我最好的猜测是 new_size
太大,无法在连续的虚拟内存中使用。您永远无法确定 32 位系统上是否有大量连续虚拟内存可用。
您通常应该尝试使用多个较小的 block ,如果可能的话,甚至不要同时分配它们,而是在前一个 block 被释放后分配下一个 block 。
关于c - realloc() 在 Windows 7 中成功,但在 Windows XP 中失败,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14919548/