所以我的这段代码有以下内容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 次时抛出异常。当我回到代码时,我会发布确切的异常(这台计算机没有代码)。
我猜测我的内存碎片太多,系统无法分配连续的内存块。我已经测试了我的代码是否存在内存泄漏并修复了所有问题(我希望如此)。有什么想法为什么会发生这种情况吗?
EDIT:
当我使用 Doug Lea 的时候,上述问题就消失了malloc.c http://gee.cs.oswego.edu/pub/misc/malloc.c。但我还是想知道为什么会这样。
Thanks!
我最好的猜测是new_size
太大而无法在连续的虚拟内存中使用。您永远无法确定 32 位系统上是否有大量连续虚拟内存可用。
通常,您应该尝试使用多个较小的块,如果可能的话,甚至不要同时分配所有块,而是在释放前一个块后分配下一个块。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)