为什么加上memset初始化编译可以通过但是不能输入数据就结束le

#include<stdio.h>
#include<string.h>
#define max_n 100000
#define max_a 10000
int coo[max_a + 5][4];
int num[max_n + 5][max_n + 5];
int main() {
    int x, y;
    memset(coo, 0, sizeof(coo));
    memset(num, 0, sizeof(num));
    int n;
    scanf("%d", &n);
    for(int i = 1; i <= n; i++) {
        for(int j = 0; j < 4; j++) {
            scanf("%d", &coo[i][j]);
        }
    }
    scanf("%d%d", &x, &y);
    for(int i = 1; i <= n; i++) {
        for(int j = coo[i][0]; j <= coo[i][0] + coo[i][2]; j++) {
            for(int k = coo[i][1]; k <= coo[i][1] + coo[i][3]; k++) {
                num[j][k] = i;
            }
        }
    }
    if(num[x][y] == 0) {
        printf("-1");
    }else{
        printf("%d", num[x][y]);
    }
}

为什么加上memset初始化编译可以通过但是不能输入数据就结束le

你使用的全局数组占用的内存太大了,
#define max_n 100000
#define max_a 10000

这两个宏定义小一点

调试方式运行程序,检查下你的数组是否越界。n的输入值不能超过max_a + 4

个人认为数组太大了,内存不够。你可以了解一下虚拟内存。你定义的数组其实系统没有真正给你分配那么大内存,只有在用到时才会分配。
没有memset时实际占用的内存很小,可以正常运行。有memset时你把整个定义的内存都初始化,等于你用了定义的所有内存,造成内存不够。
如果你在Windows下面调试的,你不要用鼠标直接打开,你在cmd命令行里面运行就会看到有异常提示

#define max_n 100000
#define max_a 10000

宏定义太大了,你的编译器没有报错而已
memset(num, 0, sizeof(num));
sizeof(num) = 100005*10005*4;
执行这个的时候太大越界了,你程序是崩了跳出来,所以没有输入;

而你删除memset;是没有对sizeof(num)操作,所以程序运行到输入也没问题。