[英]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/1wYCba
简短说明:但是,如果您确实在处理同心矩形图案,则您的代码/逻辑是错误的。 上面的代码不会打印您想要的内容,即使现在它符合要求。
问题是,虽然您创建了一个包含2*A - 1
元素的向量,但这些元素中的每一个都是一个空向量。 因此,当您尝试访问元素的元素(两个下标)时,您访问的是不存在的东西。
一种解决方案是将这些空向量更改为具有假定元素数量的向量。 在开始内部循环之前,添加:
ar[i].resize(2*A - 1);
(如果A
是固定的,你可能会发现std::array
比向量更方便。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.