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

Phy*_*ser 6 c++ crash stl function vector

我是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;
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

Fle*_*exo 6

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

你可能想做:

vector<int> v;
v.push_back(25);
foo(v);
Run Code Online (Sandbox Code Playgroud)

或者可能:

vector<int> v(1);
v.at(0) = 25;
foo(v);
Run Code Online (Sandbox Code Playgroud)

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