マインスイーパーの上級がうまくいきません。
Posted: 2013年9月25日(水) 18:44
この間の質問でウィンドウサイズを変更できるようになり、初級(マス:9×9 爆弾の数:10)だけでなく中級(マス:16×16 爆弾の数:40)もできました。
ですが、上級(マス:16×30 爆弾の数:99)がうまくいきません。
デバッグなしで開始してみてもなかなかウィンドウが出ず、デバッグ開始してどこで詰まっているのか調べてみることにしました。
すると、爆弾の配置部分に時間がかかっているようで、実行を一時停止させてみるとそのあたりで止まります。
そのまま実行させてみるとエラーが出ることもありましたが、今何度か試してみてもエラーにたどりつきません。
エラーの内容は
「マインスイーパー.exeの0x00f4c090でハンドルされていない例外が発生しました:0xC0000005:場所0xfdfdfdfdを読み込み中にアクセス違反が発生しました。」
で、矢印があった場所はマインスイーパーView.cppのOnDraw内で、マスがどういう状態かを判別するための部分です。
初めのうちはmallocの失敗も疑いましたが、失敗してNULLが返ってきていないかどうかをif文で調べてみても、NULLが返ってきた様子はありません。
あのエラーが出たときにdataについて調べてみたのですが、data[x]は「評価できません」みたいなことを言われたように思います。
エラーが出ていたころと出なくなったころとで何か書き換えたような覚えはないのですが、今はなぜかなにもウィンドウが出ないままずっと実行中だと思って一時停止してみると爆弾を配置しているあたりで一時停止し、そのまま実行させてみても状況は進展しません。
今は爆弾配置部分に時間がかかっているようで全然うまくいきませんが、パソコンを再起動した直後は1度だけうまくいったこともありました。
ということはメモリが関係しているのでしょうか?
ガジェットのCPUメーターのRAMの部分を見ても50%以下(だいたい40%台)で、再起動する前も似たような値でした。
タスクマネージャーでプロセスを見てみると、メモリは828Kでしたが、CPUが25と重いように思いました。
(ネトゲで重いなーと思ってプロセスを見てみるとその値が出ていたりしました。)
16×30=480マスのどこかに合計99個の爆弾を配置するのって時間のかかることなのでしょうか?
また、あのようなエラーが出た原因は何なのでしょうか?
ですが、上級(マス:16×30 爆弾の数:99)がうまくいきません。
デバッグなしで開始してみてもなかなかウィンドウが出ず、デバッグ開始してどこで詰まっているのか調べてみることにしました。
すると、爆弾の配置部分に時間がかかっているようで、実行を一時停止させてみるとそのあたりで止まります。
そのまま実行させてみるとエラーが出ることもありましたが、今何度か試してみてもエラーにたどりつきません。
エラーの内容は
「マインスイーパー.exeの0x00f4c090でハンドルされていない例外が発生しました:0xC0000005:場所0xfdfdfdfdを読み込み中にアクセス違反が発生しました。」
で、矢印があった場所はマインスイーパーView.cppのOnDraw内で、マスがどういう状態かを判別するための部分です。
//一部抜粋
for(int x=0;x<pDoc->blocks.x;x++){ //CPoint blocks
for(int y=0;y<pDoc->blocks.y;y++){
if(pDoc->data[x][y]<0){ //int** data ここでエラーが出たらしい
block_color.CreateSolidBrush(RGB(180,180,180)); //CBrush block_color
}
あのエラーが出たときにdataについて調べてみたのですが、data[x]は「評価できません」みたいなことを言われたように思います。
エラーが出ていたころと出なくなったころとで何か書き換えたような覚えはないのですが、今はなぜかなにもウィンドウが出ないままずっと実行中だと思って一時停止してみると爆弾を配置しているあたりで一時停止し、そのまま実行させてみても状況は進展しません。
今は爆弾配置部分に時間がかかっているようで全然うまくいきませんが、パソコンを再起動した直後は1度だけうまくいったこともありました。
ということはメモリが関係しているのでしょうか?
ガジェットのCPUメーターのRAMの部分を見ても50%以下(だいたい40%台)で、再起動する前も似たような値でした。
タスクマネージャーでプロセスを見てみると、メモリは828Kでしたが、CPUが25と重いように思いました。
(ネトゲで重いなーと思ってプロセスを見てみるとその値が出ていたりしました。)
16×30=480マスのどこかに合計99個の爆弾を配置するのって時間のかかることなのでしょうか?
また、あのようなエラーが出た原因は何なのでしょうか?