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

标签 c windows memory-management

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

相关文章:

c++ - 在每个可能的地方使用指针是一种好习惯吗?

c++ - 代码中变量旁边的 % 是什么意思?

windows - 批量字符串连接

c++ - 在 C++ 中,对象是如何存储在内存中的?

linux - 共享内存 : How does shmget()/shared memory work?

iphone - NSXMLParser 解析方法内存泄漏

c - VC++ 2010 中的内联汇编错误

windows - Windows 7 shell 中未完全显示可执行版本

.net - 以高(亚秒)精度配置 Windows 时间

无法理解这个错误