五目並べの五、四などの役を判定する関数を作っていたのですが、
一部を変更すると強制終了(エラー報告を送信する等のボタンが表示されるダイアログ)
を起こしてしまい、理由がわからず困っております。
ファイルを添付してみました。
DxLibは、ファイルサイズの都合で入りませんでした、ごめんなさい><
hantei関数の仕組みを大雑把に言うと、
・碁盤に置いている石の配置を右、下、右下、左下方向に調べ、
調べた方向を行とする二次元配列をそれぞれ作る
・行に含まれる石の並びを簡略化(0無し、1黒石、2白石)
ex)0,0,0,1,1,1,2,2,2,0,0,0・・・
簡略→3,13,23,3・・・といった感じに。
99はカベです。それ以降を調べないように。
・簡略化した数値を元に、三や五などの役を調べる。
という感じです。
ただ、stone_mainといった、黒手、白手にとっての「自分の石」というものを使っているので
少しややこしくなってしまいました><
変更前(正常動作だけど失敗)と変更後(強制終了)のソースを一部掲示してみます。
hantei関数、前半の部分にあります。構造体の初期化(?)を行う部分です。
変更前
for (i=0;i<15;i++) {
mode1.low_start[0] = i; // x
mode1.low_start[1] = 0; // y
mode2.low_start[0] = 0;
mode2.low_start[1] = i;
for (j=0;j<10;j++) {
if (i==0) {
mode3.low_start[j][0] = 10-j;
mode3.low_start[j][1] = 0;
mode4.low_start[j][0] = j+5;
mode4.low_start[j][1] = 0;
} else if ( (i>0) && (i<10) ) { // 二重に代入するのを防止
mode3.low_start[10+j][0] = 0;
mode3.low_start[10+j][1] = j;
mode4.low_start[j][0] = 15;
mode4.low_start[j][1] = j+5;
}
}
}
変更後
for (i=0;i<15;i++) {
mode1.low_start[0] = i; // x
mode1.low_start[1] = 0; // y
mode2.low_start[0] = 0;
mode2.low_start[1] = i;
}
for (i=0;i<11;i++) {
mode3.low_start[0] = 10-i;
mode3.low_start[1] = 0;
mode4.low_start[i][0] = i+5;
mode4.low_start[i][1] = 0;
}
for (i=0;i<10;i++) {
mode3.low_start[i+11][0] = 0;
mode3.low_start[i+11][1] = i;
mode4.low_start[i+11][0] = 14;
mode4.low_start[i+11][1] = i+5;
}いずれも細かい調整が出来ていませんが、><
そもそも強制終了してしまうのでは機能動作チェックが出来ないので困っております。
強制終了が解決できればよいのですが、
正常に機能動作するためにも、アドバイスがあれば是非お願いします。