【发布时间】:2013-02-01 21:28:23
【问题描述】:
所以我的这段代码有以下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 时,上述问题就消失了。但我还是想知道为什么会这样。
谢谢!
【问题讨论】:
-
顺便问一下,在您执行此操作时,
new_size是什么,以及每个配置中的内存模式(64 位与 32 位)。 -
有 64 位 XP 吗?
-
new_size总是大于当前大小。我一直在扩展这个数组。还有你所说的记忆模式到底是什么意思? -
请为我们提供一个最小的、可编译的测试用例。 Minimal 意味着“只使用足够的代码来重现问题,而不会混淆不相关的代码”,而可编译的意思是“使用足够的代码在我们的系统上编译而不填空或修复错误”。
-
@AnishRam 该测试用例不可编译。你的主要功能在哪里?
标签: c windows memory-management