Visual Studio 2015 и предупреждение статического анализатора кода C28182 о новом массиве операторов
Мы используем Visual Studio 2015 с обновлением 3 + Накопительное обслуживание.
Следующее предупреждение статического анализатора кода появляется всегда в определенной ситуации:
operatornew.cpp(5): warning C28182: Dereferencing NULL pointer. 'a' contains the same NULL value as 'Temp_value_#2119' did.
- Указатель разыменовывается
- Этот указатель был выделен с помощью оператора массива new
- и нулевая инициализация
Смотрите 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.
Но при разыменовании указателя "b", который не использует нулевую инициализацию, предупреждение отсутствует.
В предупреждении говорится, что указатель 'a' равен NULL в случае неудачного размещения. Я предпочел бы ожидать исключения в случае сбоя при распределении. Так что я думаю, что указатель 'a' никогда не равен NULL в этом примере.
Является ли этот статический анализатор кода предупреждением о ложном срабатывании?
Есть ли исключение std::bad_alloc при использовании оператора массива new с нулевой инициализацией (и MSVC15+Update3)?