Присвоение данных массиву с помощью фигурных скобок - PullRequest
6 голосов
/ 24 июля 2011

Почему на языке C не получается следующее выражение?

map = malloc(sizeof(Map) * tiles);
map = {
    0,2,0,0,0,0,0,0,2,0,
    0,1,0,0,0,0,0,0,1,0,
    0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,
    2,1,0,0,0,0,0,0,1,2,
    0,0,0,0,0,0,0,0,0,0
};

Я просто хочу заполнить данные в таком формате "строка / столбец" в массиве C. Тем не менее, компилятор не с

error: expected expression before ‘{’ token

(на карте = {строка). Заполнение массива другими способами работает нормально, и я уверен, что скобки работают для инициализации ... Я не могу сделать это после того, как я выделил память?

РЕДАКТИРОВАТЬ: я решил это путем создания временного массива char, а затем подачи данных на карту Malloced в цикле for. Еще. Я хотел бы знать, почему приведенный выше код будет пропускать память, как указано ниже. И не исправит ли мое исправление (анализ временного массива и установка с ним данных карты) утечку памяти?

1 Ответ

10 голосов
/ 24 июля 2011

Ваш Map * map; является указателем, а не массивом. Фигурные скобки предназначены для полной инициализации:

int x[3] = { 1, 2, 3 };

Указатели не являются массивами, и вы не можете заполнить память с помощью общего синтаксиса инициализации.

Вот ближайшая конструкция, которая будет работать:

typedef struct Map_ { int a; int b; } Map; // some struct

Map m[] = { {1,2}, {3,4}, {5,6} };  /* we initialized "Map m[3]",
                                       it has automatic storage! */

Обратите внимание, что каждый элемент списка скобок должен сам инициализировать базовый тип агрегата.

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