2016-06-14 5 views
9

Cppcheck을 사용하여 코드를 관리하고 있습니다. 나는 다음과 같은 기능이 있습니다 놀랍게도CppCheck에서 버그를 발견 했습니까? 왜 여기에 "Null 포인터 역 참조"오류가 발생합니까?

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

를, 내가 선 3.

에 역 참조 널 포인터를 얻을 나는 완전히 혼란 스러워요 : 내 기능에는 포인터가 없습니다. 이 오류가 발생하는 이유는 무엇입니까?

나는 그것을 조사하기 위해 시도했다 : 문자열 가 비어 my_string 경우

  1. 내가 확인.

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

내가 다른 무엇을 할 수 :

  • 나는 Cppcheck 임시 객체를 사용하는 방법에 대한 불평하지 않습니다 "내 텍스트"
    이 있는지 확인 를 사용하여 객체를 생성? Cppcheck에 버그가 있습니까? 에 문제가 있습니까? 기능 자체를 비교합니까? cppcheck이 내 프로젝트에서 사용되는 다른 std 함수에 대해 불평하지 않기 때문에 나는이 경우에 놀랄 것입니다.

    참고 : 나는 오류 역 참조 가능한 널 포인터에 대해 물어 아니에요, 그래서 이것은 다음 질문 중 어느 중복되지 않습니다 : 1, 2 또는 3.

  • +6

    나에게 버그처럼 보입니다. 나는 코드에 아무런 문제가 없음을 본다. –

    +1

    'return (0 == my_string.compare ("Some text"));'시도 했습니까? 그냥 어쩌면 –

    +2

    그냥 분명히, 코드가 작동하지 않고 작동하지만 그 cppcheck가 오류를보고하는 것입니까? – Arunmu

    답변

    4

    본인은 Cppcheck 개발자입니다.

    Cppcheck의 버그처럼 보입니다. 그러나 나는이 거짓 긍정을 재현하지 못한다. 최신 Cppcheck을 사용하지 않으시면 업데이트하십시오. 그렇지 않으면 cppcheck 버그 추적기에 다음을보고하십시오. http://trac.cppcheck.net