前提・実現したいこと
vscodeにて、実行すると Bus error:10がなぜ表示されるのを知って、出ないようにしたい。
発生している問題・エラーメッセージ
Bus error:10
該当のソースコード
C
1for(;jdg_t_c[times]<first[times]+gl_del_count_c[times];jdg_t_c[times]++) 2 3for(;jdg_t_c[times]-first[times]<4;jdg_t_c[times]++) 4 5
c
1全体を載せると3000行を超えるので、問題の関数内のところにしています。 2int othello_AI(int n){ 3 4 static int jdg_t_c[10]={0};//for添字 5 static int first[10]={0};//for添字 6 static int times=0;//for添字 7 int count=0,counta=0, countb=0, countc=0, countd=0, counte=0, tmp;//for添字 tmpは並び替えの時に一時的に入れておくための変数。 8 static int k[10][100]={{0},{0}};//for添字 9 static int jdg_GUIDE_num[10][1000]={{0},{0}};//for 次の手のGUIDEの数 10 static int jdg_minmax_dual_num[10][1000]={{0},{0}};//for jdg_GUIDE_numの最大最小を入れておく。 11 int jdg_est_num[10][1000]={{0},{0}};//for 各timesでのjdg_minmax_numの組み合わせを入れる。 12 int jdg_total_dual_count[10]={0}; 13 static int jdg_minmax_num[10][100][1000]={{0},{0},{0}};//for 最小最大の被った数の保持する。 14 static int gl_del_count_c[10]={0};//for gl_del_countのコピー 15 static int gl__x_c[10][40],gl__y_c[10][40];//for gl__x,gl__yのコピー 16 static int jdg_count[10]={0};//for添字→ 関数の出入りの1かたまりの数をそれぞれ記録する。グループ分けとしての変数。 17 18 static int c1_mas[SIZE][SIZE]={ 19 {1,1,1,1,1,1,1,1,1,1}, 20 {1,0,0,0,0,0,0,0,0,1}, 21 {1,0,0,0,0,0,0,0,0,1}, 22 {1,0,0,0,0,0,0,0,0,1}, 23 {1,0,0,0,0,0,0,0,0,1}, 24 {1,0,0,0,0,0,0,0,0,1}, 25 {1,0,0,0,0,0,0,0,0,1}, 26 {1,0,0,0,0,0,0,0,0,1}, 27 {1,0,0,0,0,0,0,0,0,1}, 28 {1,1,1,1,1,1,1,1,1,1}, 29 }; 30 static int c2_mas[SIZE][SIZE]={ 31 {1,1,1,1,1,1,1,1,1,1}, 32 {1,0,0,0,0,0,0,0,0,1}, 33 {1,0,0,0,0,0,0,0,0,1}, 34 {1,0,0,0,0,0,0,0,0,1}, 35 {1,0,0,0,0,0,0,0,0,1}, 36 {1,0,0,0,0,0,0,0,0,1}, 37 {1,0,0,0,0,0,0,0,0,1}, 38 {1,0,0,0,0,0,0,0,0,1}, 39 {1,0,0,0,0,0,0,0,0,1}, 40 {1,1,1,1,1,1,1,1,1,1}, 41 }; 42 43 first[times]=jdg_t_c[times]; 44 45 //for mas[SIZE][SIZE]のコピー 46 othello_mas_c(c1_mas, c2_mas, times); 47 //gl_del_countにGUIDEの個数をコピーするため。times==0の時はすでにもう入っている。 48 switch(times){ 49 case 0: 50 break; 51 default: 52 del(); 53 break; 54 } 55 //for mas[SIZE][SIZE]にコピーし直す。 56 othello_mas_c_r(c1_mas, c2_mas, times); 57 //for gl_del_count_cにgl_del_countをコピー 58 othello_gl_del_count_c(gl_del_count_c, times); 59 //for gl__x[],gl__y[]の座標のコピー これを行うには事前にdel()を呼び、gl_del_countにGUIDEの個数を入れておかなければならない。 60 othello_gl__xy_c(gl__x_c, gl__y_c, times); 61 62 63 if(n%2==0){ 64 65 for(;jdg_t_c[times]-first[times]<gl_del_count_c[times];jdg_t_c[times]++){ 66 printf("&w"); 67 switch(mas[gl__y_c[times][k[times][jdg_count[times]]]][gl__x_c[times][k[times][jdg_count[times]]]]){ 68 case GUIDE: 69 printf("&w+"); 70 gl_x=gl__x_c[times][k[times][jdg_count[times]]]; 71 gl_y=gl__y_c[times][k[times][jdg_count[times]]]; 72 73 othello_gl_del_count_c_r(gl_del_count_c, times); 74 othello_gl__xy_c_r(gl__x_c, gl__y_c, times); 75 del(); 76 mas[gl__y_c[times][k[times][jdg_count[times]]]][gl__x_c[times][k[times][jdg_count[times]]]]=WHITE; 77 78 jdg_GUIDE_num[times][jdg_t_c[times]]=10000*jdg_t_c[times]+100*jdg_count[times]+put1(n+1); 79 80 if(times<2){ 81 times++; 82 othello_AI(n+1); 83 times--; 84 } 85 86 othello_mas_c_r(c1_mas, c2_mas, times); 87 88 break; 89 } 90 k[times][jdg_count[times]]++; 91 } 92 93 } 94 else{...
試したこと
どの配列もstatic int型で、定義の時点で、全てに0を格納しており、上記の場合も、条件を満たすように何かしらの整数が入っています。
1つ目のforの前に//を加えると、Bus errorは表示されなくなり、原因はここにあると判断しています。また、条件部分のgl_del_count_c[times]を消すと、Bus errorは表示されなくなります。しかし、別の方法で、2つ目のforように適当な整数4とした場合、Bus errorが表示されます。
補足情報(FW/ツールのバージョンなど)
vscode
エラー発生時のtimesの値を確認して下さい。
バスエラーが、このfor文で起きたことは確認できていますか? このfor()文がエラーの要因であるのは間違いないでしょうが、エラー自体は別の場所で起きている可能性があるのではないですか? for文は jdg_t_c[times] の値を増やしています。値が増えた後、jdg_t_c[times] の値を使う場所付近がエラーを起こしている可能性があると思います。
エラー発生時のtimesは0です。
gl_del_count_c[times]を消すと、バスエラーが出てこないからといって、主原因がgl_del_count_c[times]とは限らないんですね。。。調べてみます
static int jdg_t_c[10]={0}; static int times=0; static int gl_del_count_c[10]={0}、static int first[10]={0};としています。
そろそろ、そうした情報は質問に追記してください。jdg_t_c[times] の値を使う場所付近も示してもらえると良いです。

回答2件
あなたの回答
tips
プレビュー