﻿# V6008\. Potential null dereference\.

Анализатор обнаружил фрагмент кода, который может привести к доступу по нулевой ссылке\.

Рассмотрим несколько примеров, для которых анализатор выдает диагностическое сообщение V6008:

```cpp
if (obj != null || obj.isEmpty()) { ... }
if (obj == null && obj.isEmpty()) { ... }
```

Во всех условиях допущена логическая ошибка, которая приведет к доступу по нулевой ссылке\. Ошибка может быть допущена при рефакторинге кода или из\-за случайной опечатки\.

Корректные варианты:

```cpp
if (obj == null || obj.isEmpty()) { .... }
if (obj != null && obj.isEmpty()) { .... }
```

Конечно, это очень простые ситуации\. На практике проверка объекта на null и его использование может находиться в разных местах\. Если анализатор выдал предупреждение V6008, изучите код расположенный выше и попробуйте понять, почему ссылка может быть нулевой\.

Пример кода, где проверка и использование объекта находятся в разных строках

```cpp
if (player == null) {
  ....
  String currentName = player.getName();
  ....
}
```

Анализатор предупредит, об опасности в строке внутри блока 'if'\. Здесь или некорректно написано условие, или вместо 'player' должна использоваться другая переменная\.

Программисты иногда забывают о том, что при проверке двух объектов на null один из них может оказаться нулевым, а второй нет, в результате чего будет вычислено всё условие и произойдёт доступ по нулевой ссылке\. Например,

```cpp
if ((text == null && newText == null) && text.equals(newText)) {
  ....
}
```

Это условие можно переписать, например, так

```cpp
if ((text == null && newText == null) ||
    (text != null && newText != null && text.equals(newText))) {
  ....
}
```