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
时减少unsigned
i
,则由于无符号下溢而变为
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;