2013-07-04 54 views
6

有兩個關於代碼的問題貼在下面:

        1)當我在代碼塊運行此代碼,該代碼有時運行成功(返回0),但通常會導致它顯示所有結果後返回一個錯誤(返回-1073741819)。爲什麼會這樣?

          2)除數組的最後一個元素值爲1(pTriangle [20] = 1)外,其他值都正確。但是,我最終得到了一些垃圾數,我做錯了什麼?

我已經意識到我可以用二項式係數得出相同的結果,但我仍然不知道爲什麼我會得到這個錯誤,如果我的錯誤可以找到,這將是最好的。

Update1
pTriangle[i] = temp[i % 2 ? 0 : 1] + pTriangle[i];似乎是問題所在。當我評論這段代碼時,程序沒有崩潰。我試圖找出爲什麼崩潰,並試圖找到一個解決方案圍繞它:)創建帕斯卡三角(不穩定的代碼)

#include <stdio.h> 
#include <stdlib.h> 

#define LEVEL 20 

int main() 
{ 
    int *pTriangle = (int*)malloc(sizeof(int)*(LEVEL+1)); 
    int i; 

    for (i = 0; i < LEVEL; i++) 
     pTriangle[i] = 0; 

    createPascalTriangle(pTriangle, LEVEL); 

    for(i = 0; i < LEVEL+1; i++) 
     printf("pTriangle[%d]: %d\n", i, pTriangle[i]); 

    free(pTriangle); 

    return 0; 
} 

int createPascalTriangle(int *pTriangle, int level){ 
    if (level <= 0) 
     return 0; 
    pTriangle[0] = 1; 
    pTriangle[1] = 1; 
    int i; 
    for (i = 2; i <= level; i++) 
     increasePascalTriangleOneLevel(pTriangle); 

    return 1; 
} 

int increasePascalTriangleOneLevel(int *pTriangle){ 
    int i = 1; 
    int temp[2] = {0}; 

    temp[0] = pTriangle[0]; 
    while (pTriangle[i] != 0){ 
     temp[i % 2] = pTriangle[i]; 
     pTriangle[i] = temp[i % 2 ? 0 : 1] + pTriangle[i]; 
     i++; 
    } 
    pTriangle[i] = 1; 

    return 1; 
} 
+0

哇。它縮進了! – 2013-07-04 20:16:31

+0

啊哈。謝謝:) – kpark

回答

1

數組的最後一個元素尚未初始化。

寫:

for (i = 0; i < LEVEL + 1; i++) 
    pTriangle[i] = 0; 

代替:

for (i = 0; i < LEVEL; i++) 
     pTriangle[i] = 0; 
+0

順便說一句,這段代碼不符合標準。 (例如,Visual Studio不編譯它。)在使用它之前聲明你的函數。 – szedjani

+1

我認爲就是這樣。它對我來說工作得很好,但是valgrind在'while(pTriangle [i]!= 0)'(索引20)時發出了訪問未初始化內存的警告。 – Macattack

+0

在許多情況下,它沒有任何初始化,它是0,但你不能確定它。 – szedjani