2010-08-16 48 views
0

我分配使用malloc存储和使用后释放,但在每一个第三操作我注意到malloc不分配内存。Malloc不返回记忆,为什么?

谁能告诉我发生了什么......为什么malloc是不工作...我应该怎么办分配内存?

发布的代码是困难的,因为它涉及到很多很多的文件..主要是我认为它的运行内存......所以也许我能确定某种方式我多少内存浪费或使用?

+1

你能发表一些代码吗? – Naveen 2010-08-16 10:14:12

+0

__你分配多少内存?这很重要。 – bobobobo 2010-08-16 11:40:03

+0

您的应用程序是32位还是64位? (来自“visual-C++”标签,我假设你在Windows上运行。) – 2010-08-16 13:04:47

回答

0

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

+0

MALLOC时返回NULL – SPB 2010-08-16 11:19:18

+1

@SPB:这意味着malloc的内存耗尽。 – MSalters 2010-08-16 11:37:41

3

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

如果我理解你的描述正确,你就成功地运行相同的工作量的两倍,但你尝试了第三次,你出的内存。

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

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

  2. fragmenting memory。随着应用程序开始使用可用32位地址空间的重要部分,碎片开始成为一个真正的问题。不幸的是,不是一个真正的切割和干燥的解决了这个问题,但是看看这些所谓的问题的详细资料:

    How to avoid heap fragmentation?

    How to solve Memory Fragmentation

    Memory management in memory intensive application

+0

对于这个非常含糊的问题,这是一个很好的答案 – bobobobo 2010-08-17 13:24:57

+0

有没有办法让malloc根本不会返回并崩溃? – Bionix1441 2017-02-02 14:48:29