Heap corruption detected after normal block c++. динамические массивы
Итак, цель программы - создать два динамических массива, сравнить их между собой и наибольший элемент массива записать в новый третий массив, если массивы разной размерности то оставшиеся элементы наибольшего массива записать в третий массив.
Запускаем консоль, вводим размеры массива, записываем значения в новый массив. Вроде как бы все записалось, но
1)не те значения
2)вылезает ошибка
скриншот полагает

#include <iostream>
using namespace std;
int main()
{
setlocale(LC_ALL, "ru");
int L1, L2, L3, n = 0, k=0, c = 0;
cout << "Введите длину первого массив" << endl;
cin >> L1;
int* array1 = new int[L1];
cout << "Введите значение массива" << endl;
for (int i = 0; i < L1; i++)
{
array1[i] = rand() % 50;
}
for (int i = 0; i < L1; i++)
{
cout << "&array1[" << i << "] = " << &array1[i] << " = " << array1[i] << endl;
}
cout << "Введите длину массив" << endl;
cin >> L2;
int* array2 = new int[L2];
cout << "Введите значение второго массива" << endl;
for (int i = 0; i < L2; i++)
{
array2[i] = rand() % 50;
}
for (int i = 0; i < L2; i++)
{
cout << "&array2[" << i << "] = " << &array2[i] << " = " << array2[i] << endl;
}
for (int i = 0; i < L1 || i < L2; i++)
{
if (array1[i] > k)
{
k = array1[i];
}
if (array2[i] > k)
{
k = array2[i];
}
}
if (L1 > L2)
{
n = L1 - L2;
c = L1;
}
if (L2 > L1)
{
n = L2 - L1;
c = L1;
}
L3 = n;
cout << "Результирующий массив" << endl;
int* array3 = new int[L3];
array3[0] = k;
for (int i = 0; i < n; i++)
{
if (L1 > L2)
{
L3++;
array3[1 + i] = array1[c - i];
}
if (L2 > L1)
{
L3++;
array3[1 + i] = array2[c - i];
}
}
for (int i = 0; i < L3; i++)
{
cout << "&array3[" << i << "] = " << &array3[i] << " = " << array3[i] << endl;
}
cout << "Разница между длинами массивов: " << n << endl; // Разница между длинами массива
cout << "Наибольшее число в двух массивах: " << k << endl; // Наибольшее число в двух массивах
cout << "Длина большего массива: " << c << endl; // Длина большего массива
delete[] array1;
delete[] array2;
delete[] array3;
system("pause");
return 0;
}
Ответы (1 шт):
Посмотрим на это:
for (int i = 0; i < L1 || i < L2; i++)
Т.е. i может выйти за пределы меньшего массива! Скажем, L1 = 10, L2 = 30, i = 20 - и условие выполнено, и выход за пределы массива произошел!
Уже UB. Тут у вас явно требуется &&...
Дальше у вас в двух разных условиях - L1 < L2 и L1 > L2 (кстати, а что будет, если они равны? :)) - выполняется одинаковое присваивание c = L1. Терзают смутные сомнения, что вы хотели иного...
Словом, пока исправьте эти ошибки, а там посмотрим.
Только вот при исправлении учтите, что k как максимальный элемент, у вас ищется неверно в любом случае...