我们正在使用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.
请参阅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?