Chinaunix
标题:
C/C++代码检测工具
[打印本页]
作者:
sophistcxf
时间:
2015-12-08 17:02
标题:
C/C++代码检测工具
如下代码,因为提取vector大小的时候被截断的原因,导致越界。有没有什么代码检测工具可以检测出这种错误,我试了cppcheck检测不出。
int main(int argc, char* argv[])
{
if (argc < 2) {
return -1;
}
vector<int> v;
for (int i = 0; i < atoi(argv[1]); i++) {
v.push_back(i);
}
// 此处size被截断,可能会小于v.size()
unsigned char size = v.size();
int* pi = new int[size];
// 此处遍历时可能会导致pi越界
for (int i = 0; i < v.size(); ++i) {
pi[i] = v[i];
cout << pi[i] << endl;
}
delete[] pi;
system("pause");
return 0;
}
复制代码
作者:
VIP_fuck
时间:
2015-12-08 17:15
既然知道是问题,为何不改了?
还是说现有代码里这样的问题很多,,一个一个检查很费劲?
作者:
VIP_fuck
时间:
2015-12-08 17:16
这种问题我也遇到过,不算隐藏很深,不过确实也得仔细看才行。
作者:
fender0107401
时间:
2015-12-08 18:04
我觉得这种问题任何工具都没戏。这个应该算是逻辑错误。
作者:
windoze
时间:
2015-12-08 22:35
errr……这种问题还要工具?!难道编译的时候你都不看警告的?要是实在管不住自己就加一个-Werror
作者:
action08
时间:
2015-12-08 23:41
代码都是凭良心写出来的
int* pi = new int[size];这个size=o会出现什么问题??呵呵
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2