Malloc没有返回内存,为什么?

时间:2010-08-16 10:05:28

标签: visual-c++

我使用malloc分配内存并在使用后释放它,但在每第三次操作中我注意到malloc没有分配内存。

任何人都可以告诉我发生了什么......为什么malloc无法正常工作......我应该怎样做才能分配内存?

发布代码很困难,因为它涉及大量的文件...大多数情况下我认为它的内存不足......所以也许我可以确定我浪费或使用了多少内存?

2 个答案:

答案 0 :(得分:3)

正如其他人所说,malloc()正在返回NULL因为您的应用程序内存不足(或更确切地说,虚拟地址空间)。

如果我理解你的描述正确,那么你成功地运行了两次相同的工作量,但是第三次​​尝试时,你的内存不足。

这里基本上可以发生两件事:

  1. 你是leaking memory。 (我看到你说你正在释放你使用的内存,但是意外泄漏内存非常容易。)你可以找到有关Visual C ++内置泄漏检测功能的信息here

  2. 你是fragmenting memory。随着应用程序开始使用可用的32位地址空间的大部分,碎片已经开始成为一个真正的问题。不幸的是,这个问题并没有真正的解决方案,但请查看这些SO问题以获取更多信息:

    How to avoid heap fragmentation?

    How to solve Memory Fragmentation

    Memory management in memory intensive application

答案 1 :(得分:0)

为什么你认为“malloc没有分配内存”?它是返回NULL,还是你正在查看一些系统内存统计信息。如果是后者,那可能是因为你的C库实现保留了以前分配的内存,而不是直接将它返回给系统。