コードの構造が自分でもわかり難かったので、フルスクラッチで書き直しました。
https://ideone.com/ddQPJy

でも相変わらずどこかにゴミデータが入り込んでいるようです。
C言語特有の問題に由来していると思うのですが。。