pascal三角形和动态内存分配的问题,c

时间:2015-06-26 15:57:16

标签: c memory dynamic allocation realloc

我正在为我的C编程类编写代码并偶然发现了一个问题。我应该写一个程序,它将显示为Pascal的三角形输出。我将使用1d数组,并在每次迭代中使用realloc使数组更大。麻烦的是,即使代码在第7列中输入例如'7'(作为tringle的高度)时编译并运行,也会有垃圾编号。我不知道为什么会这样。我是动态内存分配的初学者,所以请温柔。

这是我的代码:

int i,n;
printf("Give the height:\n");
scanf("%d", &n);
int *tab = (int*)malloc(sizeof(int));
int *tab2, liczba=2;
for(i=0;i<n;i++)
{
    tab2=(int *)realloc(tab,i+1);
    tab2[i]=&liczba;
    print(tab2, i+1);
    printf("\n");
}

void print(int *tab, int size)
{
    int i;
    for(i=0;i<size;i++) printf("%d\t", tab[i]);
}

1 个答案:

答案 0 :(得分:0)

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

void print(int *tab, int size);

int main(void){
    int i, j, n;
    printf("Give the height:\n");
    scanf("%d", &n);
    int *tab = NULL;

    for(i=1;i<=n;++i){
        int *temp = realloc(tab, i * sizeof(*tab));
        if(temp)
            tab = temp;
        else {
            perror("realloc");
            free(tab);
            exit(EXIT_FAILURE);
        }
        tab[i-1] = (i == 1) ? 1 : 0;
        for(j=i-1;j>0;--j){
            tab[j] += tab[j-1];
        }
        print(tab, i);
    }
    free(tab);
    return 0;
}

void print(int *tab, int size){
    int i;
    for(i=0;i<size;i++){
        if(i)
            putchar('\t');
        printf("%d", tab[i]);
    }
    putchar('\n');
}