2013-04-06 196 views
2

我正在为我的班级做一个程序,我需要在开始之前将数组'decade'的所有值设置为-1。我试过这个(并在for循环中的版本),它只是让我陷入无限循环!有人可以解释为什么会发生这种情况,我该如何解决它?为什么会产生一个无限循环(C,While循环)

代码:

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++; 
} 

在先进的感谢!

它打印出这一点: What it prints out

的人谁需要在未来的答案,宣布十年为 '十年[10] [10]' 而不是 '十年[9] [9]',或者你的定义。

+6

初始为''i''和''k''值? – gongzhitaao 2013-04-06 20:51:13

+2

它打印出来什么? – 2013-04-06 20:51:41

+0

对不起,没有包含我和k都被声明为'0'的部分,将它放入... – Beaurocks16 2013-04-06 20:52:41

回答

6

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

+0

这个我认为是问题所在,让我试试把尺寸扩大到10 ... – Beaurocks16 2013-04-06 21:00:01

4

我不知道如何“十年”的定义 - 但如果它被定义错误,和/或尺寸不合适,你可以得到可能结果在错误的内存越来越设置缓冲区溢出“-1” - 即“i”或“k”变量可能被覆盖。

+4

这听起来像是你描述了缓冲区溢出而不是内存泄漏。 – Pubby 2013-04-06 20:53:31

+0

缓冲区溢出是一种*类型的内存泄漏 - 但它不一定是“溢出”。它可能在一个维度上是错误的,它可能有错误的维度数量,它可能是错误的类型等。 – Brad 2013-04-06 20:56:04

+1

@Brad不,内存泄漏是完全不同的东西。 – 2013-04-06 20:57:08

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++; 
} 

是不正确的,因为你是iterationg从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循环实际上不用于计数。

1

您环必须是从0到8(十年阵列是长度为9):

while (i<9) { 
    while (k<9) { 
     /* ... */ 
    } 
} 
0

在 “9x9的” 尺寸 - 你是10×10 initialzing。其设置为十年[10] [10],使用(X < 8)或做(X < = 9)

+0

修好了,谢谢 – Beaurocks16 2013-04-06 21:00:51

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++; 
    } 
+0

不是最快的,但都是定义问题并举例。 – Beaurocks16 2013-04-06 21:04:43

+0

程序员可以很容易地理解我输入的代码:) – yunas 2013-04-06 21:06:20

+0

我知道,谢谢你的例子 – Beaurocks16 2013-04-06 21:10:05