Моя цель - найти максимальное значение (минимум p последовательного числа) * p. Здесь 1 < = p < = N и 1 < = N < = 100000 и 1 < = номер < = 1000000. Я частично решил проблему. Но в некоторых случаях я получаю эту ошибку времени выполнения.Как я могу избавиться от ошибки сегментации?
"прекратить окликнул бросать экземпляр„станд :: bad_alloc“ , что(). Станд :: bad_alloc Это приложение просил Runtime прекратить его необычным способом Пожалуйста, свяжитесь со службой поддержки приложения для больше информации."
Я обнаружил, что ошибка связана с тем, что программа пытается получить доступ к памяти, которая не разрешена. Но я не понимаю, какая часть кода пытается получить доступ к нераспределенной памяти. Пожалуйста, помогите мне.
#include <iostream>
using namespace std;
int main(){
int N=0;
cin>>N;
int **A,*B,i,j,num;
A = new int*[N];
for(i=0;i<N;i++)
A[i] = new int[N]();
B = new int[N]();
for(i=0;i<N;i++){
cin>>num;
A[0][B[0]] = num;
for(j=0;j<B[0];j++){
A[j+1][B[j+1]] = min(A[j][B[j+1]],A[j][B[j+1]+1]);
B[j+1]++;
}
B[0]++;
}
long long maxim = 0;
for(i=0;i<N;i++){
for(j=0;j<B[i];j++){
if(A[i][j]*(i+1) > maxim)
maxim = A[i][j]*(i+1);
}
}
cout<<maxim;
delete []A;
delete []B;
return 0;
}
Может быть, это не место для N * N целых чисел? В конце концов, 100000 * 100000 * 4 = составляет 38000 МБ, поэтому по крайней мере моя машина с 16 ГБ ОЗУ не справится с этим. –
Обратите внимание, что «bad_alloc» не «использует память, которая не выделена», это «недостаточно памяти». –
Должно быть в порядке с 64-битным приложением и ОС, –