Ero sivun ”Cppcheck” versioiden välillä

Siirry navigaatioon Siirry hakuun
391 merkkiä lisätty ,  9. maaliskuuta 2009
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 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>


Rekisteröitymätön käyttäjä

Navigointivalikko