在做一道算法题时遇到的
#include<stdio.h>
#include<math.h>
#define x 2<<30-1
int main(void)
{
static int N[x] = {0};
int n=5; //矩形个数
int x1, x2, h;
int i, j;
int k;
int max = 0;
for(i=0; i<n; i++)
{
scanf("%d %d %d", &x1, &x2, &h);
for(j=x1; j<=x2; j++)
{
if(h>N[j])
{
N[j] = h;
}
}
if(x2 > max)
{
max = x2;
}
for(k=0; k<=max; k++)
{
printf("%d : %d\n", k, N[k]);
}
}
}
2 10 5
0 : 0
1 : 0
2 : 5
3 : 5
4 : 5
5 : 5
6 : 5
7 : 5
8 : 5
9 : 5
10 : 6487024
5 15 10
0 : 0
1 : 0
2 : 5
3 : 5
4 : 5
5 : 10
6 : 10
7 : 10
8 : 10
9 : 10
10 : 6487024
11 : 10
12 : 10
13 : 10
14 : 10
15 : 10
这段代码看似没问题,但运行时会出现赋值错误,报错里的第10项,本来应该为5或者10,但现在结果错误,找不到原因
猜测可能是什么溢出造成的,求指点
这里:
#define x 2<<30-1
......
static int N[x] = { 0 };
数组太大,数组的总大小不得超过 0x7fffffff 字节,可以查看文档:编译器错误 C2148 | Microsoft Docs
代码没问题,我运行试了也没问题,但你这出现了异常确实很诡异,可以试试重启电脑。