Chinaunix

标题: C/C++代码检测工具 [打印本页]

作者: sophistcxf    时间: 2015-12-08 17:02
标题: C/C++代码检测工具
如下代码,因为提取vector大小的时候被截断的原因,导致越界。有没有什么代码检测工具可以检测出这种错误,我试了cppcheck检测不出。
  1. int main(int argc, char* argv[])
  2. {
  3.         if (argc < 2) {
  4.                 return -1;
  5.         }
  6.         vector<int> v;
  7.         for (int i = 0; i < atoi(argv[1]); i++) {
  8.                 v.push_back(i);
  9.         }
  10.         // 此处size被截断,可能会小于v.size()
  11.         unsigned char size = v.size();
  12.         int* pi = new int[size];
  13.         // 此处遍历时可能会导致pi越界
  14.         for (int i = 0; i < v.size(); ++i) {
  15.                 pi[i] = v[i];
  16.                 cout << pi[i] << endl;
  17.         }
  18.         delete[] pi;
  19.         system("pause");
  20.         return 0;
  21. }
复制代码

作者: 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