Ero sivun ”Cppcheck” versioiden välillä

Linux.fista
Siirry navigaatioon Siirry hakuun
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 20 varmistettua ja korjattua bugia Linuxin [[ydin|ytimestä]] ja monia muita muista tunnetuista avoimen lähdekoodin projekteista.  
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 main()
void f( std::list<int> foo, std::list<int> bar )
{
{
   int *a;
   char *del = new char[10];
   char b[2];
   std::list<int>::const_iterator it;
   a = malloc(100);
   for (it = foo.begin(); it != bar.end(); ++it)
   b[4] = 0;
  {
   return 0;
    bar.push_back( *it );
   }
  delete [] del;
   del[3] = 0;
}
}


Rivi 29: Rivi 33:
<pre><nowiki>
<pre><nowiki>
$ ./cppcheck a.c
$ ./cppcheck a.c
Checking a.c...
$ ./cppcheck example.cpp
[a.c:8]: Memory leak: a
Checking example.cpp...
[a.c:7]: Array index out of bounds
[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">
#include <stdlib.h>
void f( std::list<int> foo, std::list<int> bar )
int main()
{
{
   int *a;
   char *del = new char[10];
   char b[5];
   std::list<int>::const_iterator it;
   a = malloc(100);
   for (it = foo.begin(); it != foo.end(); ++it)
  b[4] = 0;
   {
   free( a );
    bar.push_back( *it );
   return 0;
   }
  del[3] = 0
  delete [] del;
}
}
</source>
</source>



Versio 9. maaliskuuta 2009 kello 13.10

Cppcheck
Käyttöliittymä teksti
Lisenssi GPL
Kotisivu [1]

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 21 varmistettua ja korjattua bugia Linuxin ytimestä ja monia muita muista tunnetuista avoimen lähdekoodin projekteista.

Käyttö

cppcheck tarkistettava_hakemisto/

tai

cppcheck tarkistettava_tiedosto.cpp

Tämän jälkeen tulostuu tilannetietoa siitä mitä tiedostoa tarkistetaan ja väliin tulostuu virheitä jos niitä löytyy.

Esimerkki

Tutkitaan seuraavaa ohjelmaa Cppcheckillä:

#include <stdlib.h>
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;
}

Cppcheck:n tulostus:

$ ./cppcheck a.c
$ ./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

Korjattu lähdekoodi:

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 != foo.end(); ++it)
  {
    bar.push_back( *it );
  }
 
  del[3] = 0;  
  delete [] del;
}

Aiheesta muualla

Katso myös