【问题标题】:C++ Segmentation fault while trying to create a vector of vectors尝试创建向量向量时出现 C++ 分段错误
【发布时间】:2021-08-05 12:15:05
【问题描述】:

我想在 C++ 中创建一个维度为 nx2 的向量向量,其中 n(rows) 由用户给出。我正在尝试使用 for 循环在此向量中插入值,但是一旦给出 n(rows) 的值,它就会给出分段错误错误 怎么办?

#include <iostream>
#include <vector>
#include <cstdlib>
#define col 2
using namespace std;

int main()
{
    int row;
    cin >> row;
    vector<vector<int>> vec;

    for (int i = 0; i < row; ++i)
    {
        for (int j = 0; j < col; ++j)

            cin >> vec[i][j];
    }
    return 0;
}

【问题讨论】:

  • 你知道建完之后它是空的,对吧?
  • vec[0][0] 超出范围,因为vec 为空。
  • 您需要 resize() 父向量和每个子向量(最好,因为您有信息)或 push_back(),这将起作用,但效率不高。
  • 那么我如何调整每个子向量的大小,例如我添加了一行“vec.resize(row)”现在是什么

标签: c++ for-loop vector segmentation-fault


【解决方案1】:

在插入元素之前,您需要resize 一个向量。或者使用push_back增量插入。

    vector<vector<int>> vec;
    vec.resize(row);
    
    for (int i = 0; i < row; ++i)
    {
        vec[i].resize(col);

        for (int j = 0; j < col; ++j)
        {
            cin >> vec[i][j];
        }
    }

或者:

    vector<vector<int>> vec;
    vec.resize(row);
    
    for (int i = 0; i < row; ++i)
    {

        for (int j = 0; j < col; ++j)
        {
            int value;
            cin >> value;
            vec[i].push_back(value);
        }
    }

【讨论】:

  • 回答明显的欺骗有什么意义?如果您认为我链接的骗子不够好,您可以再找一个 - 我们应该有很多。
  • @Evg - 如果你能找到一个重复的问题并做“投票结束”的事情,我会和你一起结束它。
  • 我已经找到了至少一个骗子,并打算将另一个添加到列表中,但您出于某种原因重新打开了该问题。
  • 你的骗子的链接又是什么?我认为这是通用“如何解决分段错误”问题的链接。在这种情况下,显然需要学习如何调整矢量大小。
  • 在此处分享链接,如果我认为这确实是同一个问题,我将删除此答案并与您关闭。
猜你喜欢
  • 2014-07-20
  • 1970-01-01
  • 1970-01-01
  • 2020-11-24
  • 2018-08-30
  • 2022-07-13
  • 2020-07-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多