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

Passing a vector as argument and using it, why does it crash?

本文关键字:崩溃 为什么 参数 向量 一个      更新时间:2023-10-16

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

谢谢!

它崩溃是因为你用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)而不是[]运算符,则会引发异常,而不是未定义的行为。