Ho installato lo strumento Cppcheck per l'analisi del codice statico del mio progetto C++ e ho avuto la sensazione che funzioni male. Ad esempio, qualcuno può dirmi perché Cppcheck non riesce a trovare un errore di array fuori dai limiti nel seguente codice?Perché Cppcheck non trova questo ovvio errore di fuori campo?
void f(int c) {
char *p = new char[10];
p[c] = 42;
}
void g() {
f(100);
}
C'è un online demo in cui questo codice può essere comodamente controllato utilizzando Cppcheck. Tutto ciò che viene fuori è una perdita di memoria alla riga 4, nessun segno di un potenziale overflow del buffer.
ho notato che la tua domanda è già stato pubblicato e commentato nel forum cppcheck. Il commento sembra implicare che questo tipo di controllo dei limiti non è ancora supportato. Potrebbe essere meglio interrogarlo ulteriormente in quel forum. –
perché nessuno strumento potrebbe mai trovare tutti gli errori, e specialmente cppcheck non analizza e valuta completamente C++, ma contiene molte scorciatoie che consentono di rilevare solo la maggior parte degli errori locali. – PlasmaHH
Descrivere i passaggi necessari affinché lo strumento sia in grado di rilevare l'errore. Quindi elencare i casi in cui potrebbero apparire falsi positivi. Quindi provate ad immaginare gli sviluppatori seduti e valutando queste cose l'una contro l'altra. – HonkyTonk