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 springboot 3.0 实现Security 6.x版本集成
  • ¥15 PHP-8.1 镜像无法用dockerfile里的CMD命令启动 只能进入容器启动,如何解决?(操作系统-ubuntu)
  • ¥15 请帮我解决一下下面六个代码
  • ¥15 关于资源监视工具的e-care有知道的嘛
  • ¥35 MIMO天线稀疏阵列排布问题
  • ¥60 用visual studio编写程序,利用间接平差求解水准网
  • ¥15 Llama如何调用shell或者Python
  • ¥20 谁能帮我挨个解读这个php语言编的代码什么意思?
  • ¥15 win10权限管理,限制普通用户使用删除功能
  • ¥15 minnio内存占用过大,内存没被回收(Windows环境)