CppCheck 未检测到内存泄漏
Posted
技术标签:
【中文标题】CppCheck 未检测到内存泄漏【英文标题】:CppCheck does not detect memory leak 【发布时间】:2015-07-14 07:30:51 【问题描述】:有以下代码,但 CppCheck(1.68) 只检测到“样式”错误。
AbstractTelegram *TelegramFactory::CreateGetWigWagParameterTelegram(BYTE Address_i, BYTE SubAddress_i, BYTE Tag_i)
SignDataWigWag *pWigWag = new SignDataWigWag();
return new SendTelegram(SubAddress_i, Tag_i, Telegram::GET_WIG_WAG,NULL,0);
输出:
Variable 'pWigWag' is assigned a value that is never used.
Variable 'pWigWag' is assigned a value that is never used.
任何调整选项?
【问题讨论】:
【参考方案1】:我是一名 Cppcheck 开发人员。
其实..我们看不出那段代码肯定有内存泄漏。
有些类具有自动内存管理功能。
例如,想象一下 SignDataWigWag 构造函数有这样的代码:
SignDataWigWag::SignDataWigWag()
instances.push_back(this);
然后可以稍后使用例如删除它:
void deleteAllInstances()
while (!instances.empty())
delete instances.back();
instances.pop_back();
这并不罕见。一些流行的类库有很多具有某种内存管理的类,因此不需要手动删除..
【讨论】:
曾经有一个选项可以调整这个。但据我所知,您目前无法对此进行调整。也许有一天会有更好的调整选项。【参考方案2】:cppcheck 本质上只是一个样式检查器(和其他包含开发人员“良好样式”概念的工具一样,它的实用性取决于各种因素)。
有合适的检测内存泄漏的工具(如valgrind); cppcheck 不是其中之一。当然,您会发现对于哪些是最好的工具,甚至对于工具适合什么,例如博客条目*Valgrind is NOT a leak checker *
,您会发现不同的意见【讨论】:
什么?你了解静态代码分析和运行时检查的区别吗? 你了解建设性批评和建设性批评之间的区别吗? 我知道,但是,您在回复之前阅读问题似乎有问题。 我熟悉可用的工具,而您在任何方面都没有提供任何证据。 那么,你还在比较 valgrind 和 cppcheck,对吧?以上是关于CppCheck 未检测到内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章