惠安雪乃 2022-07-16 00:01 采纳率: 60%
浏览 31

C语言数组赋值错误问题

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

在做一道算法题时遇到的

问题相关代码,请勿粘贴截图
#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,但现在结果错误,找不到原因

我想要达到的结果

猜测可能是什么溢出造成的,求指点

  • 写回答

2条回答 默认 最新

  • 偷窃月亮的贼 2022-07-16 00:19
    关注

    这里:

    
    #define x 2<<30-1
    ......
    static int N[x] = { 0 };
    

    数组太大,数组的总大小不得超过 0x7fffffff 字节,可以查看文档:编译器错误 C2148 | Microsoft Docs

    评论

报告相同问题?

问题事件

  • 创建了问题 7月16日

悬赏问题

  • ¥15 51单片机读写24C02
  • ¥50 grlb复位怎么能够不回调?也不卡在home状态?
  • ¥15 win系统下做一个开机自动最大化运行某应用程序的执行文件
  • ¥15 grlb复位,设置设置返回行程为0,卡在home状态,怎么解决?
  • ¥100 CubeIDE更换芯片以及调整代码
  • ¥50 有没有可以远程指导问题
  • ¥15 origin柱状图,分组如何分
  • ¥15 两个不同IP互通的配置命令
  • ¥15 office弹窗激活问题
  • ¥15 明阳风电1.5s,风机重启后报出振动开关触发,无法复位求解。