CppCheck没有检测到内存泄漏

时间:2015-07-14 07:30:51

标签: c++ memory-management memory-leaks cppcheck

有以下代码,但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.

任何调整选项?

2 个答案:

答案 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 *