2011-10-29 55 views
1

因此,這裏是我的代碼ç被困在for循環

int find_h(int i, int j, int current[N+1][N], int goal[N+1][N]) 
{ 
    int sum=0; 
    int a, b; 
    int cp[N*3], gp[N*3]; 
    for(a=0;a<N;a++) 
    { 
    for(b=0;b<N;b++) 
    { 
     cp[4*a+b]=current[a][b]; 
     gp[4*a+b]=goal[a][b]; 
     printf("b = %d\n", b); 
    } 
    printf("\n"); 
    } 
    return sum; 
} 

N = 4以及當前和目標都充滿了數字從0到15包容,只出現一次每個。

它循環罰款的前3次迭代(直到a = 3),但它不斷輸出b = 0。

感謝

+0

什麼是cp和gp用於?似乎總不會計算 –

回答

1

我不知道你想做什麼,但我會告訴你一件事:cpgp有太多小。正如所寫的,它們應該是大的N * N而不是N * 3(== 12)。

現在,這裏cp[4*a+b]你應該寫下N*a+b。如果N == 4那麼它是一樣的。否則...

而且還不清楚:int current[N+1][N]這會(用N == 4)一個20數組元素。您然後複製N * N元素的線性陣列(或者N * 3,見上)......

+0

啊!謝謝!我在測試時忘了改變它 – Kamran224

+1

爲了清楚爲什麼這會變成無限循環,很可能'cp [13]'或'gp [13]'實際上指向'b'(因爲它恰好在內存中的數組之後),並且current [3] [1]或goal [3] [1]'爲'0',所以它在非存儲器中保持設置'b'爲'0' - 明顯的方式。絕對未定義的行爲。 –

2

我認爲你的循環覆蓋了內存。如果N = 4,那麼你正在分配cp [12]和gp [12]。然而,當a = 3cp [4 * a + b]和gp [4 * a + b]兩者均爲[12]時,已經超過陣列的末端

1

一個問題是cpgp太小。您正在分配索引達到4*(N-1)+(N-1)的元素,但數組長度只有3*N個元素。

當您寫入數組末尾時,程序的行爲是未定義的。

0

它看起來像你溢出的CP和GP緩衝區。您應該爲它們分配4 * N空間,而不是3 * N。你可以嘗試改變它嗎?我會,但我離開我的電腦。