我正在编写此简单代码以动态分配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数组,则效果很好。我在这里想念什么..
谢谢
答案 0 :(得分:6)
也许还有其他问题;但是可以肯定的是-您为指针元素分配了错误的大小:
ptr = (int **) malloc(limit * (sizeof(int)));
尽管应该有limit
个指向int的指针的对象,但是您正在分配int。所以它应该是...
ptr = malloc(limit * (sizeof(int*)));
顺便说一句:在C语言中,请避免强制转换malloc
的结果。