Не получается объединить два массива в один возникает 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];
→ Ссылка