我有大约10,000行的代码。我必须维护一个新的和删除语句的轨道来检查和避免内存泄漏。我可以使用新的库或函数,但我无法更改代码。我该怎么做?请不要建议使用任何内存检查工具。
任何帮助都将不胜感激。
答案 0 :(得分:3)
我可以使用新的库或函数,但我无法更改代码。
链接到堆实现,该实现实现全局的new和delete运算符,并跟踪每个调用的次数。
HI ChrisW,谢谢你的回复。我实施了你的建议方式。它工作但我也想知道,在哪个文件和哪一行使用这些语句?在此先感谢
有两种方法可以做到。
全局new运算符在调用时需要查看(也许解码)调用堆栈,以查看/记住每次调用它时调用它的位置。
答案 1 :(得分:2)
在Unix平台上,您可以使用LD_PRELOAD
变量替换(在运行时)库,这样就有机会引入您自己的new
和delete
运算符。
这样,您可以使用将检查分配和解除分配的实现,并且您可以(例如)为每个错误打印callstack。
答案 2 :(得分:0)
在linux上不确定其他操作系统,您可以使用一种名为:interposing。
的技术答案 3 :(得分:0)
您可以覆盖默认的C ++内存分配器,但是您需要将调用更改为新的。另一个替代方法是覆盖低级函数调用,例如malloc,这实际上就是内存调试库所做的事情(如果这是你的功课,你可能需要做到这一点)。另一种方法是以某种方式更改代码,以便在new中分配内存时添加指向某个集合的指针,然后在调用delete时从集合中删除指针(这将更像是一种新手的处理方式) ,但应该工作),然后检查现有的应用程序(或其他事件,当你希望你的内存是免费的),你有一组空的指针。