C код продолжает мигать ошибки, интересно, могу ли я получить здесь руку? - PullRequest
0 голосов
/ 05 марта 2020

Я учусь 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;
}

Что я могу делать не так?

Ответы [ 2 ]

3 голосов
/ 05 марта 2020

В некоторых языках высокого уровня, таких как 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;
}
0 голосов
/ 05 марта 2020

Вам не нужно объявлять тип аргументов при вызове функции. printf("%d", malloc_grid(6,4));

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...