Я нашел ошибку в CppCheck? Почему я получаю здесь ошибку разыменования нулевого указателя?

Я использую Cppcheck для управления своим кодом. У меня есть следующая функция:

bool my_function(std::string my_string) const
{
 return 0 == my_string.compare("Some text");  // line 3
}

К моему удивлению, я получаю разыменование нулевого указателя в строке 3.

Я совсем запутался: в моей функции нет указателей. Почему я получаю эту ошибку?

Я пытался исследовать это:

  1. Я проверил, пуста ли строка my_string.

  2. Я создал объект с помощью "Мой текст", чтобы убедиться, что Cppcheck не жалуется на использование временного объекта:

    bool my_function(std::string my_string) const
    { 
     std::string str("Some text");
     return 0 == my_string.compare(str);  // line 3
    }
    

Что еще я могу сделать? Это ошибка в Cppcheck? Есть ли проблема с самой функцией сравнить? Я был бы удивлен, если бы это было так, поскольку cppcheck не жалуется ни на какие другие функции std, которые используются в моем проекте.

Примечание. Я не спрашиваю об ошибке возможного разыменования нулевого указателя, поэтому это не дубликат любого из следующих вопросов: 1, 2 или 3.


person user2738748    schedule 14.06.2016    source источник
comment
Похоже на ошибку для меня. Я не вижу ничего плохого в коде.   -  person Sebastian Hoffmann    schedule 14.06.2016
comment
ты пробовал return (0 == my_string.compare("Some text"));? Просто может быть   -  person Khalil Khalaf    schedule 14.06.2016
comment
Просто для ясности, код работает без сбоев, но просто cppcheck сообщает об ошибке, верно?   -  person Arunmu    schedule 14.06.2016
comment
@FirstStep, я только что попробовал, и теперь все работает, спасибо! Но почему? Предложенное вами изменение не должно влиять на код. Имеет ли это?   -  person user2738748    schedule 14.06.2016
comment
@Арунму, да, верно.   -  person user2738748    schedule 14.06.2016
comment
В конце концов, это влияет на код. И я не знаю, почему до сих пор, дайте мне знать, когда вы знаете!   -  person Khalil Khalaf    schedule 14.06.2016
comment
Я бы сказал, что это ложное срабатывание для cppcheck. На самом деле это не ошибка, поскольку, как и в любом инструменте статического анализа, всегда возможны ложные срабатывания, даже если цель [cppcheck] состоит в том, чтобы обнаруживать только реальные ошибки в коде (т. е. иметь ноль ложных срабатываний) (от страницу cppcheck). Но вы можете сообщить об этом (используя обходной путь в скобках) команде разработчиков cppcheck...   -  person Serge Ballesta    schedule 14.06.2016
comment
Что произойдет, если вы используете operator== и делаете return my_string == "Some text";?   -  person NathanOliver    schedule 14.06.2016
comment
Попробуйте разбить оператор на несколько строк и посмотреть, в какой строке ошибка (также сравнение). у меня есть подозреваемый   -  person CoffeDeveloper    schedule 14.06.2016
comment
@FirstStep В конце концов, это действительно оказывает влияние - какое?   -  person underscore_d    schedule 15.06.2016


Ответы (1)


Я разработчик Cppcheck.

Похоже на ошибку в Cppcheck. Однако я не могу воспроизвести это ложное срабатывание. Если вы не используете последнюю версию Cppcheck, обновите ее. В противном случае сообщите об этом в системе отслеживания ошибок cppcheck: http://trac.cppcheck.net.

person Daniel Marjamäki    schedule 15.06.2016