Невозможно объявить массив указателей на структуру внутри структуры в C
Я хочу иметь массив внутри структуры, которая будет хранить указатели одного и того же типа данных (т.е. struct map
). Я посмотрел на Stackru и нашел это:
struct map {
int city;
struct map **link = (struct map *)malloc(204800 * sizeof(struct map *));
}
Но я получаю эту ошибку:-
error: expected ':', ',', ';', '}' or '__attribute__' before '=' token
struct map **link = (struct map *)malloc(204800*sizeof(struct map *));
1 ответ
Это определение структуры, вы не можете использовать malloc или использовать какую-либо функцию внутри объявления, потому что объявление не выполняется, это просто своего рода шаблон того, как должна выглядеть структура типа 'map', таким образом, компилятор будет знать, сколько памяти должно быть выделено для структуры карты, когда мы создаем ее экземпляр.
когда вы хотите использовать члены внутри struct map (например, сделать ссылку на указатель на какой-то жизнеспособный сегмент памяти), вам нужно где-то создать экземпляр map, и только тогда вы сможете вызывать malloc и делать ссылку на результирующий сегмент памяти.
способ исправить это сначала объявить структуру следующим образом:
struct map{
int city;
struct map **link;
};
и когда вы создаете экземпляр структуры в main, вы можете выделить место для ссылки следующим образом:
int main()
{
struct map *temp = malloc(sizeof(struct map));
temp->link = malloc(204800*sizeof(struct map *));
return 0;
}