6

下面贴出的代码有两个问题:

    1)当我在 CodeBlocks 上运行这段代码时,代码有时会成功运行(返回 0),但在显示所有结果后通常会导致错误(返回 -1073741819)。为什么会这样?

    2) 除了数组的最后一个元素的值应该为 1 (pTriangle[20] = 1) 之外,这些值都是正确的。但是,最后我得到了一些垃圾号码,我做错了什么?

我已经意识到我可以用二项式系数得出相同的结果,但我仍然不知道为什么会出现错误,最好能找到我的错误。

更新1
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;
}
4

1 回答 1

1

数组的最后一个元素尚未初始化。

写:

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

代替:

for (i = 0; i < LEVEL; i++)
        pTriangle[i] = 0;
于 2013-07-04T21:03:51.013 回答