6

我对 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;
}

谢谢!

4

1 回答 1

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)而不是 [] 运算符,您将抛出异常而不是未定义的行为。

于 2012-08-03T17:46:19.867 回答