【问题标题】:Segmentation fault by pushing back 2D vector通过推回 2D 向量导致的分段错误
【发布时间】:2021-07-04 08:24:22
【问题描述】:

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

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");

它只会给我错误分段错误,我不知道为什么。

我该如何解决这个问题?

【问题讨论】:

标签: c++ vector segmentation-fault


【解决方案1】:

我认为是因为您将 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;
        }
    }

}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-27
    • 2015-11-15
    • 1970-01-01
    • 1970-01-01
    • 2021-02-19
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    相关资源
    最近更新 更多