【发布时间】:2012-12-27 20:51:36
【问题描述】:
我有一个极端的问题。
我已经在游戏上工作了大约两年(20000+ 行代码),最近我注意到大量的内存泄漏。问题是我无法追踪每一个,因为我的游戏太大了......
我四处搜索并注意到 CppCheck 在我的情况下会很有用,但问题是由于我使用的是 windows,所以我不能使用 CppCheck(仅适用于 linux)。
我想知道是否有一个库或插件与 CppCheck 的 windows 等效,或者是否有一种在 windows 上使用 CppCheck 的方法。
我提出的所有可能性,以及其他问题的解决方案(例如对 std::deque 使用智能指针等)意味着我的程序很小或更合适:重写我的整个程序,我 - 真的 - 不想做的事情......
IDE:代码块 10.05
编译器:MinGW 3.81 GCC 4.4.1
【问题讨论】:
-
这就是为什么你从智能指针开始,而不是从原始指针开始,在你的程序有 20000 行代码之后发现你需要智能指针。
-
@Molma:任何像这样的工具的问题在于它不是很精确——它可能能够捕获 一些 内存泄漏,但它不太可能能够捕捉到所有。我建议的是另一种方法:开始注释代码拥有内存中的哪些指针,哪些只是引用它。如果有任何循环引用,请特别注意。然后,一一开始使用
shared_ptr,并使用release转换为(拥有)指针,以保持程序可编译。不断重复,直到消除泄漏或不再有原始指针。 -
@SethCarnegie 当我第一次开始从事这个项目时,我对智能指针或内存泄漏一无所知。直到最近我才注意到我的程序存在大量泄漏(最近我一直致力于提高速度)。因为我是自学成才的,所以我把这个疯狂的错误归咎于自己......
-
@Molma 您需要做的是查找每个
new并在您的源中找到deleted 的位置和时间。如果这确实是您的第一个项目,那么随着知识的增长,不期望重写大部分内容是不合理的。
标签: c++ memory-leaks cppcheck