是否有任何c ++静态分析工具来检测矢量的潜在错误

时间:2014-11-03 06:42:27

标签: c++ vector static-analysis

请参阅rust example中的以下代码。有没有静态分析工具来检测这个问题?

#include<iostream>
#include<vector>
#include<string>

int main() {
    std::vector<std::string> v;

    v.push_back("Hello");

    std::string& x = v[0];

    v.push_back("world");

    std::cout << x;
}

1 个答案:

答案 0 :(得分:1)

开源程序“cppcheck”从根本上说具有检测此类错误的能力。根据其description,它可以检测到:

  

[...]

     
      
  • for vectors:使用push_back后使用迭代器/指针
  •   
     

[...]

不幸的是,我测试的版本(1.63)没有检测到代码段中的错误。但是,从引用更改为迭代器会产生一种显然可以检测到的情况:

#include<iostream>
#include<vector>
#include<string>

int main() {
    std::vector<std::string> v;

    v.push_back("Hello");

    std::string& x = v[0];
    std::vector<std::string>::iterator it = v.begin();

    v.push_back("world");

    std::cout << *it;
}

将其存储在test.cpp并运行cppcheck:

cppcheck --std=c++03 ./test.cpp

我得到以下输出:

Checking test.cpp...
[test.cpp:15]: (error) After push_back(), the iterator 'it' may be invalid.

我认为这与你正在寻找的非常接近。