Closed NasubiKT closed 7 months ago
確認しました。最新版でも、DS$() を使っているわけでもないのに、150~140までの間で止まってしまいますね。 調べてみます。
原因が判明。IF文は関係なく、210 DIM DS$(IO) でも暴走します。 HEAP の FREE 処理の中で、まだ DIMされていない DS$() の変数領域を参照し、0x0000 が格納されているのに、それをポインタと見なし、値の再配置を実施しようとするのが原因。C3F3 あたりを破壊するので、状況によって暴走の仕方は異なります。
0x0000 チェックを追加して対応しました。
最新版のmsx_bacon.exeとBACONLDR.BINをダウンロードして確認しました。
サンプルコードを実行してみたところ、暴走しました。
多量の文字列が表示され、最終的にString too long
エラーが表示されました。
150行目のREAD文が、200行目の"Start SUB Routine"
を読み込んでいるように見えます。
昨日は、確かにめちゃくちゃな文字列が表示されるのを確認できたのですが、 ISSUE#7 の対応を終えて、改めて試してみると、問題が再現しなくなってしまいました。
今回の修正は、累乗部分しか弄っておらず、このサンプルコードは累乗を使っていないので、不可解です。 少し保留とさせて下さい。
最新版で確認したところ、たしかにエラーを再現できませんでした。 ISSUEを発行しておいて大変恐縮ですが、CLOSEとするかはHRA!さんのご判断にお任せいたします。
VisualStudio のデバッグモードで確認して終わって、リリースビルドをやり忘れていた可能性もありますので、 再現しない、ということから一旦 close にしようと思います。 また同様の現象が再現しましたら、また新たな ISSUE で挙げていただいてOKです。
下記サンプルコードをコンパイルし実行すると、150行目を実行した直後に暴走します。 210行目をコメントアウトすると、正常に終了します。 サンプルコードでは210行目が実行されることはありませんが、コメントアウトしないと暴走します。 msx_bacon.exeは、2024年01月13日15:00頃にダウンロードしたバージョンで確認しました。