标签: cppcheck

如何在CppCheck中从命令行运行已保存的项目

我在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 jenkins

5
推荐指数
1
解决办法
1380
查看次数

如何通过分配和释放不匹配来修复此错误?

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)

c++ cppcheck

5
推荐指数
1
解决办法
5054
查看次数

动态数组:使用realloc()而不会出现内存泄漏

我使用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)

c realloc cppcheck

5
推荐指数
1
解决办法
2658
查看次数

Sublime Text cppcheck"no lint errors"

我安装了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 sublimelinter sublimetext3

5
推荐指数
1
解决办法
574
查看次数

如何从cppcheck分析中排除测试路径?

我尝试对我的代码运行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.我知道我可以单独提及所有测试目录(这确实有用,我检查过),但模块数量太高,无法合理地进行多次分析.

这可能吗?

c++ ignore cppcheck

5
推荐指数
1
解决办法
828
查看次数

如何将cppcheck的输出重定向到文件?

我想将cppcheck的输出重定向到一个文本文件。它会打印很多信息,stdout但是如果执行此操作cppcheck --enable=all --verbose . > /srv/samba/share/tmp/cppcheck.out,则不会在文件中获取所有信息,为什么不呢?

linux bash redirect stdout cppcheck

5
推荐指数
1
解决办法
2077
查看次数

Cppcheck使用microsoft编译器扩展

下面的代码使用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了解现有代码.

c++ visual-studio cppcheck

5
推荐指数
0
解决办法
103
查看次数

Visual Studio 2017的cppcheck插件问题“对象引用未设置为对象的实例”。

我试图在Visual Studio 2017中使用cppcheck插件。但是,当我选择工具/使用cppcheck检查当前项目时,它总是显示“对象引用未设置为对象的实例”。有什么建议么?

我在用

  • Microsoft Visual Studio Professional 2017 15.5.6版
  • CPPCheckPlugin 1.3.5
  • CMake 3.12.1
  • Windows 10专业版64位

谢谢。

c++ visual-studio cppcheck

5
推荐指数
1
解决办法
305
查看次数

抑制 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 文件,这就是为什么它无法检测其中定义的事件和处理程序之间的引用。

我想到的一些选择

  • 添加一些显式引用,但这必须手动维护。
  • 抑制所有此类警告,但这会隐藏真正的死代码。

如何专门抑制这些关于明显未使用的事件处理程序的警告?

static-analysis c++builder cppcheck

4
推荐指数
1
解决办法
6514
查看次数

Cppcheck 说“引用临时返回”,但代码运行良好。也许是误报?

考虑以下 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)

c++ cppcheck

4
推荐指数
1
解决办法
131
查看次数