我希望静态分析器在下面的代码中警告我关于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;
}
答案 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代码发出警告也很棒。
如果您有兴趣,请随时帮助我们。