传递一个向量作为参数并使用它,为什么会崩溃?

时间:2012-08-03 17:44:38

标签: c++ function stl vector crash

我是C ++的新手,特别是STL。我正在尝试将向量作为参数传递给函数,但它会导致应用程序崩溃。我正在使用Code :: Blocks和MingW。这是一个简单的代码。

#include <iostream>
#include <vector>

using namespace std;

void foo(const vector<int> &v)
{
    cout << v[0];
}
int main(){
    vector<int> v;
    v[0] = 25;
    foo(v);
return 0;
}

谢谢!

1 个答案:

答案 0 :(得分:6)

崩溃是因为你用v[0]写过向量的末尾 - 这是未定义的行为。如果你什么都不做,它的初始大小是0。 (你随后也读过相同的内容,但在此之前所有的赌注都已经完成了。)

您可能想要这样做:

vector<int> v;
v.push_back(25);
foo(v);

或者也许:

vector<int> v(1);
v.at(0) = 25;
foo(v);

如果使用v.at(n)而不是[]运算符,则会抛出异常而不是未定义的行为。