Nineteen拾玖 2021-12-02 21:04 采纳率: 100%
浏览 20
已结题

关于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.

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

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

我想要达到的结果

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

  • 写回答

1条回答 默认 最新

  • CSDN专家-link 2021-12-02 21:09
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 12月11日
  • 已采纳回答 12月3日
  • 创建了问题 12月2日

悬赏问题

  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本