typedef struct Node* Node;
Node node = malloc(sizeof(Node));
Это выделит sizeof(Node)
== sizeof(struct Node*)
байтов памяти.Таким образом, Node node
указывает не на sizeof(struct Node)
байтов памяти.В итоге вы получите доступ к памяти из-за ограничения / недействительности.
Чтобы исправить ваш код, разыменуйте указатель на узел структуры или неявно используйте узел структуры с sizeof:
Node node = malloc(sizeof(*node));
Node node = malloc(sizeof(struct Node));
Этотолько исправление.Это делает ваш код более запутанным, и вы только что обнаружили, почему скрытый указатель за typedef - плохая идея.Строка:
Node node = malloc(sizeof(*Node));
не будет работать, так как Node
называет тип, не может быть разыменована, как указано @Ctx в комментариях.
Лично я настоятельно рекомендуюПерепишите весь ваш код для использования:
typedef struct Node Node;
Node *node_create(int value, Node *nextNode) {
...
Node *node = malloc(sizeof(Node));
...
}
Теперь любой программист, сразу смотрящий на функцию node_create
, будет знать, что он возвращает указатель на некоторые данные, возможно, динамически размещенные.Является более читабельным и не скрывает назначение указателя.