2016-06-14 12 views
9

Ich verwende Cppcheck, um meinen Code zu verwalten. Ich habe die folgende Funktion:Habe ich einen Fehler in CppCheck gefunden? Warum bekomme ich hier den Fehler "Null Zeiger Dereferenz"?

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

Zu meiner Überraschung habe ich die Nullzeigerdereferenzierung in der Linie 3.

ich bin völlig verwirrt: Es gibt keine Hinweise in meiner Funktion. Warum bekomme ich diesen Fehler?

Ich habe versucht, es zu untersuchen:

  1. I my_string leer ist, wenn die Zeichenfolge überprüft.

  2. Ich habe ein Objekt „My Text“ verwenden, um sicherzustellen, dass cppcheck nicht etwa beschwert sich ein temporäres Objekt mit:

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

Was kann ich sonst noch tun? Ist das ein Fehler in Cppcheck? Gibt es ein Problem mit der vergleichen Funktion selbst? Ich wäre überrascht, wenn dies der Fall wäre, da cppcheck keine anderen std Funktionen, die in meinem Projekt verwendet werden, beklagen.

Hinweis: Ich bin über die möglich Nullzeigerdereferenzierung Fehler nicht zu fragen, so ist dies kein Duplikat eines der folgenden Fragen: 1, 2 oder 3.

+6

Sieht für mich wie ein Fehler aus. Ich sehe nichts falsch mit dem Code. –

+1

hast du versucht, 'return (0 == mein_string.compare (" Etwas Text "));'? Nur vielleicht –

+2

Nur um klar zu sein, funktioniert der Code ohne Absturz, aber es ist nur, dass cppcheck Fehler meldet, nicht wahr? – Arunmu

Antwort

4

Ich bin ein Cppcheck-Entwickler.

Es sieht aus wie ein Fehler in Cppcheck. Jedoch vermag ich dieses falsche Positive nicht zu reproduzieren. Wenn Sie nicht das neueste Cppcheck verwenden, aktualisieren Sie bitte. Ansonsten melde dies bitte im cppcheck bug tracker: http://trac.cppcheck.net

Verwandte Themen