PC-Lint,std :: map和错误613(可能使用null ptr)

时间:2017-08-09 13:35:38

标签: c++ nullptr pc-lint

我尝试使用带有选项+ fnr的PC-Lint。它使得lint怀疑函数的所有类似指针的返回都可能是nullptr。

但对于某些功能,我知道他们在任何情况下都不会返回nullptr。要告诉PC-Lint它可以忽略nullptr检查它们,我可以使用

-sem(func, @p != 0)

但还有另一个问题:当标准容器返回迭代器时,PC-Lint无法正确检查情况。

// using +fnr in .lnt file
//lint -sem(f1, @p != 0)
//lint -sem(std::map::find, @p != 0)
#include<map>

int* f1();

int main()
{
    int* p1 = f1();
    *p1 = 2;            // -sem worked

    std::map<int, int> m;
    std::map<int, int>::iterator it = m.find(1);
    if (it != m.end())
        it->second = 12;// even -sem doesn't work
}

生成

C:\lint_test\f3.cpp(18): Issue 613: (Warning -- Possible use of null pointer 'unknown-name' in left argument to operator '->' [Reference: file C:\lint_test\f3.cpp: line 18])

如果PC-Lint不够智能,看不到我在使用前检查迭代器,我想至少关闭std :: map :: find的检查。但是我不能 - 但是没有工作

有谁知道如何解决这个问题?

0 个答案:

没有答案