m0_57117352 2022-10-28 18:13 采纳率: 81.3%
浏览 54
已结题

c++一运行就自动退出了

不知道为什么一运行就直接退出了


#include <iostream>
using namespace std;
int main()
{
    int n, m, k;
    int ans=0;
    cout << "输入行数、列数、最大值" << endl;
    cin >> n >> m >> k;
    int a[500][500],s[500][500];//定义一个n行m列的矩阵
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= m; j++)
        {
            cin >> a[i][j];
            s[i][j] = s[i - 1][j] + s[i][j - 1] + a[i][j] - a[i - 1][j - 1];
        }
    }
    for(int up=1;up<=n;up++)
        for(int bu=up;bu<=n;bu++)
            for(int left=1; left <=m; left++)
                for (int right = left; right <= m; right++)
                {
                    int sum = s[bu][right] - s[up - 1][right] - s[bu][left - 1] + s[up - 1][left - 1];
                    if (sum <= k)
                        ans++;

                }
    
    cout << ans << endl;

    return 0;
}

  • 写回答

3条回答 默认 最新

  • 关注

    (1)代码的问题
    在第一个双层for循环中,给s[i[j]赋值的时候,i=0的时候s[i - 1][j]是 s[0][j],是一个未初始化的值,s[i][j - 1]和a[i - 1][j - 1]也是同样的问题,如果你想把他们的默认值设为0 的话,在声明变量的时候,把数组初始化一下:
    int a[500][500]={0},s[500][500]={0};
    (2)缓存大小的问题(一运行就终止的问题根源应该是这个原因
    你的数组开的太大了,缓存不够用了。a和s数组一共占用内存大小:
    250000 * 4 * 2 = 2000000字节 ,约为 1953 K >1M,一般默认缓存是1M,你代码里申请的空间超出1M了。
    解决方法有两种,一是减小数组大小,比如int a[200][200];改成多大看你题目的要求
    二是,修改一下编译器的保留堆栈大小,如果你用的是Visual Studio 编译器,修改方法如下图所示:

    img

    我这里不修改这个数值的话也是一运行就终止了,修改后可以正常运行。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 11月12日
  • 已采纳回答 11月4日
  • 创建了问题 10月28日

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题