为什么我会出现分段错误

时间:2018-06-02 13:30:34

标签: c++ multidimensional-array segmentation-fault stdvector

我正在尝试在2D矩阵中打印同心矩形图案。

但是,它显示了一个分段错误。我尝试将所有代码都作为评论。

我认为声明本身有错。它是什么?

   int l = 2*A - 1; 
   vector<vector<int> > ar(l);

   for(int i = 0; i<(2*A - 1); i++)
   {
        for (int j = 0; j<(2*A - 1); j++)
        {
            int h= max(abs(A - i + 1),abs(A - j + 1));
            ar[i][j] = h+1;
        }

    }
    return ar;

2 个答案:

答案 0 :(得分:1)

  

我认为声明本身有错。它是什么?

你是对的。你有一个二维向量,你只需要通过声明:

来关注单层
vector<vector<int> > ar(l);

简单修复就是:

std::vector< std::vector<int> > ar(l, std::vector<int>(l));

现在可以确保初始化满载0 S的二维向量数组,其大小为2*A - 1

立即查看:https://www.ideone.com/1wYCba

简短说明:但是如果您真的在使用concentric rectangular pattern,那么您的代码/逻辑是错误的。上面的代码不会打印您想要的内容,即使它现在符合要求。

答案 1 :(得分:0)

在开始内循环之前,添加:

ar[i].resize(2*A - 1);

(如果A已修复,您可能会发现std::array比矢量更方便。)