Ich installierte das Tool Cppcheck für die statische Codeanalyse meines C++ - Projekts und bekam das Gefühl, dass es schlecht funktioniert. Zum Beispiel, kann mir jemand sagen, warum Cppcheck ist nicht in der Lage, ein Array Out-of-Bounds Fehler im folgenden Code zu finden?Warum findet Cppcheck diesen offensichtlichen Array-Out-of-Bounds-Fehler nicht?
void f(int c) {
char *p = new char[10];
p[c] = 42;
}
void g() {
f(100);
}
Es gibt einen online demo wo dieser Code bequem geprüft cppcheck verwenden werden können. Alles, was auftaucht, ist ein Speicherleck in Zeile 4, keine Anzeichen für einen möglichen Pufferüberlauf.
ich feststellen, dass Ihre Frage bereits im cppcheck Forum gepostet und kommentiert wurde. Der Kommentar dort scheint zu implizieren, dass diese Art von Grenzenüberprüfung noch nicht unterstützt wird. Es könnte besser sein, dies in diesem Forum weiter zu hinterfragen. –
weil kein Tool jemals alle Fehler finden kann, und insbesondere cppcheck nicht vollständig analysiert und evaluiert C++, aber enthält viele Verknüpfungen, die nur für die meisten lokalen Fehler erkannt werden können. – PlasmaHH
Beschreiben Sie die erforderlichen Schritte, damit das Tool den Fehler erkennen kann. Zählen Sie dann die Fälle auf, in denen falsche Positive auftauchen würden. Machen Sie sich dann ein Bild davon, wie sich die Entwickler hinsetzen und diese Dinge gegeneinander abwägen. – HonkyTonk