检查c ++中的内存泄漏

时间:2010-08-30 11:13:54

标签: c++ memory-leaks

我有大约10,000行的代码。我必须维护一个新的和删除语句的轨道来检查和避免内存泄漏。我可以使用新的库或函数,但我无法更改代码。我该怎么做?请不要建议使用任何内存检查工具。

任何帮助都将不胜感激。

4 个答案:

答案 0 :(得分:3)

  

我可以使用新的库或函数,但我无法更改代码。

链接到堆实现,该实现实现全局的new和delete运算符,并跟踪每个调用的次数。

  

HI ChrisW,谢谢你的回复。我实施了你的建议方式。它工作但我也想知道,在哪个文件和哪一行使用这些语句?在此先感谢

有两种方法可以做到。

  1. 全局new运算符在调用时需要查看(也许解码)调用堆栈,以查看/记住每次调用它时调用它的位置。

  2. 查看Overriding “new” and Logging data about the caller

  3. 的答案

答案 1 :(得分:2)

在Unix平台上,您可以使用LD_PRELOAD变量替换(在运行时)库,这样就有机会引入您自己的newdelete运算符。

这样,您可以使用将检查分配和解除分配的实现,并且您可以(例如)为每个错误打印callstack。

答案 2 :(得分:0)

在linux上不确定其他操作系统,您可以使用一种名为:interposing。

的技术

答案 3 :(得分:0)

您可以覆盖默认的C ++内存分配器,但是您需要将调用更改为新的。另一个替代方法是覆盖低级函数调用,例如malloc,这实际上就是内存调试库所做的事情(如果这是你的功课,你可能需要做到这一点)。另一种方法是以某种方式更改代码,以便在new中分配内存时添加指向某个集合的指针,然后在调用delete时从集合中删除指针(这将更像是一种新手的处理方式) ,但应该工作),然后检查现有的应用程序(或其他事件,当你希望你的内存是免费的),你有一组空的指针。