【问题标题】:2D array program shows garbage value in output二维数组程序在输出中显示垃圾值
【发布时间】:2018-06-27 21:33:18
【问题描述】:

我正在为动态分配的二维数组编写这个简单的代码并显示它。当我执行这个程序时,它在第一行给出垃圾值。那个怎么样?我的程序有错误吗?

#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 的二维数组,它可以正常工作。我在这里错过了什么..

谢谢

【问题讨论】:

    标签: c arrays


    【解决方案1】:

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

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

    虽然应该有 limit 指向 int 的指针对象,但您正在分配 int。所以它需要...

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

    顺便说一句:在 C 中,避免转换 malloc 的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-14
      • 2016-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-23
      • 1970-01-01
      • 2016-08-31
      相关资源
      最近更新 更多