c - 动态二维数组特定行的意外输出

标签 c

我正在解决一个显示 Pascal 三角形的编程问题。在代码中,我将每行的最后一个元素设置为零。尽管如此,第 6 行的最后一个元素的输出为 50。我无法弄清楚这是为什么。请帮忙。附上代码。

int ** generate(int A, int *number_of_rows) {

    *number_of_rows = A;
    int i,j,nc=0;
    int **result = (int**)malloc(A * sizeof(int *));


    for(i=0;i<A;i++)
    {
        nc=i+1;
        result[i]=(int)malloc(nc*sizeof(int));
        result[i][0]=nc;
        result[i][1] = 1;
        for(j=2;j<nc;j++)
        {

            result[i][j]=result[i-1][j]+result[i-1][j-1];
        }
    }
    return result;
}

编辑:

每行的第一个元素显示该行的列数。

最佳答案

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

int ** generate(int A, int *number_of_cols) {
    int **result = malloc(A * sizeof(int *));
    int nc;//number of columns

    for(int i = 0; i < A; ++i){
        number_of_cols[i] = nc = i + 1;
        result[i] = malloc(nc * sizeof(int));
        result[i][0] = result[i][nc-1] = 1;
        if(i > 1)
            for(int j = 1; j < nc -1; ++j){
                result[i][j] = result[i-1][j-1] + result[i-1][j];
            }
    }
    return result;
}
int main(void){
    int n;
    scanf("%d", &n);

    int *number_of_cols = malloc(n * sizeof(int));
    int **pascal_triangle = generate(n, number_of_cols);

    for(int i = 0; i < n; ++i){
        printf("%*s", 2 * (n-i-1), "");
        for(int j = 0; j < number_of_cols[i]; ++j){
            printf("%4d", pascal_triangle[i][j]);
        }
        puts("");
        free(pascal_triangle[i]);
    }
    free(pascal_triangle);
    free(number_of_cols);

    return 0;
}

关于c - 动态二维数组特定行的意外输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38191630/

相关文章:

c - shellcode缓冲区溢出-SegFault

c++ - 为面向对象的 C++ 代码开发 C 包装 API

c - fatal error LNK1120 : 1 unresolved externals in C

c - fork调用后的地址空间

c# - 从 C 函数返回结构,C# 中的等价物是什么?

c - C语言中有没有可以快速排序文件的函数?

在 C 中将十六进制转换为字符串?

c - GCC 和 Arduino 中的函数指针不同行为

c# - VFD显示编程

c++ - 在我的 c 程序中静态链接 OpenSSL