【发布时间】:2018-08-08 15:49:01
【问题描述】:
在 C++ 中尝试随机访问空向量时,出现分段错误。
vector<int> g;
cout<<g[3]; //Segmentation fault
但是如果我们做一次 push_back() 操作,那么我们可以做随机访问没有错误:
vector<int> g;
g.push_back(1);
cout<<g[0]; //output = 1
cout<<g[3]; //output = 0
这背后的原因是什么??
【问题讨论】:
-
如果我没记错的话,向量会分块分配内存。您可能无法访问更高的索引。无论如何,这种行为是未定义的
-
第一次使用向量(甚至其他容器)时,首先使用
at而不是[]。at会在你越界并抛出异常时捕获。 -
@NathanOliver:不过,这是有代价的,尤其是在进行线性代数计算时。
-
但是如果我们做一个 push_back() 操作,那么我们可以做随机访问没有错误: -- 有一个错误 -- 你选择了一个元素在向量的范围之外。该错误的可见结果是什么是另一回事。
-
@PeteBecker 我将默默地继续使用垃圾归类为“坏事”。 比意外终止要糟糕得多
标签: c++ vector random-access