+ -
当前位置:首页 → 问答吧 → STL vector里的segmentation error问题。

STL vector里的segmentation error问题。

时间:2011-11-28

来源:互联网

这个程序,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;
}

作者: byres   发布时间: 2011-11-28

因为push_back会导致迭代器失效,所以每次的iter你都需要重新获得,当然最好的办法是通过下标。而不通过迭代器。

作者: pengzhixi   发布时间: 2011-11-28

看下来震惊了两次:
看到迭代器比较你用小于符号..
在原来的容器里push_back..

作者: hastings   发布时间: 2011-11-28

C/C++ code
int main ()
{
    int i, n;
    vector<int> myvector;
    for (i=1; i<=10; i++) myvector.push_back(i);
    vector<int>::iterator iter;
    n = 3;
    for (int i=0;i!=10;++i)
    {
        if (myvector[i]%n == 0)
            myvector.push_back(999);
    }

    system("pause");
    return 0;
}
注意不能写成i<myvector.size();否则 随着push_back其大小不断增大就会变成死循环直到内存爆了。

作者: pengzhixi   发布时间: 2011-11-28

该回复于2011-11-28 14:39:27被管理员删除

  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
#5楼 得分:0回复于:2011-11-28 14:59:25
引用 3 楼 pengzhixi 的回复:
C/C++ code
int main ()
{
int i, n;
vector<int> myvector;
for (i=1; i<=10; i++) myvector.push_back(i);
vector<int>::iterator iter;
n = 3;
for (int i=0;i!=10;++i)
{
……


三楼正解,随机访问迭代器可以用小于比较

作者: tony2278   发布时间: 2011-11-28