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检测到超过为“仪器”分配的写入时。但是没有检测到。
答案 0 :(得分: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:抱歉我的英语不好。