Rekisteröitymätön käyttäjä
Ero sivun ”Cppcheck” versioiden välillä
Siirry navigaatioon
Siirry hakuun
Päivitettiin vastaamaan engl. wikipedia artikkelia
p (kh) |
(Päivitettiin vastaamaan engl. wikipedia artikkelia) |
||
Rivi 2: | Rivi 2: | ||
Cppcheck on vapaa ohjelmointityökalu, jolla voi etsiä virheitä C- ja C++-ohjelmien lähdekoodista staattisesti. Yleisimmät Cppcheckin löytämät virheet ovat yhden funktion sisällä tapahtuvat muistivuodot, mutta sillä voi etsiä myös monia muita tyypillisiä virheitä. | Cppcheck on vapaa ohjelmointityökalu, jolla voi etsiä virheitä C- ja C++-ohjelmien lähdekoodista staattisesti. Yleisimmät Cppcheckin löytämät virheet ovat yhden funktion sisällä tapahtuvat muistivuodot, mutta sillä voi etsiä myös monia muita tyypillisiä virheitä. | ||
Cppcheck on esimerkiksi löytänyt | Cppcheck on esimerkiksi löytänyt 21 varmistettua ja korjattua bugia Linuxin [[ydin|ytimestä]] ja monia muita muista tunnetuista avoimen lähdekoodin projekteista. | ||
== Käyttö == | == Käyttö == | ||
Rivi 15: | Rivi 15: | ||
<source lang="c"> | <source lang="c"> | ||
#include <stdlib.h> | #include <stdlib.h> | ||
int | void f( std::list<int> foo, std::list<int> bar ) | ||
{ | { | ||
char *del = new char[10]; | |||
std::list<int>::const_iterator it; | |||
for (it = foo.begin(); it != bar.end(); ++it) | |||
{ | |||
bar.push_back( *it ); | |||
} | |||
delete [] del; | |||
del[3] = 0; | |||
} | } | ||
Rivi 29: | Rivi 33: | ||
<pre><nowiki> | <pre><nowiki> | ||
$ ./cppcheck a.c | $ ./cppcheck a.c | ||
Checking | $ ./cppcheck example.cpp | ||
[ | Checking example.cpp... | ||
[ | [example.cpp:11]: (error) Using 'del' after it is deallocated / released | ||
[example.cpp:5]: (error) Same iterator is used with both foo and bar | |||
</nowiki></pre> | </nowiki></pre> | ||
Korjattu lähdekoodi: | Korjattu lähdekoodi: | ||
<source lang="c"> | <source lang="c"> | ||
void f( std::list<int> foo, std::list<int> bar ) | |||
int | |||
{ | { | ||
char *del = new char[10]; | |||
std::list<int>::const_iterator it; | |||
for (it = foo.begin(); it != foo.end(); ++it) | |||
{ | |||
bar.push_back( *it ); | |||
} | |||
del[3] = 0; | |||
delete [] del; | |||
} | } | ||
</source> | </source> | ||