2

我正在为我的班级做一个程序,我需要在开始之前将数组“十年”的所有值设置为 -1。我试过这个(以及for循环中的版本),它只是让我陷入无限循环!有人可以解释为什么会这样,我该如何解决?

代码:

int decade[9][9], i = 0, k = 0;
while (i<10) {
    while (k<10) {
        printf("i is %d, k is %d\n",i,k);
        decade[i][k] = -1;
        k++;
    }
    k=0;
    i++;
}

提前致谢!

它打印出这个: 打印出来的东西

对于将来需要答案的任何人,请将十年声明为“十年[10][10]”而不是“十年[9][9]”,或者定义您的十年。

4

6 回答 6

6

当您声明一个大小数组时,9它的索引从08。你去9哪个会覆盖内存。这是未定义的行为,可能会导致任何数量的微妙但错误的行为。

于 2013-04-06T20:55:46.877 回答
4

我不知道如何定义“十年” - 但如果定义不正确,和/或大小错误,您可能会导致缓冲区溢出,这可能导致错误的内存设置为“-1” - 即“我" 或 "k" 变量可能会被覆盖。

于 2013-04-06T20:52:40.990 回答
1
int decade[9][9], i = 0, k = 0;
while (i<10) {
    while (k<10) {
        printf("i is %d, k is %d\n",i,k);
        decade[i][k] = -1;
        k++;
    }
    k=0;
    i++;
}

不正确,因为您从 0 迭代到 9(10 个元素)

这段代码是正确的:

int decade[9][9], i = 0, k = 0;
while (i<9) {
   k = 0;

   while (k<9) {
      printf("i is %d, k is %d\n",i,k);
      decade[i][k] = -1;
      k++;
   }

i++;
}

请注意,您在再次循环之前将 k 设置为零。

还存在其他循环的可能性,例如for循环,您使用 while 循环实际上不是为了计数。

于 2013-04-06T20:56:40.900 回答
1

您的循环必须从 0 到 8(十进制数组的长度为 9):

while (i<9) {
    while (k<9) {
       /* ... */
    }
}
于 2013-04-06T20:56:44.077 回答
0

“9x9”中的尺寸 - 您正在初始化 10x10。将其设置为十年[10][10],使用 (x<8) 或执行 (x<=9)

于 2013-04-06T20:57:35.217 回答
0
Index out of bound exception for your code. Try this one instead.

   int dimSize = 10;
    int decade[dimSize][dimSize], i = 0, k = 0;
    while (i<dimSize) {
        while (k<dimSize) {
            printf("i is %d, k is %d\n",i,k);
            decade[i][k] = -1;
            k++;
        }
        k=0;
        i++;
    }
于 2013-04-06T21:02:40.853 回答