Visual Studio 2015和静态代码分析器警告操作员新阵列上的C28182

时间:2017-10-24 08:02:02

标签: c++ pointers visual-studio-2015 initialization static-code-analysis

我们正在使用Visual Studio 2015 Update 3 + Cumulative Servicing Release。

以下静态代码分析器警告始终出现在特定情况:

operatornew.cpp(5): warning C28182: Dereferencing NULL pointer. 'a' contains the same NULL value as 'Temp_value_#2119' did.
  1. 指针被取消引用
  2. 该指针是使用数组运算符new
  3. 分配的
  4. 和零初始化
  5. 请参阅MWE:

    #include <iostream>
    int main(int, char**)
    {
      int * a = new int[400]();
      a[0] = 1;
    
      int * b = new int[400];
      b[0] = 1;
    
      std::cout << a[0] << std::endl;
      std::cout << b[0] << std::endl;
    
      delete[] a;
      delete[] b;
      return 0;
    }
    

    SCA警告在第5行发出。

    但是当derefencing指针'b' - 不使用零初始化时 - 没有警告。

    警告说,分配失败时指针'a'为NULL。我宁愿期待分配失败的例外。所以我认为在这个例子中指针'a'永远不会为NULL。

    此静态代码分析器是否警告误报?

    使用带有零初始化的数组运算符new(以及MSVC15 + Update3)时是否存在异常std :: bad_alloc?

0 个答案:

没有答案