草庐IT

cppcheck

全部标签

如何设置cpp_cppckeck opitions?

我已经下载了VIM插件cpp_cppcheck但已将其复制到~/.vim/ftplugin/c_cppcheck.vim它也可以使用C文件。它似乎运行良好,但我现在想激活该选项--enable-all就像一个可以在外壳上的人一样。在Cppcheck帮助窗口中,它说以下内容:g:cpp_cppcheck_optionsThecommandlineoptionsyouwanttopasstoCppcheck.ViewyourCppcheckdocumentationforthepossibleoptions.Notethatyoushouldn'tspecifyatemplatehere!Ifyo

c++ - 为什么 CPP Check 没有显示任何错误?

这个cppcheck--enable=style--inconclusive--check-config--xml--xml-version=2-v-I..-I../mocks-I../gmock-I../gtest-DUNIT_TEST../src结果Checking../src/AppMain.cpp...显然,我做错了什么-但是什么?顺便说一句,我确定代码有问题,但为了确定,我将这两行粘贴到其中chara[10];a[10]=0;并且没有引用越界的报告 最佳答案 如果没有最小的工作示例来重现问题,则很难提供帮助。首先,删除ch

c++ - 我可以在函数头中包含 cppcheck 抑制吗?

我添加了一个内联注释来抑制函数的cppcheckunusedFunction警告,但我想将其包含在函数头中,以便Doxygen可以记录所有未使用的函数(我正在实现一个API,所以我有许多函数不会在我的源代码中使用)。我不希望抑制所有unusedFunction错误,而是基于每个函数。我想做这样的事情:/***APIfunctiondescription**@paramp1functionpointertothe...*@return0ifsuccessful,-1otherwise.*//cppcheck-suppressunusedFunction*/intCreateTask(Ta

c++可能的空指针取消引用

我对一些代码运行了cppcheck以查找可能的运行时错误。并且它报告了以下情况下可能的空指针取消引用:Foo*x=...//definedsomewhere...Foo*y(x);//possiblenullpointerdereference.编辑:更好的例子for(inti=0;i来自cppcheck的错误消息:[C:\file.cpp:3]:(error)Possiblenullpointerdereference:x-otherwiseitisredundanttocheckifxisnullatline4但我不知道这怎么可能。 最佳答案

c++ - "Socket operation on non-socket"错误由于奇怪的语法

我在调用connect时在我的一些网络代码中遇到错误Socketoperationonnon-socket并花了很多时间试图找出导致的原因它。我终于发现是以下代码行导致了问题:if((sockfd=socket(ai->ai_family,ai->ai_socktype,ai->ai_protocol)看到问题了吗?该行应该如下所示:if((sockfd=socket(ai->ai_family,ai->ai_socktype,ai->ai_protocol))我不明白的是为什么第一行不正确的行没有产生警告。换句话说,一般形式不应该:if(foo=bar()编译器看起来很奇怪,尤其是使

c++ - 如何解决分配和释放不匹配的错误?

对于带有deletecname;的行,Cppcheck报告错误“分配和解除分配不匹配:cname”。我看不出使用我的代码版本有什么问题-它看起来可以正常工作。我的代码错了吗?我如何解决它?使用我的代码会有什么后果?if(lenght!=0){char*cname=newchar[lenght+1];inbin.read(reinterpret_cast(cname),lenght);cname[lenght]='\0';*ptr_string=cname;deletecname;} 最佳答案 是的,当您使用new…[…]语法分配数组

c++ - 在包含 float 的结构上使用 memset()

在一个C/C++混合项目中,我发现了一些我可以简化为的代码#includestructStructContainingDouble{doubled;///otherelementsomitted};voidclear(StructContainingDouble*p){memset(p,0,sizeof*p);}不停止Cppcheck以引发可移植性警告Usingmemset()onstructwhichcontainsafloatingpointnumber.消息是正确的,但是由于float被声明为double,所以它似乎是误报,因为在double中,(正)零值是按照IEEE754标准

c++ - 为什么我不能在 'std::deque' 上使用 operator< ?

在我的代码库上运行cppcheck并收到以下错误:Dangerousiteratorcomparisonusingoperator但是双端队列的迭代器是随机访问迭代器,随机访问迭代器支持不等式运算符。那么是什么给了?例子:#includeintmain(){std::dequed;std::deque::iteratordi1=d.begin();std::deque::iteratordi2=d.end();if(di1编辑:此错误已通过cppcheckticket#5926提交并修复. 最佳答案 这是cppcheck中的一个错误

c++ - 为什么 CppCheck 会为此静态常量数组给出数组访问越界错误?

CppCheck1.67在我的一个项目中发现了数组访问越界错误。我不认为代码有错,所以我将代码精简到仍然会引发相同错误的最低限度示例。为什么CppCheck对第一个C++示例(在命名空间内)给出以下错误,但对第二个示例(没有命名空间)却没有给出以下错误?我是不是在数组初始化时对命名空间做错了什么,或者这是CppCheck中的错误?报告错误:“数组'testArray[5]'在索引5处访问,超出范围。”namespaceTestNamespace{classTestClass{staticconstinttestArray[5];};constintTestClass::testArra

c++ - 什么是 CppCheck 的 Windows 等价物?

我有一个极端的问题。我从事一款游戏大约两年(20000多行代码),最近我注意到大量内存泄漏。问题是我无法跟踪每一个,因为我的游戏太大了......我四处搜索并注意到CppCheck对我的情况很有用,但问题是因为我使用的是Windows,所以我不能使用CppCheck(仅适用于Linux)。我想知道是否有一个库或插件是CppCheck的Windows等价物,或者可能有一种在Windows上使用CppCheck的方法。我想到的所有可能性,以及对其他问题的解决方案(例如对std::deque等使用智能指针)暗示我的程序很小或更合适:重写我的整个程序,我-真的-不想做的事情...IDE:代码块