gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 10:00:10 25 4
gpt4 key购买 nike

所以我的这段代码有以下 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com