Ошибка при копировании динамического массива С++
Я только начал изучать С++, и столкнулся с очень странной проблемой, я написал функцию CopyArr для копирования динамического массива
#include <iostream>
void FillArr(int* const arr, const int size);
void CopyArr(const int* const fromArr, int* toArr, const int sizefrom);
void ShowArr(const int* const arr, const int size);
int main()
{
int size = 3;
int* fArr = new int[size];
int* sArr = new int[size];
FillArr(fArr, size);
FillArr(sArr, size);
ShowArr(fArr, size);
ShowArr(sArr, size);
std::cout << "___Copied___\n";
CopyArr(fArr, sArr, size);
/* Тоже самое, но работает всегда если реализовать в main
delete[] sArr;
sArr = nullptr;
sArr = new int[size];
for (int i = 0; i < size; i++)
{
sArr[i] = fArr[i];
}*/
ShowArr(fArr, size);
ShowArr(sArr, size);
delete[] fArr;
delete[] sArr;
}
void FillArr(int* const arr, const int size)
{
for (int i = 0; i < size; i++)
{
arr[i] = rand() % 10;
}
}
void ShowArr(const int* const arr, const int size)
{
for (int i = 0; i < size; i++)
{
std::cout << arr[i] << " ";
}
std::cout << std::endl;
}
void CopyArr(const int* const fromArr, int* toArr, const int sizefrom)
{
delete[] toArr;
toArr = nullptr;
toArr = new int[sizefrom];
for (int i = 0; i < sizefrom; i++)
{
toArr[i] = fromArr[i];
}
}
И проблема в том, что этот код может 2-3 раза подряд отработать без ошибок, а на четвертый выкинуть исключение на delete[] sArr, из-за очистки уже очищенного участка памяти.
Вот, что в таком случае выводится в консоль:

Отмечу, что такого не происходит если реализовать логику этой функции непосредственно в main, в таком виде код работает стабильно.
И ещё одно наблюдение, чем больше размер массивов, тем реже вылетают исключения.
Буду рад если кто-нибудь сможет объяснить, почему такое происходит именно с функцией, и почему результат очень непостоянный?