﻿# V600\. The 'Foo' pointer is always not equal to NULL\. Consider inspecting the condition\.

Анализатор обнаружил сравнение адреса массива с нулем\. Такое сравнение не имеет смысла и может говорить о наличии ошибки в программе\. 

Рассмотрим пример кода\.

```cpp
void Foo()
{
  short T_IND[8][13];
  ...
  if (T_IND[1][j]==0 && T_IND[5]!=0)
    T_buf[top[0]]= top[1]*T_IND[6][j];
  ...
}
```

Программа обрабатывает двумерный массив\. Код сложен для чтения и ошибка на первый взгляд не заметна\. Однако анализатор предупредит, что сравнение "T\_IND\[5\]\!\=0" не имеет смысла\. Указатель "T\_IND\[5\]" всегда не равен нулю\.

Изучив предупреждения V600 можно найти ошибки, которые, как правило, связаны с опечатками\. Например, может оказаться, что данный код должен выглядеть так:

```cpp
if (T_IND[1][j]==0 && T_IND[5][j]!=0)
```

Предупреждение V600 далеко не всегда означает наличие настоящей ошибки\. Часто причиной появления V600 является неаккуратный рефакторинг\. Рассмотрим наиболее распространенный случай\. В начале код выглядел так:

```cpp
int *p = (int *)malloc(sizeof(int) *ARRAY_SIZE);
...
if (!p)
  return false;
...
free(p);
```

Код менялся\. Стало ясно, что значение ARRAY\_SIZE небольшое и массив можно создавать на стеке\. В результате получился следующий код:

```cpp
int p[ARRAY_SIZE];
...
if (!p)
  return false;
...
```

Здесь выдается предупреждение V600\. Однако код корректно работает\. Просто получилось, что поверка "if \(\!p\)" потеряла смысл и её можно удалить\.