C 索引0处for循环中的数组访问冲突异常
我正在编写一个程序,需要构建以下矩阵:C 索引0处for循环中的数组访问冲突异常,c,matrix,access-violation,C,Matrix,Access Violation,我正在编写一个程序,需要构建以下矩阵: n、 m分别为行数和列数 最后一列上的所有元素必须等于1 最后一行上的所有元素必须等于1 所有其他元素必须是下方元素与其右侧元素之和的最后一位数字 这是我的函数 void buildMatrix() { // Last row is 1. for (unsigned int j = 0; j < m; j++) M[n - 1][j] = 1; // Last column is 1 for (u
- n、 m分别为行数和列数
- 最后一列上的所有元素必须等于1
- 最后一行上的所有元素必须等于1
- 所有其他元素必须是下方元素与其右侧元素之和的最后一位数字
void buildMatrix()
{
// Last row is 1.
for (unsigned int j = 0; j < m; j++)
M[n - 1][j] = 1;
// Last column is 1
for (unsigned int i = 0; i < n; i++)
M[i][m - 1] = 1;
// Other elements are calculated
for (unsigned int i = n - 2; i >= 0; i--)
for (unsigned int j = m - 2; j >= 0; j--)
M[i][j] = (M[i + 1][j] + M[i][j + 1]) % 10;
}
当i或j达到零时,问题似乎就出现了。如果我在最后一个fors中将“>=”替换为“>”,它将提供以下信息:
0 0 0 0 1
0 0 6 3 1
0 4 3 2 1
1 1 1 1 1
为什么0的行和列出现问题
for (unsigned int j = m - 2; j >= 0; j--)
M[i][j] = (M[i + 1][j] + M[i][j + 1]) % 10;
这永远不会结束,因为
无符号int
总是=0
无符号值不能为负值,因此条件i>=0
始终为真
如果在其值为0
时减少unsignedi
,则由于无符号下溢而变为UINT\u MAX
,循环继续。试图访问这样的索引会引发异常,因为它不仅超出了数组边界,而且超出了程序内存空间
就我个人而言,我会用有符号的int来代替循环迭代器。
无符号的int I
I>=0
这个条件什么时候变为false?太简单了!完全超越了我。谢谢
for (unsigned int j = m - 2; j >= 0; j--)
M[i][j] = (M[i + 1][j] + M[i][j + 1]) % 10;