# V769. The pointer in the expression equals nullptr. The resulting value is senseless and it should not be used.

Анализатор обнаружил подозрительную операцию, применяемую к нулевому указателю. Полученный указатель не имеет смысла. Скорее всего, это свидетельствует о наличии ошибки в логике программы.

Пример:

    void foo(bool isEmpty, char *str)
    {
      char *begin = isEmpty ? str : nullptr;
      char *end = begin + strlen(str);
      ....
    }

Если указатель 'begin' равен nullptr, то выражение "nullptr + len" не имеет смысла: использовать его всё равно нельзя. Возможно, переменная дальше не используется. Тогда стоит провести рефакторинг кода таким образом, чтобы данная операция не осуществлялась над нулевым указателем: это потенциальный источник ошибок, если кто-то об этом забудет и попытается обратиться по указателю.

Например, код можно переписать так:

    void foo(bool isEmpty, char *str)
    {
      char *begin = isEmpty ? str : nullptr;
      if (begin != nullptr)
      {
        char *end = begin + strlen(str);
        ....
      }
      ....
    }

Выявляемые диагностикой ошибки классифицируются согласно ГОСТ Р 71207–2024 как критические и относятся к типу: Ошибки разыменования нулевого указателя/нулевой ссылки [* см. примечание касательно языков C#, Java].

Данная диагностика классифицируется как:

CWE-119 CERT-EXP08-C

Взгляните на примеры ошибок, обнаруженных с помощью диагностики V769.