首页 > 解决方案 > 通过推回 2D 向量导致的分段错误

问题描述

我有一个函数,它接受一个数字字符串并将每个元素分配给一个单维向量:

void insert(vector<int> &matrix, string s)
{
for (int i=0; i<s.length(); i++)
matrix.push_back(s[i]-'0');
}

然后,在我的main函数中,我声明了一个 2D 向量:

vector<vector<int>> matrix;

现在例如我尝试执行该功能:

insert(matrix[0],"12345");

它只会给我错误Segmentation fault,我不知道为什么。

我该如何解决这个问题?

标签: c++vectorsegmentation-fault

解决方案


我想是因为你声明你的 2Dvector 像

向量<向量> 矩阵;

所以通过这样声明你的矩阵大小为0。

由于您的矩阵是空的,因此您无法从中访问元素。而是使用一些默认值(如 0)初始化您的 2d 向量并尝试一下。

#include <vector>
#include <iostream>

using namespace std;
void insert(vector<int> &matrix, string s)
{
    for (int i=0; i<s.length(); i++)
        matrix.push_back(s[i]-'0');
}

int main()
{
    int n=2,m=2;
    vector<vector<int> > matrix(n, vector<int>(m));
    
    insert(matrix[0],"12345");
    for (auto i:matrix)
    {
        for (auto j:i)
        {
            
            cout << j;
        }
    }

}

我不确定这是否是您对插入函数的期望


推荐阅读