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.
  1. Указатель разыменовывается
  2. Этот указатель был выделен с помощью оператора массива new
  3. и нулевая инициализация

Смотрите 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)?

0 ответов

Другие вопросы по тегам