C代码不断闪烁错误,想知道我是否可以在这里得到帮助?

问题描述 投票:0回答:2

我正在学习C,我想坠入爱河,但是我新发现的爱使我在这个简单的(应该是)代码中感到惊讶。我只是想打印一个2D网格,以整数填充。无论我进行了什么更改,它始终会给出相同的int相关错误。有什么帮助吗?

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

/* malloc_grid - create a 2D array of integers */

int **malloc_grid(int width, int height)
{
    int i, j;
    int **arr;

    if (width < 1 || height < 1)
        return (NULL);

    arr = (int **)malloc(height * sizeof(int *));
    if (arr == NULL)
    {
        free(arr);
        return (NULL);
    }
    for (i = 0; i < height; i++)
    {
        arr[i] = (int *)malloc(width * sizeof(int));
        if (arr[i] == NULL)
        {
            for (; i >= 0; i--)
            {
                free(arr[i]);
            }
            free(arr);
            return (NULL);
        }
    }

    for (i = 0; i < height; i++)
    {
        for (j = 0; j < width; j++)
            arr[i][j] = 0;
    }

    return (arr);
}

/* main - program entry point */
int main(void) 
{
    printf("%d", malloc_grid(int 6, int 4));
    return 0;
}

我可能做错了什么?

c grid malloc sizeof
2个回答
0
投票

调用函数时,无需声明参数类型。 printf("%d", malloc_grid(6,4));


0
投票

[在某些高级语言(如Python)中,您可以在print命令中抛出任何您喜欢的东西,它将尝试对此做出明智的选择。

C不是这些语言之一。您需要更精确。

首先int 6, int 4没有意义。您的编译器会告诉您这一点。如果您要输入这些数字,只需写6, 4

其次,%d是需要整数参数的格式说明符。但是,您正在传递一个指向整数的指针。同样,这没有任何意义。如果要打印整个数组,则必须分别打印每个元素。可能是这样的:

int main(void) 
{
    int i, j, **grid;
    grid = malloc_grid(6,4);
    if (grid == NULL) {
        printf("Memory allocation error\n");
        return 1;
    }
    for (j=0; j<4; j++) {
        for (i=0; i<6; i++) {
            printf("%3d ", grid[j][i]);
        }
        printf("\n");
    }
    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.