2D数组程序在输出中显示垃圾值

时间:2018-06-27 13:28:52

标签: c arrays

我正在编写此简单代码以动态分配2D数组并显示它。当我执行该程序时,它在第一行中给出了垃圾值。那个怎么样?我的程序有任何错误吗?

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

int main()
{
    int **ptr, limit, i, j;

    printf("Enter the limit: ");
    scanf("%d", &limit);

    ptr = (int **) malloc(limit * (sizeof(int)));
    for(i=0; i<limit; i++)
    {
        *(ptr+i) = (int *) malloc((i+1) * sizeof(int));

        for(j=0; j<=i; j++)
        {
            ptr[i][j] = i;
        }
    }

    for(i=0; i<limit; i++)
    {
        for(j=0; j<=i; j++)
        {
            printf("%d ", ptr[i][j]);
        }
        printf("\n");
    }

    return 0;
}

输出:

Enter the limit: 4
0 
1 1 
2 2 2 
3 3 3 3 

Enter the limit: 5
9478320 
1 1 
2 2 2 
3 3 3 3 
4 4 4 4 4

如果我尝试打印限制小于或等于4的2D数组,则效果很好。我在这里想念什么..

谢谢

1 个答案:

答案 0 :(得分:6)

也许还有其他问题;但是可以肯定的是-您为指针元素分配了错误的大小:

ptr = (int **) malloc(limit * (sizeof(int)));

尽管应该有limit个指向int的指针的对象,但是您正在分配int。所以它应该是...

ptr = malloc(limit * (sizeof(int*)));

顺便说一句:在C语言中,请避免强制转换malloc的结果。