下面列出的代码有两个问题:
1)当我在CodeBlocks上运行此代码时,代码有时会成功运行(返回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 :(得分:1)
数组的最后一个元素尚未初始化。
写:
for (i = 0; i < LEVEL + 1; i++)
pTriangle[i] = 0;
而不是:
for (i = 0; i < LEVEL; i++)
pTriangle[i] = 0;