Полагаю, вы хотели сказать if (new_rear == 0)
, а не if (new_rear = 0)
? Ваш компилятор должен был дать вам предупреждение.
РЕДАКТИРОВАТЬ: В случае, если вам интересно, почему это происходит сбой - ну, вы присваиваете 0 указателям, что также приводит к тому, что условия оцениваются как ноль, так что вы попадаете в блок else с «тылом», который только что был назначен 0, так что «вы-> следующий» в конечном итоге записывает в 0x10.
Кстати, именно поэтому я всегда компилирую с самым высоким уровнем предупреждений, а предупреждения рассматриваются как ошибки. Предупреждения твои друзья.