这是栈溢出吗? 怎么就溢出来 把行和列换成3以上的数才行 求指点 一个三子棋的代码 (还未写完)

game.h//这是头文件

#define ROW 3
#define COL 3
#include<stdio.h>
void display_board(char board[ROW][COL], int row, int col);
void initboard(char board[ROW][COL], int row, int col);

game.c //里面有定义
#include"game.h"
void initboard(char board[ROW][COL], int row, int col)
{
    int i = 0;
    int j = 0;
    for (i = 0; i < row; i++)
    {

        for (j = 0; j < col; j++)
        {

            board[row][col] = ' '
        }

    }

}
void displayed_board(char board[ROW][COL], int row, int col)
{
    int a = 0;
    int b = 0;
    for (a = 0; a < row; a++)
    {
        for (b = 0; b < col; b++)
        {
            printf("  %c ", board[a][b]);
            if (b < col - 1)
                printf("|");
        }
        printf("\n");

        if (a < row - 1)
        {
            for (b = 0; b < col; b++)
            {
                printf("---");
                if (b < col - 1)
                    printf("|");

            }
            printf("\n");
        }
    }

}
test.c //测试
#include"game.h"
//#include"game.c"
void menu()
{
    printf("***************************************\n");
    printf("*****      1.PLAY     0.EXIT       ****\n");
    printf("***************************************\n");
}
void game()
{
    char board[ROW][COL] = { 0 };
    initboard(board, ROW, COL);
    displayed_board(board, ROW, COL);



}


int main()
{
    menu();
    int input = 0;
    scanf_s("%d", &input);
    do
    {
        switch (input)
        {
        case 1:
            printf("三子棋=>\n");
            game();
            break;
        case 2:
            printf("输入错误!\n");
            break;
        default:
            break;
        }

    } while (0);



    return 0;
}
#include"game.h"
//#include"game.c"
void menu()
{
    printf("***************************************\n");
    printf("*****      1.PLAY     0.EXIT       ****\n");
    printf("***************************************\n");
}
void game()
{
    char board[ROW][COL] = { 0 };
    initboard(board, ROW, COL);
    displayed_board(board, ROW, COL);



}


int main()
{
    menu();
    int input = 0;
    scanf_s("%d", &input);
    do
    {
        switch (input)
        {
        case 1:
            printf("三子棋=>\n");
            game();
            break;
        case 2:
            printf("输入错误!\n");
            break;
        default:
            break;
        }

    } while (0);



    return 0;
}
#include"game.h"
//#include"game.c"
void menu()
{
    printf("***************************************\n");
    printf("*****      1.PLAY     0.EXIT       ****\n");
    printf("***************************************\n");
}
void game()
{****
    char board[ROW][COL] = { 0 };
    initboard(board, ROW, COL);
    displayed_board(board, ROW, COL);



}//这里显示错误   Run-Time Check Failure #2 - Stack around the variable 'board' was corrupted.


int main()
{
    menu();
    int input = 0;
    scanf_s("%d", &input);
    do
    {
        switch (input)
        {
        case 1:
            printf("三子棋=>\n");
            game();
            break;
        case 2:
            printf("输入错误!\n");
            break;
        default:
            break;
        }

    } while (0);



    return 0;
}

#include"game.h"

void menu()
{
    printf("***************************************\n");
    printf("*****      1.PLAY     0.EXIT       ****\n");
    printf("***************************************\n");
}
void game()
{
    char board[ROW][COL] = { 0 };
    initboard(board, ROW, COL);
    displayed_board(board, ROW, COL);



}


int main()
{
    menu();
    int input = 0;
    scanf_s("%d", &input);
    do
    {
        switch (input)
        {
        case 1:
            printf("三子棋=>\n");
            game();
            break;
        case 2:
            printf("输入错误!\n");
            break;
        default:
            break;
        }

    } while (0);



    return 0;
}



如果是3以下的数的话不数组不就越界了嘛,三子棋嘛,行列都为3啊,数组下标是从0开始的,你那个for循环用的又是<,3的话不就正好执行3次吗?