2016-05-26 1 views
0

Valgrindツールはコード内で次のエラーを検出しません。クラスオブジェクトの可変レベルメモリエラー検出

#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(); 
}; 

これらのタイプのエラーを検出できるツールはありますか? Valgrindによって "Instrument"のために割り当てられた以上に書き込みが検出されたとき。しかし、これは検出されません。

+0

注: '#include ' –

+0

memsetはどうですか? –

+0

@DieterLückingなぜですか? –

答えて

2

良い静的解析ツールを使用することをお勧めします。 cppcheck

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

を使用した例により、

が、私は

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 

と行19入手、明らかに、

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

p.s:申し訳ありません私の悪い英語のためです。

関連する問題