我在CppCheck中创建了一个名为CppCheck_MainRls.cppcheck
包含多个目录的项目,我可以从gui运行项目并且它正在运行.我的项目很大,所以我只需要几个目录来通过CppCheck并将结果导出到xml文件中(以后由jenkins读取)
当前命令行是:
"C:\Program Files (x86)\Cppcheck\CppCheck.exe" --enable=all --xml-version=2 "C:\Program Files (x86)\Jenkins\jobs\MainRls\workspace\Labs\VC++\AllShared" 2> cppcheck_result.xml
Run Code Online (Sandbox Code Playgroud)
哪个适用于"AllShared"目录,如何更改它以读取我的项目文件?
Cppcheck报告错误"错误分配和释放:cname"为该行delete cname;.我没有看到使用我的代码版本有什么问题 - 它看起来很有效.
我的代码错了吗?我如何解决它?使用我的代码有什么后果?
if ( lenght != 0 )
{
char *cname = new char[lenght+1];
inbin.read(reinterpret_cast<char *>( cname ), lenght );
cname[lenght] = '\0';
*ptr_string = cname;
delete cname;
}
Run Code Online (Sandbox Code Playgroud) 我使用realloc来调整分配的内存:
char **get_channel_name(void)
{
char **result;
int n;
result = (char **) 0;
for (elem = snd_mixer_first_elem(handle), n = 0; elem; elem = snd_mixer_elem_next(elem)) {
if (!snd_mixer_selem_is_active(elem))
continue;
if (snd_mixer_selem_has_playback_volume(elem) &&
snd_mixer_selem_has_playback_switch(elem) &&
snd_mixer_selem_has_capture_switch(elem)) {
if (result == (char **) 0)
result = (char **) malloc(sizeof(char *));
else
result = (char **) realloc(result, sizeof(char *) * (n + 1)); /* nulled but not freed upon failure */
result[n++] = strdup(snd_mixer_selem_get_name(elem));
}
}
if (result == (char **) 0)
return NULL; …Run Code Online (Sandbox Code Playgroud) 我安装了sublime linter,cppcheck用于sublime linter和cppcheck二进制文件.我已经设置了cppcheck像其他linters(对于php和javascript),但cppcheck不起作用.在命令行中它说
SublimeLinter: cppcheck activated: Extensions\cppcheck\cppcheck.exe
Run Code Online (Sandbox Code Playgroud)
但是linter不起作用.单击"显示lint错误"给出
no lint errors
Run Code Online (Sandbox Code Playgroud)
而且我确信代码中存在错误.有任何想法吗?
我尝试对我的代码运行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
Run Code Online (Sandbox Code Playgroud)
我想运行一个不包括所有测试代码的分析.这可能是像"cppcheck -itest"这样的命令吗?根据文档,它不适合我,虽然我认为它应该是这样的:
...目录名称与路径的所有部分匹配.
我使用的是版本1.69.我知道我可以单独提及所有测试目录(这确实有用,我检查过),但模块数量太高,无法合理地进行多次分析.
这可能吗?
我想将cppcheck的输出重定向到一个文本文件。它会打印很多信息,stdout但是如果执行此操作cppcheck --enable=all --verbose . > /srv/samba/share/tmp/cppcheck.out,则不会在文件中获取所有信息,为什么不呢?
下面的代码使用microsoft编译器扩展__try和__leave:
void f()
{
char* a = nullptr;
__try {
a = (char*) malloc(10);
if(!a) __leave;
a[1];
} __finally {}
}
Run Code Online (Sandbox Code Playgroud)
目前上面的代码给出了以下警告:
(warning) Either the condition '!a' is redundant or there is possible null pointer dereference: a.
Run Code Online (Sandbox Code Playgroud)
所以问题似乎是cppcheck不理解__leave如果a为null则离开块.用"返回"替换它会导致警告消失.
是否有可能让cppcheck明白这一点?cppcheck手册说明:
您可以检查包含各种编译器扩展,内联汇编代码等的非标准代码.
但我没有找到任何进一步的信息.
注意,我不是在寻找更改代码以使cppcheck满意,而是让cppcheck了解现有代码.
我试图在Visual Studio 2017中使用cppcheck插件。但是,当我选择工具/使用cppcheck检查当前项目时,它总是显示“对象引用未设置为对象的实例”。有什么建议么?
我在用
谢谢。
我使用 Cppcheck 1.70 检查 C++-Builder 项目。我收到很多这样的风格警告
[source\DbgRecMain.cpp:452]: (style) The function 'FormResize' is never used.
Run Code Online (Sandbox Code Playgroud)
这些函数是使用的事件处理程序,但不是在 C++ 代码中显式使用:它们在加载相应的表单或数据模块后由 VCL 运行时绑定。当然,Cppcheck 不会检查 DFM 文件,这就是为什么它无法检测其中定义的事件和处理程序之间的引用。
我想到的一些选择
如何专门抑制这些关于明显未使用的事件处理程序的警告?
考虑以下 mwe,实现一个重载乘法运算符的简单类:
#include <iostream>
using namespace std;
class A {
public:
double a;
A &operator*(double b)
{
a *= b;
return *this;
}
friend A &operator*(double b, A &m) { return m * b; } // (*)
};
int main()
{
A a;
a.a = 5.0;
a * 3.0;
std::cout << a.a << std::endl;
3.0 * a;
std::cout << a.a << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它编译并运行得很好,打印了预期的输出。但是 cppcheck 会给出以下警告。
tmp.cpp:15:48: error: Reference to temporary returned. [returnTempReference]
friend A &operator*(double b, A …Run Code Online (Sandbox Code Playgroud)