如何在cppcheck或clang中检查类型安全性?

时间:2015-09-26 04:43:34

标签: c++ clang type-safety cppcheck

我希望静态分析器在下面的代码中警告我关于invalide rvalue dereference。如何在clang或cppcheck中执行此操作?

#include <memory>

using namespace std;

unique_ptr<int> myfunc(void)
{
    unique_ptr<int> a(new int(2));
    return a;
}


int main()
{
    const int& ra = *myfunc();
    return 0;   
}

1 个答案:

答案 0 :(得分:4)

我是Cppcheck开发人员。

Cppcheck有一个std :: string的相关检查器。例如,您会收到此代码的Cppcheck警告:

std::string hello();

unsigned int f() {
    const char *p = hello().c_str();
    return 0;
}

你得到的警告是:

[2.cpp:4]: (error) Dangerous usage of c_str(). The value returned by c_str() is invalid after this call.

报告是因为返回的std :: string对象被立即删除。在初始化之后的任何地方取消引用指针p是UB。

我认为对你的unique_ptr代码发出警告也很棒。

如果您有兴趣,请随时帮助我们。