繁体   English   中英

为什么会出现分段错误

[英]Why am I getting segmentation fault

我正在尝试在 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;

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

你是对的。 你有一个二维向量,你只通过声明来处理单层:

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/1wY​​Cba


简短说明:但是,如果您确实在处理同心矩形图案,则您的代码/逻辑是错误的。 上面的代码不会打印您想要的内容,即使现在它符合要求。

问题是,虽然您创建了一个包含2*A - 1元素的向量,但这些元素中的每一个都是一个空向量。 因此,当您尝试访问元素的元素(两个下标)时,您访问的是不存在的东西。

一种解决方案是将这些空向量更改为具有假定元素数量的向量。 在开始内部循环之前,添加:

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

(如果A是固定的,你可能会发现std::array比向量更方便。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM