Код ошибки:
Exception thrown at 0x00007FF727DE25CF in ConsoleApplication.exe: 0xC0000005: Access violation reading location 0x000000C3639174A0. occurred
Код програмы:
#include<iostream>
#include <iomanip>
using namespace std;
const int n = 15, N = 2 + n, M = 5 + n;
int main()
{
srand(time(NULL));
setlocale(0, " ");
double a[N][M],min,max;
min = max = 0;
for (int i = 0; i <=N; i++)
{
for (int j = 0; j <=M; j++)
{
a[i][j] = pow(n, i + j) + pow(n, i - j) - (i + j) * (i - j);
cout << "a[" << i << "][" << j << "]=" << a[i][j] << endl;
if (a[i][j] < min) min = a[i][j];
if (a[i][j] < max) max = a[i][j];
}
cout << endl;
}
cout << "Минимальное число" << min << endl;
cout << "Максимальное число" << max << endl;
return 0;
}
Если память меня не подводит, у меня компилятор Visual Studio 2019.
Каждый из циклов в этом коде будет выполняться на один раз больше, чем необходимо.
Возьмём, к примеру, этот фрагмент для N = 2
.
double a[N];
for (int i = 0; i <=N; i++) {
a[i];
}
условие i <= N
будет выполняться для значений 0, 1, 2
. То есть для трёх значений. В то время, как размер массива - 2
и, соотевтственно, допустимые индексы для него 0, 1
. Значит доступ к a[2]
уже будет за пределы массива, что является неопределённым поведением согласно станрту С++. И это поведение проявляется как ошибка времени исполнения представленная здесь.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Я пишу вторую версию вставки в map, где нужно передавать ещё и итератор, помимо вставляемой пары, то есть пишу аналог такой вставки: