我知道这几乎不是一个新问题,但我在其他地方找不到任何可行的方法。我有一个C程序,它在运行时稳定地消耗内存-我使用'free‘命令来跟踪它,我可以看到只要它执行,可用的内存量就会减少,这是不应该发生的。然而,我在程序本身中找不到任何可能导致这种情况的东西。我还用valgrind和dmalloc对其进行了测试,它们中没有一个能够检测到任何内存丢失。
我怎样才能找到漏洞?
发布于 2010-11-19 20:05:15
如果您对内存的使用很确定,那么问题可能不是您的错误定位和释放。
如果你正在使用任何库,你应该仔细检查你是否正确地使用它们。许多函数都有初始化和释放函数,您很容易忘记这些函数,从而导致内存泄漏。
发布于 2010-11-19 20:07:52
内存是否真的泄漏了,或者程序运行的时间越长,消耗的内存就越多?换句话说,程序是否正在构建一个不断增长的大型动态数据结构(链表等)?只要程序有指向内存的指针,这就不是真正的泄漏-但是如果分配永远不会释放,每个新的分配都会从操作系统获得更多的内存。这也解释了为什么你使用的工具没有报告“泄漏”。
当我不得不这样做的时候,我会做一些事情,比如每次我的程序分配并释放内存时,我都会向平面文件中写入一条日志消息。这些消息将包括分配内存的文件名和程序行,以及分配内存时从malloc返回的地址,或者类似地,释放内存和缓冲区地址的文件名和程序行。然后,您可以按地址对结果文件进行排序,那些带有“分配”消息但没有“空闲”消息的地址可能已经泄漏-或者至少在程序终止时没有释放。这可能很耗时,而且自动化工具更好,如果你有它们-但根据你的情况,你可能不得不做这样的事情。
或者,您可能只想使用平底船并使用垃圾收集器。Boehm收集器可能会为你工作--看看http://www.hpl.hp.com/personal/Hans_Boehm/gc/。
分享和享受。
https://stackoverflow.com/questions/4224569
复制相似问题