每次我为我的c++程序提供大量输入集时,我的DOS都会崩溃

My DOS crashes everytime I gave large input set for my C++ program

本文关键字:我的 输入 DOS 崩溃 c++ 程序      更新时间:2023-10-16

我用c++写了一段代码,并尝试使用MinGW和TDMGCC编译器进行编译。它可以很好地编译。但是,当我试图使用这些编译器生成的。exe文件时,问题发生了,我给我的程序一个大的输入集,我的dos停止工作,并说windows已经停止工作。点击OK后,它终止了我的执行。我怎样才能修好它呢?这是我的代码

#include<iostream>
#include<fstream>
using namespace std;
int main()
{
    int t,n,k,c,x,w;
    ofstream myfile;
    myfile.open ("example.txt");
    cin>>t;
    for(w=1;w<=t;w++)
    {
        cin>>n>>k>>c>>x;
        int a[n],b[n],array[n][n];
        for(int i=1;i<=n;i++)
            cin>>a[i];
        for(int i=1;i<=n;i++)
            cin>>b[i];
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                array[i][j]=(a[i]*i+b[j]*j+c)%x;
            }
        }
        int re[1000],z=0;
        if(k>1){
        for(int i=1;i+k-1<=n;i++)
        {
            for(int j=1;j+k-1<=n;j++)
            {
                re[z]=array[i][j]+array[i][j+1]+array[i+1][j]+array[i+1][j+1];
                z++;
            }
        }}
        else
        {
            for(int i=1;i<=n;i++)
            {
                for(int j=1;j<=n;j++)
                {
                    re[z]=array[i][j];
                    z++;
                }
            }
        }

        int lar=re[0];
        for(int i=1;i<z;i++)
        {
            if(re[i]>lar)
                lar=re[i];
        }
        myfile<<"Case #"<<w<<": "<<lar<<endl;
    }
    myfile.close();
    return 0;
}

你有一个基本的差一错误:

    int a[n],b[n],array[n][n];
    for(int i=1;i<=n;i++)
        cin>>a[i];

a的长度为n,表示有效指标介于0n-1之间。您正在写入索引n的值,该值已经过了结束。

像这样构造你的循环:

    for (int i = 0; i < n; i++)
        cin >> a[i];

你所有的循环都显示了这个问题。

另外,就像@NathanOliver说的,使用std::vector代替可变长度数组(VLA)。VLA在C标准中,但在c++中没有。所以这里的用法是非标准的。只需添加#include <vector>并替换

int a[n];

std::vector<int> a(n);