vs2013C语言问题 debug出现debug assertion failed怎么解决?

刚学没几天,指针什么的都还不怎么会用,然后写了个小游戏,里面用到指针来的,运行也成功了,但是debug里的那个exe文件打开不了,会出现debug assertion failed.我觉得应该是我代码写的有问题?指针没有用好?
#include
#include
void read_board(int board[7][8]){
FILE*fptr;
int i, j;
fptr = fopen("map.txt", "r");
if (fptr == NULL){
printf("error");
}
for (i = 0; i < 7; i++){
for (j = 0; j < 8; j++){
fscanf(fptr, "%d", &board[i][j]);
}
}
fclose(fptr);
}
void print_board(int board[7][8], int B[7][8]) {
int i, j;
printf(" 0 1 2 3 4 5 6 7\n");
for (i = 0; i < 7; i++){
printf("%d ", i);
for (j = 0; j < 8; j++){
if (B[i][j] == 1){
if (board[i][j] == 0)
printf("a ");
if (board[i][j] == 1)
printf("b ");
if (board[i][j] == 2)
printf("c ");
}
else if (B[i][j] == 0)
printf(". ");
}
printf("\n");
}
printf("\n");
}
int ask_for_command(void){
int command;
scanf("%d", &command);
while (command != 1 && command != 2) {
printf("Command should be 1 or 2. Try again.\n");
scanf("%d", &command);
}
return command;
}
void select_cell(int board[7][8], int B[7][8], int *r, int *c){
printf("Row [0-6]?\n");
scanf("%d", &*r);
while (*r < 0 || *r>6){
printf("Invalid row input. Try again.\n");
printf("Row [0-6]?\n");
scanf("%d", &*r);
}
printf("Column [0-7]?\n");
scanf("%d", &*c);
while (*c < 0 || *c>7){
printf("Invalid column input. Try again.\n");
printf("Column [0-7]?\n");
scanf("%d", &*c);
}
while (B[*r][*c] == 0){
printf("Invalid location: (%d,%d) is empty. Try again.\n", *r, *c);
select_cell(board, B, r, c);
}
int judge;
judge = 0;
if (*r != 0)
if (board[*r - 1][*c] == board[*r][*c] && B[*r][*c] == 1)
judge = 1;
if (*r != 6)
if (board[*r + 1][*c] == board[*r][*c] && B[*r][*c] == 1)
judge = 1;
if (*c != 0)
if (board[*r][*c] == board[*r][*c - 1] && B[*r][*c] == 1)
judge = 1;
if (*c != 7)
if (board[*r][*c] == board[*r][*c + 1] && B[*r][*c] == 1)
judge = 1;
if (judge == 0)
B[*r][*c] = -1;
while (B[*r][*c] == -1){
printf("Invalid location: (%d,%d) has no neighbor. Try again.\n", *r, *c);
select_cell(board, B, r, c);
}
}
void cell_removal(int board[][8], int B[][8], int x, int y) {
if (x >= 1){
if (board[x][y] == board[x - 1][y] && B[x - 1][y] == 1){
B[x - 1][y] = 0;
cell_removal(board, B, x - 1, y);
}
}
if (x <= 5){
if (board[x][y] == board[x + 1][y] && B[x + 1][y] == 1){
B[x + 1][y] = 0;
cell_removal(board, B, x + 1, y);
}
}
if (y >= 1){
if (board[x][y] == board[x][y - 1] && B[x][y - 1] == 1){
B[x][y - 1] = 0;
cell_removal(board, B, x, y - 1);
}
}
if (y <= 6){
if (board[x][y] == board[x][y + 1] && B[x][y + 1] == 1){
B[x][y + 1] = 0;
cell_removal(board, B, x, y + 1);
}
}
return;
}

void pull_down(int board[7][8], int B[7][8]){
int i, j, d;
for (j = 0; j < 8; j++){
d = 6;
for (i = 6; i >= 0; i--)
{

        if (board[i][j] == 0 && B[i][j] == 1){
            board[d][j] = board[i][j];
            B[d][j] = 1;
            d--;
        }
        if (board[i][j] == 1 && B[i][j] == 1)
        {
            board[d][j] = board[i][j];
            B[d][j] = 1;
            d--;
        }
        if (board[i][j] == 2 && B[i][j] == 1)
        {
            board[d][j] = board[i][j];
            B[d][j] = 1;
            d--;
        }
    }
    for (i = 0; i <= d; i++){
        B[i][j] = 0;
    }
}

}

void pull_left(int board[7][8], int B[7][8]){
int i, j, judge[8];
for (j = 0; j < 8; j++){
judge[j] = 1;
}
for (j = 0; j < 8; j++){
int a = 0;
for (i = 0; i < 7; i++){
if (B[i][j] == 1)
a = 1;
}
if (a == 1)
judge[j] = 1;
else if (a == 0)
judge[j] = 0;
}//to mark those empty columns
int d = 0;
for (j = 0; j < 8; j++){
if (judge[j] == 1){
for (i = 0; i < 7; i++){
board[i][d] = board[i][j];
B[i][d] = B[i][j];
}
d++;
}
}
for (j = d; j < 8; j++){
for (i = 0; i < 7; i++){
B[i][j] = 0;
}
}
}

int gameover(int board[7][8], int B[7][8]){
int mark = 0, i, j, A[56], r, c, end;
for (i = 0; i < 56; i++){
A[i] = 0;
}
for (i = 0; i < 7; i++){
for (j = 0; j < 8; j++){
if (B[i][j] != 0){
mark = 1;
A[8*i+j] = 1;
}
}
}
if (mark == 0)
end = 0;
else if (mark == 1){
int judge = 0;
for (i = 0; i < 56; i++){
if (A[i] == 1)
{
r = i / 8; c = i % 8;
if (r != 0)
if (board[r - 1][c] == board[r][c] && B[r-1][c] == 1)
judge = 1;
if (r != 6)
if (board[r + 1][c] == board[r][c] && B[r+1][c] == 1)
judge = 1;
if (c != 0)
if (board[r][c] == board[r][c - 1] && B[r][c-1] == 1)
judge = 1;
if (c != 7)
if (board[r][c] == board[r][c + 1] && B[r][c+1] == 1)
judge = 1;
}
}
if (judge == 0)
end = 1;
}
return end;
}

int main(void){
int board[7][8], B[7][8], i, j, end;
int command = -1;
for (i = 0; i < 7; i++){
for (j = 0; j < 8; j++)
B[i][j] = 1;
}//set all B elements as 1 (not empty)
read_board(board);
while (1) {
print_board(board, B);
printf("1. Play / 2. Quit [1-2]?\n");
command = ask_for_command();
if (command == 2)
break;//the program ends
if (command == 1){
int r, c;
int *row = &r, *col = &c;
select_cell(board, B, row, col);
B[r][c] = 0;
cell_removal(board, B, r, c);
pull_down(board, B);
pull_left(board, B);
end=gameover(board,B);
if (end == 0){
printf("You win\n");
break;
}
if (end == 1){
printf("You lose\n");
break;
}
}
}
return 0;
}

我尝试了一下你可以用GCC去运行,好像是正确的。我没有VC2013编译器,用VC6.0出现和你同样的错误,你按下面方法看看:"Project"->"setting"->"点击c/c++"->"Category选项中选择Preprocessor"->"在Undefined symbols:填写_DEBUG" 重新编译运行。