##C言語でデバッグをしたらエラーが出ました。
何が書いてあるかよく理解できないので、解説していただけませんか?
ちなみにオセロを作っていました。
エラー文
Debug Asserition Failed!! (省略) Expressin: result_pointer != nullptr For information on how your program can cause an assertion failure, see the visual C++documentation on asserts. (Press retry to debug the application)
該当のソースコード
C言語
1#include < stdio.h > 2#include < stdlib.h > 3#include < time.h > 4 5 6#define BOARDSIZE 8 7 8#define NONE 0 9#define BLACK 1 10#define WHITE 2 11char board[BOARDSIZE][BOARDSIZE]; 12int vec_y[] = { -1,-1,0,1,1,1,0,-1 }; 13int vec_x[] = { 0,1,1,1,0,-1,-1,-1 }; 14 15void setBoard(void) 16{ 17 int i; 18 19 for (i = 0; i < BOARDSIZE * BOARDSIZE; ++i) { 20 board[i / BOARDSIZE][i % BOARDSIZE] = NONE; 21 } 22 board[BOARDSIZE / 2 - 1][BOARDSIZE / 2] = BLACK; 23 board[BOARDSIZE / 2][BOARDSIZE / 2 - 1] = BLACK; 24 board[BOARDSIZE / 2][BOARDSIZE / 2] = WHITE; 25 board[BOARDSIZE / 2 - 1][BOARDSIZE / 2 - 1] = WHITE; 26 27} 28void disp(void) { 29 int i, j; 30 printf(" "); 31 for (i = 0; i < BOARDSIZE; ++i) printf("%2d", i + 1); 32 printf("\n"); 33 34 for (i = 0; i < BOARDSIZE; ++i) { 35 printf("%d", (i + 1) * 10); 36 for (j = 0; j < BOARDSIZE; ++j) { 37 switch (board[i][j]) { 38 case NONE: 39 printf("・"); 40 break; 41 case BLACK: 42 printf("○"); 43 break; 44 case WHITE: 45 printf("●"); 46 break; 47 default: 48 printf("er"); 49 break; 50 } 51 } 52 printf("\n"); 53 } 54 55} 56int checkFlip(int y, int x, int turn, int vec) 57{ 58 int flag = 0; 59 while (1) { 60 y += vec_y[vec]; 61 x += vec_x[vec]; 62 if (x < 0 || y < 0 || x > BOARDSIZE - 1 || y > BOARDSIZE - 1) return 0; 63 64 if (board[y][x] == NONE) return 0; 65 66 67 if (board[y][x] == (turn ? BLACK : WHITE)) { 68 flag = 1; 69 continue; 70 } 71 if (flag == 1) break; 72 return 0; 73 } 74 return 1; 75} 76 77int check(int y, int x, int turn) 78{ 79 int vec; 80 81 for (vec = 0; vec < 8; ++vec) { 82 if (checkFlip(y, x, turn, vec) == 1) return 1; 83 } 84 85 return 0; 86} 87 88 89void flip(int y, int x, int turn, int vec) { 90 while (1) { 91 y += vec_y[vec]; 92 x += vec_x[vec]; 93 94 95 if (board[y][x] == (turn ? WHITE : BLACK)) break; 96 board[y][x] = (turn ? WHITE : BLACK); 97 } 98} 99 100int put(int y, int x, int turn) { 101 int vec, flag = 0; 102 if (board[y][x] != NONE) return 0; 103 for (vec = 0; vec < 8; ++vec) { 104 if (checkFlip(y, x, turn, vec) == 1) { 105 flip(y, x, turn, vec); 106 flag = 1; 107 } 108 } 109 if (flag == 1) { 110 board[y][x] = (turn ? WHITE : BLACK); 111 return 1; 112 } 113 114 return 0; 115} 116void input(int turn) 117{ 118 int place = 0, y, x; 119 while (1) { 120 121 printf(">"); 122 if (scanf_s("%d", &place) == 0) { 123 124 scanf_s("%*[^\n]%*c"); 125 printf("input error\n"); 126 continue; 127 } 128 129 130 if (place < 11 || place > 88) { 131 printf("input[%d]:error\n", place); 132 place = 0; 133 continue; 134 } 135 y = place / 10; 136 x = place % 10; 137 138 139 if (x < 1 || y < 1 || x > 8 || y > 8) { 140 printf("input[%d]:error\n", place); 141 place = 0; 142 continue; 143 } 144 145 if (put(y - 1, x - 1, turn) == 1) break; 146 else printf("input[%d]:can't flip\n", place); 147 place = 0; 148 } 149} 150 151 152void ai_rand(int turn) 153{ 154 int place = 0, y, x; 155 while (1) { 156 157 place = rand() % 89; 158 159 160 if (place < 11 || place > 88) { 161 place = 0; 162 continue; 163 } 164 y = place / 10; 165 x = place % 10; 166 167 168 if (x < 1 || y < 1 || x > 8 || y > 8) { 169 place = 0; 170 continue; 171 } 172 173 if (put(y - 1, x - 1, turn) == 1) { 174 printf(">%d\n", place); 175 break; 176 } 177 place = 0; 178 } 179} 180 181 182 183int checkEnd(int turn) 184{ 185 int i, j; 186 187 for (i = 0; i < BOARDSIZE; ++i) { 188 for (j = 0; j < BOARDSIZE; ++j) { 189 190 if (board[i][j] == NONE && check(i, j, turn) == 1) return 0; 191 } 192 } 193 194 turn = (turn + 1) % 2; 195 for (i = 0; i < BOARDSIZE; ++i) { 196 for (j = 0; j < BOARDSIZE; ++j) { 197 198 if (board[i][j] == NONE && check(i, j, turn) == 1) return 1; 199 } 200 } 201 202 return 2; 203} 204void checkWinner() { 205 int i, j, b = 0, w = 0; 206 207 208 209 210 for (i = 0; i < BOARDSIZE; ++i) { 211 for (j = 0; j < BOARDSIZE; ++j) { 212 switch (board[i][j]) { 213 case BLACK: 214 ++b; 215 break; 216 case WHITE: 217 ++w; 218 break; 219 default: 220 break; 221 } 222 } 223 } 224 225 226 disp(); 227 228 229 if (b > w) printf("○:Winner BLACK!\n"); 230 else if (b < w) printf("●:Winner WHITE!\n"); 231 else printf("Drawn game."); 232 233 234} 235int be() { 236 int* a = 0; 237 int* b = 0; 238 int c = 0; 239 printf(" オセロ\n"); 240 printf("ゲームを始める 1\n留まる 2\n"); 241 scanf_s(" %d", b); 242 if ("b == 1") { 243 244 } 245 else if ("b == 2") { 246 printf("また遊んでね~~"); 247 } 248 else { 249 printf("また遊んでね~_~"); 250 251 } 252 if ("b == 1") { 253 254 } 255 if ("b == 1") { 256 int turn = 0; 257 setBoard(); 258 srand(time(NULL)); 259 260 261 while (turn < 2) { 262 263 if (turn == 0) printf("turn:○\n"); 264 else printf("turn:●\n"); 265 266 267 disp(); 268 269 270 switch (turn) { 271 case 0: 272 input(turn); 273 break; 274 case 1: 275 ai_rand(turn); 276 break; 277 default: 278 printf("error\n"); 279 return -1; 280 } 281 282 283 turn = (turn + 1) % 2; 284 switch (checkEnd(turn)) { 285 case 1: 286 printf("pass\n"); 287 turn = (turn + 1) % 2; 288 break; 289 case 2: 290 printf("game end\n"); 291 turn = 2; 292 break; 293 default: 294 break; 295 } 296 297 } 298 checkWinner(); 299 } 300} 301 302int main() { 303 be(); 304 int* a = 0; 305 306 307 308 printf("\nゲームを終わるなら0を入力してね\n終わらないなら0以外を入力してね!"); 309 scanf_s(" %d", a); 310 if (a == 0) { 311 ; 312 } 313 else if (a != 0) { 314 be(); 315 } 316 317 return 0; 318 319}
(僕は馬鹿なのでたまにprintfの文字出力でふざけていることがあります。あとこれはあるサイトを参考にしたものです。)
エラーの写真
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/08 03:02 編集
2020/03/08 03:24
2020/03/08 03:33
2020/03/08 04:35
2020/03/08 07:38