有以下代码,但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.
任何调整选项?
答案 0 :(得分:2)
我是Cppcheck开发人员。
实际上......我们无法看到该代码中肯定存在内存泄漏。
有些类具有自动内存管理功能。
想象一下,例如SignDataWigWag构造函数具有以下代码:
SignDataWigWag::SignDataWigWag() {
instances.push_back(this);
}
然后可以使用例如:
删除它void deleteAllInstances() {
while (!instances.empty()) {
delete instances.back();
instances.pop_back();
}
}
这并不罕见。一些流行的类库有很多具有某种内存管理的类,因此不需要手动删除..
答案 1 :(得分:1)
cppcheck本质上只是一种样式检查器(和其他工具一样,它包含了开发人员的概念"良好的风格",它的用处取决于各种因素)。
有适合检测内存泄漏的工具(例如valgrind); cppcheck不是其中之一。当然,您会发现不同的意见,哪些是最佳工具,甚至是适合的工具,例如博客条目* Valgrind is NOT a leak checker *