2D 向量给出分割错误
2D vector giving segmentation fault
我正在尝试使用矢量创建一个 2D 数组。我编写了以下代码:
int main() {
vector< vector<int> > v;
int i, j;
for(i=0; i<11; i++)
for(j=0; j<11; j++)
v[i].push_back(j);
for(i=0; i<11; i++) {
for(j=0; j<11; j++)
cout<<v[i][j]<<" ";
cout<<endl;
}
return 0;
}
现在我期待它打印数字 0 到 10,十一次(每次在新行中)。但是代码给出了运行时错误(分段错误)。谁能告诉我哪里出错了?
谢谢。
当你声明任何事物的向量时,它还没有任何元素。
因此:
v[i].push_back(j)
正在尝试将 j 插入到位置 i 处的向量 v 内不存在的向量中。
在这种情况下,正如您知道的大小一样,您应该使用构造函数中所需的元素数初始化向量:
vector<vector<int> > v(11);
这将向量 v 初始化其中有 11 个空向量。
当您尝试访问不可用的内存时,会发生分段错误。通常,当使用向量时,这意味着您正在访问向量之外的元素(太高或太低)。
使用vector
时,请始终使用for loops
中size()
的功能,因为它可以防止其溢出。您很可能通过0...10
访问向量大小之外的元素(这将返回 11 个元素,无论如何它在那里都是未初始化的)。
您没有初始化第一级向量。
for(i=0; i<11; i++)
vector<int> subVector;
v.push_back(subVector);
for(j=0; j<11; j++)
v[i].push_back(j);
v[i]
尚不存在,您的向量向量为空。
将其更改为 vector< vector<int> > v(11);
以具有包含 11 个向量的初始向量。
创建新向量时,默认情况下它没有元素。您必须使用 push_back() 插入元素。在您的情况下,您之前没有在向量中输入任何元素,并且您尝试在该向量的第 i 个位置插入元素,该位置仍然不存在。
所以你需要明确定义向量的大小,即
vector<vector<int> > v(10);
现在,向量知道有 10 个元素。
希望,它有帮助。祝您编码愉快!
相关文章:
- C++映射分割错误(核心转储)
- 由cin中的字符串中未捕获空白引起的分割错误
- 删除映射和分割错误中的一个过去结束元素
- 在指向函数中读取变量时出现分割错误
- 在链表中的第 n 位插入显示分割错误
- 较高值 n 的分割错误(例如 n=999997)
- 尝试通过memcpy复制大尺寸浮点向量时的分割错误
- 分割错误:向量中的擦除功能
- 向量向量的分割错误
- 我在C++中编写了一个方法来打印树类的预序,但它显示了分割错误
- C ++分割错误,为什么使用"long long"我没有得到答案?
- 在尝试使用递归查找集合子集的总数时,我遇到了分割错误
- 分割错误 11:尝试使用 cin 输入 B[1] 时
- 集合布局上的 Qt 分割错误
- 高达20亿的筛子会产生分割错误
- 对向量使用推回函数时的分割错误
- 绘制精灵会导致分割错误
- 将矢量的整数内容打印为字符串会导致分割错误
- 分割错误:使用向量时为 11 c++
- 结构的分割错误错误