C ++定义和初始化struct实例数组:Undefined Variable?

时间:2015-02-15 18:11:45

标签: c++11

问题C ++ 11是否支持初始化数组,因此不支持stl容器,其初始化结构列表再次包含类似std :: string的C ++类型。请参阅下面的代码。

我正在使用的编译器不抱怨:gcc版本4.8.2(Ubuntu 4.8.2-19ubuntu1)

代码似乎运行得很完美。

Valgrind不抱怨。

但我们正在评估的静态分析工具确实抱怨:

const MyStruct02 myArr02 [] = {                 {“Value 0”,0,-1,41943040},

  • 未初始化的变量
  • myArr02未初始化。
  • myArr02在Repro001_Unitialized_Variable.cpp中定义:49。

分析仪指的是:http://cwe.mitre.org/data/definitions/457.html

代码:

#include <string>
#include <iostream>

struct MyStruct01
{
    const char* description;
    int         val1;
    int         val2;
    int         val3;
};

struct MyStruct02
{
    std::string description;
    int         val1;
    int         val2;
    int         val3;
};

int main(int argc, const char* argv[])
{
    const MyStruct01 myArr01[] = {
        {"Value 0",   0,         -1,    41943040},
        {"Value 1",   10,   5000000,    10485760},
        {"Value 2",   20,   1000000,    409600  },
        {"Value 3",   30,    500000,    204800  },
        {"Value 4_0", 40,    200000,    102400  }
    };

    std::cout << myArr01[0].description << std::endl;


    const MyStruct02 myArr02[] = {
        {"Value 0",   0,         -1,    41943040},
        {"Value 1",   10,   5000000,    10485760},
        {"Value 2",   20,   1000000,    409600  },
        {"Value 3",   30,    500000,    204800  },
        {"Value 4_0", 40,    200000,    102400  }
    };

    std::cout << myArr02[0].description << std::endl;

    return 0;
}

经过一些令人费解的事后,我发现用原生的“const char *”替换结构中的std :: string会删除未初始化的变量警告。

所以我的问题:静态分析器工具是对还是错了?

感谢您的帮助。

亨利

0 个答案:

没有答案