2013-04-06 246 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