读书人

STL vector里的segmentation error有关

发布时间: 2012-04-02 19:58:59 作者: rapoo

STL vector里的segmentation error问题。
这个程序,11行那里,如果n=3,就有Segmentation Error,n=4, n=2 等等其他数都没有问题。
怎么回事啊?(编译器linux下 gcc 4.4.5 )

C/C++ code
#include <iostream>#include <vector>using namespace std;int main (){    int i, n;    vector<int> myvector;    for (i=1; i<=10; i++) myvector.push_back(i);    vector<int>::iterator iter;    n = 4;    for (iter=myvector.begin(); iter<myvector.end(); iter++)    {        if (*iter%n == 0)            myvector.push_back(999);    }    return 0;}


[解决办法]
可能会引起内存的重新分配(当原来的内存不足以存放下新添加的元素时候)那么原来的iter肯定会失效。而且即使你的迭代器不失效,那么你的iter可能永远也到不了myvector.end(); 因为随着你不停的push_back那么元素也不停的增多。可能永远无法到达myvector.end()
[解决办法]
vector一般是2的幂次增长,push_back如果原来分配的内存不够就会重新分配,这个时候迭代器(也就是指针)就失效了

读书人网 >C++

热点推荐