Другие ответы уже указывали на проблему и как ее исправить. Мое предложение состоит в том, чтобы изменить функцию таким образом, чтобы ее использование было более естественным.
Вместо
void allocate_node (Foo ** f);
использования
Foo* allocate_node();
Затем вы можете использовать:
Foo* allocate_node()
{
return (Foo*)malloc(sizeof(Foo));
}
int main()
{
Foo* p = allocate_node();
p->x = 2;
p->y = 3;
free(p);
}
Я хотел бы пойти дальше и рекомендовать создание функции для освобождения в Foo*
быть последовательным с понятием, что каждое распределение должно иметь освобождение и функции для выделения и освобождения должны попадать парами. Кроме того, назовите функции allocate_foo
и deallocate_foo
, чтобы убедиться, что по мере роста вашей программы у вас есть возможность создавать другие функции allocate_xxx
и deallocate_xxx
для других объектов (спасибо @ gnasher729 за предложение).
Foo* allocate_foo()
{
return (Foo*)malloc(sizeof(Foo));
}
void deallocate_foo(Foo* node)
{
free(node);
}
int main()
{
Foo* p = allocate_foo();
p->x = 2;
p->y = 3;
deallocate_foo(p);
}
'* f = malloc (sizeof (Foo));' – mch
@mch Спасибо, исправлено. – AlexD