原因判明。しかし……

分かった。多分。
GCは無罪だった。


本当に原因がGCにあるのかどうかを切り分ける為に、GCを使わずに適当にループでmalloc()実行と、ボタンでswiSoftReset()を行うコードを用意した。
これを実機で試したところ、swiSoftReset()後にmalloc()が妙なタイミング(malloc()三回目〜八回目ぐらい?)でNULLを返す挙動を見せた。
つまり、swiSoftReset()がメモリに対して、何らかの悪影響を与えているようだ。
(自分はこれまでmalloc()を使わないようにコードを書いていたので、この事に気付かなかった。)
とは言え、妙なタイミングでmalloc()からNULLを返されるだけで暴走(?)してしまうGCの方も問題な気もするが。


とりあえず、swiSoftReset()にさわるのは、当分はやめとこう……。
何にせよ、これで先に進める。ひとまずは。