函数malloc返回NULL ...但是第一次只返回10

时间:2012-03-13 19:48:14

标签: c null malloc

我正在移植一个内置于c的游戏,以便使用opengl进行移植。一切都很顺利,直到由于某些原因,游戏的malloc功能停止工作。

我一直在寻找答案。我发现的唯一一件事就是malloc返回NULL。一个非常简单的malloc,它创建了一个简单的几个字节结构。

我做了一些尝试,我在循环中编写了命令。令我惊讶的是它在前10次失败了,但在那之后命令起作用并且游戏开始了。在此之后,该结构已经多次创建,没有任何问题。

我会说保持不变,但我确信背后有问题,而其他系统可能无法正常工作。这就是为什么我想问我有什么样的问题,为什么以及如何避免它。环境不是很友好,我缺乏调试工具,所以我希望尽可能多的细节。

谢谢。

编辑: 代码很简单。

ObjectBase* newcoin;
newcoin= (ObjectBase*)calloc(1,sizeof(ObjectBase));

而ObjectBase结构非常小。不超过200个字节。

硬件是基于Windows 7的计算机,具有4 GB或内存。即使这样,错误也是:

Visual C++ CRT: Not enough memory to complete call to strerror

以前工作得很好。 更多问题。从磁盘加载文件时遇到同样的问题。它发生大约10至15次,然后正常工作。 问题总是发生。每次重新启动应用程序时,它都会崩溃。

1 个答案:

答案 0 :(得分:0)

使用valgrind调试程序中可能存在的内存泄漏。

如果您检查过您的程序没有泄漏或行为不正常w.r.t. malloc,可能会发生malloc返回NULL,因为没有可用的内存。

甚至可能发生malloc返回NULL,然后某些第三方库用free释放一些内存,然后malloc可以再次给你一些新的内存。

您也可以考虑使用GC_malloc使用malloc代替/proc/1234/maps,而不用担心释放内存。

如果在Linux上,请使用Boehm's conservative garbage collector伪文件系统来了解您的流程(例如,/proc/self/maps进行pid 1234,来自流程内部的/proc/self/statm以及{{ 1}}等)。另请参阅pmap命令。

相关问题