Ваша проблема не имеет ничего общего с тем, что в ней участвует union
.
Доступ к неинициализированным указателям дает вам случайное поведение. Иногда это работает, иногда нет. Для вашего первого доступа, возможно, что-то просто произошло в том месте, куда вы заходите.
Просто инициализируйте, а-ля C99:
Node n = { .type = 0 };
или
Node n = { 0 };
а-ля С89,
вместо вашего назначения выписка . Это имеет то преимущество, что инициализирует все компоненты, которые не упомянуты в 0, то есть ваши указатели. Тогда ваш тестовый код должен с удовольствием завершиться.