2016-05-26 14 views
0

Valgrind-Tool erkennt den folgenden Fehler im Code nicht.Klassenobjekt-Speicherfehlererkennung mit variablem Pegel

#include <iostream> 
#include <string.h> 

using namespace std; 

class Instrument 
{ 
    public: 
     char instrumentId[16]; 
     char symbol[16]; 
     char cusip[16]; 

    public: 
     void Pack() 
     { 
      memset(instrumentId, 'I', 16); 
      memset(cusip, 'C', 16); 
      memset(symbol, 'S', 18); // This is wrong 
     } 
}; 

int main(int argc, char** argv) 
{ 
    Instrument* ins = new Instrument(); 
    ins->Pack(); 
}; 

Gibt es ein Tool, das diese Art von Fehler erkennen kann? Wenn es in mehr als für "Instrument" zugewiesen schreibt, wird von Valgrind erkannt. Dies wird jedoch nicht erkannt.

+0

Hinweis: '#include ' –

+0

Dann was ist mit dem memset? –

+0

@ DieterLücking warum nicht? –

Antwort

2

Ich nehme an, Sie sollten eine gute statische Analyse-Tools verwenden.

von Beispiel cppcheck

cppcheck tmp_001-98,11,14,gcc,clang.cpp 

mit I

Checking tmp_001-98,11,14,gcc,clang.cpp... 
[tmp_001-98,11,14,gcc,clang.cpp:19]: (error) Buffer is accessed out of bounds: symbol 
[tmp_001-98,11,14,gcc,clang.cpp:27]: (error) Memory leak: ins 

erhalten und die Zeile 19, offensichtlich ist

memset(symbol, 'S', 18); // This is wrong 

P. S .: sorry für mein schlechtes Englisch.

Verwandte Themen