ゲームのテストプレイ時に突然ゲームが強制終了されることがまれにあり、原因を調べています。
タイミングはやや長めの処理を行ったフレームで、出力のタブに
X://windows/Runner.exe exited with non-zero status (-1073741819)
と表示されます。
毎回確定で起こるというわけでもなく、強制終了した時と同じ状況を再現しても起こったり起こらなかったりします(体感では50回に1度ぐらいの確率)。
メモリリークを疑ってみましたが、デバッグビルドで見る限りメモリ使用量はほとんど変わりませんでした。
構文エラーやコンパイルエラーのタブにはそれらしいエラーは表示されず、何が原因で強制終了してしまうのかわからず困っています。
何が起こっているのかを教えていただければ幸いです。
8894e813cb
サクレ
通報 ...
Forumを調べたところこの問題はメモリリークやバッファオーバーフローが関連しているらしいです。
それが発生する部分どんな処理をしているか調べる必要がありそうです。
大きなファイルの読み書き、
非常に長い文字列の処理、
巨大な配列の処理、
オーバーフローを引き起こすループ処理、
サーフェイスの無限作成、などなど、
原始的な調べ方ですが、問題が出なくなるまで1つ1つコメントアウトしていき、原因箇所を突き止めるというもの。
https://forum.yoyogames.com/index.php?threads/x-windows-runner-exe-exited-with-non-zero-status-1073741819.53631/
しかし、たまにしか起こらないというのが曲者ですね。
上で挙げたような処理をしている部分に心当たりはあるでしょうか。
・構造体を作ってる処理
・roomのpersistent
これらも、メモリリーク、バッファオーバーフローの要因になり得るようです。
もし原因箇所が絞り込めたら、わざとメモリリークを起こさせてできれば毎回再現するようにして、
を試してみてください(再現性を確かめるためです。無効にするのは非推奨です)。
GMS2.3になってからガーベージコレクションがうまくいってないのかもしれません。
(GBに起因する他の不具合が修正されたばかりですし)
Forumの参考スレッド
https://forum.yoyogames.com/index.php?threads/persistence-problem-i-think.78177/
2次元配列を何度も使うスクリプトが原因だとみていたのですが、デバッガで確認してみたところ、スクリプトに使用される2次元配列の一部分がそっくり消えていました。
配列の要素数を削るような処理は書いてないはずなので、バッファオーバーフローの影響なのでしょうか。
(配列の要素が無いのが原因ならば普通にエラーメッセージが出てくる気もするのですが…)
仮に原因が特定できても本当にたまーにしかでない現象なので、検証は骨が折れそうです…。
すみません、この配列の一部分が消える現象はRunner.exe exited with non-zero statusの件とは別のエラーみたいです。