传递一个向量作为参数并使用它,它为什么会崩溃
Passing a vector as argument and using it, why does it 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;
}
谢谢!
它崩溃是因为你用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)
而不是[]运算符,则会引发异常,而不是未定义的行为。
相关文章:
- 为什么所有C++编译器都会崩溃或挂起此代码
- 为什么lambda在clang上崩溃而不是在gcc上崩溃
- 为什么我的多线程作业队列崩溃
- 为什么引用传递会导致此崩溃(C++)
- 排序时无法执行交换操作.我做的时候它会崩溃.为什么
- 为什么要增加导致崩溃的指针
- 为什么它只打印双链接列表的第一个值,而我的程序却崩溃了
- 为什么当我尝试搜索双链表中第一个数据条目之外的数据时,程序崩溃了?
- 为什么从文件获取图标时应用程序有时会崩溃?
- 为什么gmp会在这里与"invalid next size"重新定位一起崩溃?
- 您好,我实际上想了解以下代码.有人可以详细说明代码它到底在做什么吗?为什么它会在第 31 行崩溃
- 为什么vector::eras似乎会导致崩溃?
- 为什么我的结构在包含字符串时崩溃?
- 为什么在同一条件变量上使用多个互斥锁会使此代码崩溃?
- C++程序崩溃.为什么?
- 类似的代码.一个工作,一个崩溃.为什么?
- 读取空格会使解析器崩溃.为什么?
- 试图在C++中打印变量int会导致它崩溃.为什么?
- 如果程序包含以下代码,则可能会崩溃.为什么
- 递归二叉搜索实现崩溃.为什么