Windows — Мой DOS падает каждый раз, когда я дал большой набор входных данных для моей программы C ++

Я написал код на C ++ и попытался скомпилировать его, используя MinGW и компилятор TDMGCC. Он очень хорошо компилируется. Но проблема возникает, когда я пытался использовать .exe-файл, сгенерированный этим компилятором, и я предоставляю большой набор входных данных для моей программы, моя программа перестает работать и говорит, что Windows перестала работать. После нажатия на кнопку ОК, это прекращает выполнение. Как я могу это исправить.
Вот мой код

#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;
}

0

Решение

У вас есть базовая ошибка:

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

a имеет длину nозначает, что действительные индексы находятся между 0 а также n-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);

а все остальное может остаться прежним.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector