C - Инициализация структур внутри 2D-массива перед возвратом двойного указателя из функции - PullRequest
0 голосов
/ 23 ноября 2018

Я новичок в программировании на C и хочу сосредоточиться на изучении динамического распределения.В качестве возможности обучения я пытаюсь создать функцию, которая возвращает двойной указатель для двумерного массива структур.Я ссылаюсь на учебные пособия, которые обычно ссылаются на то, что упоминается здесь, в подходе № 3 .

. Я вижу, что учебник назначает целочисленные значения без проблем, но я не уверен, какэто переводится со структурами.

Вот мой код:

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

const int HEIGHT    = 64;
const int WIDTH     = 96;

struct Tile
{
    char type;
    bool armed;
    struct Tile* up;
    struct Tile* right;
    struct Tile* down;
    struct Tile* left;
};

struct Tile** createTileMap(unsigned int w, unsigned int h)
{
    struct Tile** map = (struct Tile **)malloc(w * sizeof(struct Tile *));

    for (int x = 0; x < w; x++)
    {
        map[x] = (struct Tile *)malloc(h * sizeof(struct Tile));
        for (int y = 0; y < h; y++)
        {
            map[x][y] = (struct Tile){.type = '_', .armed = false, .up = NULL,
            .right = NULL, .down = NULL, .left = NULL};
        }
    }
}

int main(int argc, char* argv[])
{
    struct Tile** map = createTileMap(WIDTH, HEIGHT);
    for (int x = 0; x < WIDTH; x++)
    {
        for (int y = 0; y < HEIGHT; y++)
        {
            printf("    (%d, %d): ", x, y);
            printf("%c", map[x][y].type);
        }
        printf("\n");
    }
    return 0;
}

Этот код имеет ошибки, и я не слишком уверен, почему.Любая помощь приветствуется.

1 Ответ

0 голосов
/ 23 ноября 2018

Как указано EOF , я просто забыл на самом деле вернуть адрес .К счастью, мой другой код был в порядке!

...