在最近的一次错误搜索中,我发现返回指向临时变量成员的指针存在问题。有问题的(简化的)代码是:structS{S(inti):i(i){}inti;int*ptr(){return&i;}};int*fun(inti){returnS(i).ptr();}//temporarySdiesbutpointerlivesonintmain(){int*p=fun(1);return*p;//undefined}如何预防?GCC和Clang有-Waddress-of-temporary和-Wreturn-stack-address但由于ptr()的作用,它们似乎松散了踪迹作为肮脏行为的中间人。
代码:for(x=abc.begin();x!=abc.end();x++){if(-----){----abc.erase(x);}}错误是:::危险的迭代器用法删除后迭代器无效,因此取消引用它或将它与另一个迭代器进行比较是无效的。上面代码中使用erase函数的错误用法是什么? 最佳答案 删除abc对应的值后,itaratorx无效。这应该修复它:x=abc.begin();while(x!=abc.end()){if(-----){----x=abc.erase(x);//skippedonlytonextitem}else{/
我正在尝试将cppcheck插件与visualstudio2017一起使用。但是,当我选择工具/使用cppcheck检查当前项目时,它总是说“对象引用未设置为对象的实例。”有什么建议吗?我正在使用MicrosoftVisualStudioProfessional2017,版本15.7.6CPPCheckPlugin1.3.5CMake3.12.1Windows10专业版64位谢谢。 最佳答案 对我来说,在我编辑项目并选中“EnableCodeAnalysisonBuild”后问题就解决了。然后我可以取消选中此选项,但它离开了fals
我尝试对我的代码运行cppcheck分析,它具有以下文件结构:/code/module_1/src/a.cpp/code/module_1/src/b.cpp/code/module_1/test/c.cpp/code/module_2/src/d.cpp/code/module_2/src/e.cpp/code/module_3/test/f.cpp我想运行一个排除所有测试代码的分析。这可以用像“cppcheck-itest”这样的命令吗?根据thedocs,它对我不起作用,尽管我认为它应该:...Directorynameismatchedtoallpartsofthepath.我
远程环境:ubuntu20.04本地开发环境:windows11 开发IDE:vscode 一、ubuntu20.04安装clang安装llvmapt-getinstallllvm 2.安装clangapt-getinstallclang3.检查是否安装成功(查看clang版本,有显示即为成功)clang-v 二、ubuntu20.04安装cppcheck一、简介 cppcheck是一种C/C++代码缺陷静态检查工具。cppcheck不检查代码中的语法错误,只检查编译器检查不出来的bug,其目的是检查代码中真正的错误。下边是在ubuntu环境下的安装和使用说明。二、安装sudoapt
Cppcheck(version1.46.1)对像这样的枚举发出以下警告:enumDATABASE_TYPE{DATABASE_TYPE_UNKNOWN=-1,//Redundantcode:Foundastatementthatbeginswithnumericconstant我不认为这是多余的。能够做那样的事情非常重要。这是cppcheck的错误还是我没有看到什么?更新我设法将它归结为一个最小的例子。这因为cppcheck有2个(更多)错误而变得复杂,这使得我的减少看起来没有效果。共有5个文件:a.h、a.cpp、b.h、b.cpp和inc。h包含以下内容。VC9在没有警告的情况下
我安装了Cppcheck我的C++项目的静态代码分析工具,感觉它的性能很差。例如,谁能告诉我为什么Cppcheck无法在以下代码中找到数组越界错误?voidf(intc){char*p=newchar[10];p[c]=42;}voidg(){f(100);}有一个onlinedemo可以使用Cppcheck方便地检查此代码。它所带来的只是第4行的内存泄漏,没有潜在缓冲区溢出的迹象。 最佳答案 我是Cppcheck开发人员。Cppcheck无法检测到这一点并非设计使然。Cppcheck目前不使用所有函数调用的所有给定参数来评估函数。
我在构建CppcheckGUI时遇到了错误的Qt、错误的MinGW、错误的QtCore4.dll路径问题,但最终将其变成了一个可执行文件,它在运行时崩溃了。有问题的地方的反汇编是这样的:moveax,12Fhxorecx,ecxleaedx,[esp+4]calldwordptrfs:[0C0h]addesp,4ret0Ch似乎它在尝试调用静态链接的东西时崩溃了。还有一件事对我来说似乎很奇怪:可执行文件大约是30Mb,而在我从下载的.msi安装的版本中是500Kb。它必须构建错误。我使用来自Github的最新资源Qt4.8.5(mingw版本),尽管我从Qt5.1.1中获取了MinGW
我正在尝试通过telnet在Linux机器上安装Cppcheck。我有cppcheck-1.67.tar文件,我解压了它。我没有看到任何可以为我安装它的东西。我的处理方式是否正确? 最佳答案 实际发布此答案的日期。从那里下载文件https://sourceforge.net/projects/cppcheck/前往下载文件夹cd~/Downloads/解压存档tar-xvfcppcheck-1.76.1.tar.bz2进入解压文件夹cdcppcheck-1.76.1/以root身份安装包sudomakeinstall检查结果$whi
我正在努力处理cppcheck(Linux机器上的1.85版)正在报告的警告:someFile.h:23:29:warning:Redundantcode:Foundastatementthatbeginswithstringconstant.[constStatement]conststd::stringOffOn[]={"off","on"};^我做了一些研究,发现将语句更改为conststd::stringOffOn[]={std::string("off"),std::string("on")};删除警告。但是我不明白发生了什么,以及我的第一个解决方案有什么“坏处”。也许有人可