PC-Lint, std::map и ошибка 613 (возможно использование нулевого ptr)

Я пытался использовать PC-Lint с опцией + FNR. Это заставляет lint заподозрить, что все подобные указателям возвратные функции могут быть nullptr.

Но для некоторых функций я знаю, что они не будут возвращать nullptr в любом случае. Чтобы сказать PC-Lint, что он может игнорировать проверку nullptr для них, я могу использовать

-sem(func, @p != 0)

Но есть и другая проблема: PC-Lint не может правильно проверить ситуацию, когда стандартные контейнеры возвращают итераторы.

// using +fnr in .lnt file
//lint -sem(f1, @p != 0)
//lint -sem(std::map::find, @p != 0)
#include<map>

int* f1();

int main()
{
    int* p1 = f1();
    *p1 = 2;            // -sem worked

    std::map<int, int> m;
    std::map<int, int>::iterator it = m.find(1);
    if (it != m.end())
        it->second = 12;// even -sem doesn't work
}

Генерирует

C:\lint_test\f3.cpp(18): Issue 613: (Warning -- Possible use of null pointer 'unknown-name' in left argument to operator '->' [Reference: file C:\lint_test\f3.cpp: line 18])

Если PC-Lint недостаточно умен, чтобы увидеть, что я проверяю итератор перед использованием, я бы хотел хотя бы отключить эту проверку для std::map::find. Но я не могу, -сем не работает

Кто-нибудь знает, как решить эту проблему?

0 ответов

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