关于c语言越界问题,异常Run-Time Check Failure #2

问题遇到的现象和发生背景

想写一个三子棋

问题相关代码,请勿粘贴截图
#define _CRT_SECURE_NO_WARNINGS 1

#include "game.h"


//棋盘大小
//行
#define ROW 3
//列
#define COL 3




//游戏标题
void title()
{
    printf("******************************************************\n");
    printf("*******1.开始游戏     2.游戏说明     0.结束游戏*******\n");
    printf("******************************************************\n");
    return 0;
}

//游戏参数
void game()
{
    char size[ROW][COL] = { 0 };
    New(size);
    ini(size);
    play(size);





}
//棋盘初始化
void New(char size[ROW][COL])
{
    int i = 0;
    for (;i <=ROW; i++)
    {

        int j = 0;
        for (; j <=COL; j++)
        {
            size[i][j] = ' ';
        }

    
    }

}



//打印棋盘
void ini(char size[ROW][COL])
{
    int i = 0;
    for (i = 1; i <= ROW; i++)
    {
        
        int j = 0;
        for (j = 1; j <= COL; j++)
        {
            printf(" %c ",size[i][j]);
            if (j < COL)
                printf("|");
        }
        printf("\n");
        
        for (j = 1; j <= COL; j++)
        {
            if (i < ROW)
            {
                printf("---");
                if (j < COL)
                    printf("|");
            }
        }
        printf("\n");

    }

}




void play(char size[ROW][COL])
{
    playerGo(size);
    ini(size);
    //AIGo(size);
    //ini(size);
}

void playerGo(char size[ROW][COL])
{
    int x = 0;
    int y = 0;
    printf("玩家先手\n");
    while(1)
    {
        printf("请输入要落子的坐标:>");
        scanf("%d%d", &x, &y);
        if (x >=1 && x <= ROW && y >=1 && y <=COL)
        {
            if (size[x][y] == ' ')
            {
                size[x][y] = '*';
                break;
            }
            else
                printf("你不能在这里落子\n");
        }
        else
        {
            printf("地址非法,请重新输入\n");
        }
    }
}

运行结果及报错内容

已引发异常 Run-Time Check Failure #2 - Stack around the variable 'size' was corrupted.

我的解答思路和尝试过的方法

毫无头绪,估计是越界了但我不会解决

我想要达到的结果

希望能得到解决方案和分析

new函数中数组越界了。
for (;i <=ROW; i++)
改为
for (;i <ROW; i++)
同样列也是一样。
你从0开始,下标最大值只能到ROW-1,不能到ROW的