Ero sivun ”Cppcheck” versioiden välillä

Siirry navigaatioon Siirry hakuun
439 merkkiä lisätty ,  18. helmikuuta 2022
p
<syntaxhighlight>
p (kh)
p (<syntaxhighlight>)
 
(4 välissä olevaa versiota 3 käyttäjän tekeminä ei näytetä)
Rivi 1: Rivi 1:
{{ Ohjelma | nimi=Cppcheck | kuva= | kuvateksti= | lisenssi=[[GPL]]| käyttöliittymä=teksti | kotisivu=[http://cppcheck.wiki.sourceforge.net/] }}
{{Ohjelma
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ä.
| nimi=Cppcheck
| kuva=
| kuvateksti=
| lisenssi=[[GPL]]
| käyttöliittymä=teksti
| kotisivu=[http://cppcheck.sourceforge.net/ cppcheck.sourceforge.net]
}}


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 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 [[ydin|ytimestä]] ja monia muita muista tunnetuista avoimen lähdekoodin projekteista.  


== Käyttö ==
== Käyttö ==
Rivi 13: Rivi 21:
== Esimerkki ==
== Esimerkki ==
Tutkitaan seuraavaa ohjelmaa Cppcheckillä:
Tutkitaan seuraavaa ohjelmaa Cppcheckillä:
<source lang="c">
 
#include <stdlib.h>
<syntaxhighlight lang="c++">
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;
}
}


</source>
</syntaxhighlight>


Cppcheck:n tulostus:
Cppcheck:n tulostus:
<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">
<syntaxhighlight 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>
 
</syntaxhighlight>


== Aiheesta muualla ==
== Aiheesta muualla ==
Rivi 52: Rivi 68:
*[https://sourceforge.net/projects/cppcheck Projektisivu]
*[https://sourceforge.net/projects/cppcheck Projektisivu]
*[http://en.wikipedia.org/wiki/Cppcheck Englanninkielinen Wikipedia-sivu]
*[http://en.wikipedia.org/wiki/Cppcheck Englanninkielinen Wikipedia-sivu]
== Katso myös ==
== Katso myös ==
*[[Valgrind]]
*[[Valgrind]]
[[Luokka:Kehitystyökalut]]
[[Luokka:Kehitystyökalut]]
10 147

muokkausta

Navigointivalikko