在循环中推回向量矢量时的Segfault [复制]

问题描述 投票:0回答:2

这个问题在这里已有答案:

我正在尝试编写一个代码,将数据推回到向量的向量中,但是当我尝试在循环中执行此操作时,我一直遇到分段错误。

我尝试了以下内容。我有两个循环,一个计数到5,另一个计数到第一个循环的位置。我正在尝试用C ++创建一个可变大小的2d向量。我的目标是每个子向量都有不同的大小。

#include <vector>
#include <stdio.h>
#include <iostream>

using namespace std;

int main(){

    vector<vector<int>> v;

    for (int i = 0; i < 5; ++i)
    {

        for (int j = 0; j < i; ++i)
        {
            v[i].push_back(j);
        }
    }
}

当我尝试推回时,我得到分段错误。我究竟做错了什么?

提前谢谢蒂亚戈

c++
2个回答
4
投票

v中没有元素,因此尝试通过v[i]对其进行索引会为您提供段错误,因为它的未定义行为可以索引不存在的元素。

尝试在每次迭代时添加一个向量:

for (int i = 0; i < 5; ++i)
{
    v.push_back(std::vector<int>{});
    for (int j = 0; j < i; ++j)
    {
        v[i].push_back(j);
    }
}

5
投票

在向嵌套向量添加元素之前,需要向vector<int>添加v

此外,你在内循环中有一个拼写错误。您正在使用++i而不是++j

for (int i = 0; i < 5; ++i)
{
    v.push_back(std::vector<int>());
    for (int j = 0; j < i; ++j)
    {
        v[i].push_back(j);
    }
}

另一种方法是在外循环之前调整v的大小。

int size = 5;
v.resize(size);
for (int i = 0; i < size; ++i)
{
    for (int j = 0; j < i; ++j)
    {
        v[i].push_back(j);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.