Не получается объединить два массива в один возникает heap corruption detected after normal block
Решаю такую задачу: Заполните случайными значениями два массива A и B. Выведите на экран сначала A потом B. Объедините A и B в массив C, отсортируйте его по возрастанию и выведите его на экран. Выведите максимальное, минимальное и среднее геометрическое значения из массива C. дошел до момента где нужно объединить 2 массива в 1.
введите сюда код
#include <iostream>
#include <string>
#include <Windows.h>
#include <time.h>
#include <vector>
int* diclareArray(int *array, int length)
{
for (int i = 0; i < length;++i)
{
array[i] = 1 + rand() % 1000;
}
return array;
}
void showArray(int *array, int length, std::string arrayName)
{
for (int i = 0; i < length;++i)
{
std::cout <<"\n"<<arrayName << i+1 <<" "<<array[i];
}
std::cout <<"\n";
}
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
srand(time(NULL));
int lengtA = 1 + rand() % 100 ;
int lengtB = 1 + rand() % 100;
int lengtC = lengtA + lengtB;
std::cout << lengtA<<"\n";
std::cout << lengtB<<"\n";
std::cout << lengtC<<"\n";
int *A = new int[lengtA];
int *B = new int[lengtA];
int *C = new int[lengtC];
A = diclareArray(A, lengtA);
B = diclareArray(B, lengtB);
showArray(A, lengtA, "A array:");
showArray(B, lengtB, "B array:");
//пытаюсь объединить 2 массива в один
for (int i = 0; i < lengtA; i++)
{
C[i] = A[i];
}
for (int i = lengtA; i < lengtC; i++)
{
C[i] = B[i-lengtA];
}
showArray(C, lengtC, "C array:");
delete[] A;
delete[] B;
delete[] C;
}
иногда программа работает нормально, а иногда завершается с ошибкой: HEAP[Zadanie2.exe]: Invalid address specified to RtlValidateHeap( 00A40000, 00A554F8 )
а иногда с ошибкой heap corruption detected after normal block. Может я как-то неправильно объедению массивы или неправильно выделяю для них память?
Ответы (1 шт):
Автор решения: Majestio
→ Ссылка
//
// допустим A == {0,1,2,3}
// B == {0,1}
// тогда C == {?,?,?,?,?,?}
//
// for (int i=0; i<4; i++) C[i]=A[i]
// for (int i=0; i<2; i++) C[i+4]=B[i]
// ^
// формировать индекс тут ────┘
//
И да, конечно, исправить ошибку:
// int *B = new int[lengtA]; на
int *B = new int[lengtB];