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

C code keeps flashing errors, wondering if I might get a hand here?

我正在学习 C,我认为我正在坠入爱河,但我新发现的爱在这个简单的(假定的)代码中吓坏了我。我只是想打印一个由整数填充的二维网格。不管我做了什么改变,它总是给出相同的 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;
}

我可能做错了什么?

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

在像 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;
}