Ошибка при работе с массивом

Двумерный динамический массив в функцию Копирование + добавить строку и столбец видает ошибку.

#include<iostream>
#include<ctime>
using namespace std;

//8.Создать функцию, позволяющую вставлять строку (столбец) в матрицу.
void Print_mas(int** arr, int rows, int cols)
{
    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < cols; j++)
        {
            cout << arr[i][j] << "\t";
        }
        cout << endl;
    }
}
void Load_mass(int**& arr, int rows, int cols)
{
    arr = new int* [rows];
    for (int i = 0; i < rows; i++)
    {
        arr[i] = new int[cols];
    }
    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < cols; j++)
        {
            arr[i][j] = rand() % 49;
        }
    }
}
void Load_mass_2v(int**& arr, int rows, int cols, int rw, int cl)
{
    for (int i = rows; i < rows + rw; i++)
    {
        for (int j = cols; j < cols + cl; j++)
        {
            arr[i][j] = rand() % 49;
        }
    }
}

void Insert_rows_into_an_array(int**& arr, int**& arr2, int rows, int cols, int rw, int cl)
{
    arr2 = new int* [rows];

    for (int i = 0; i < rows; i++)
    {
        arr2[i] = new int[cols];
    }

    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < cols; j++)
        {
            arr2[i][j] = arr[i][j];
        }
    }
    cout << "++++++++++++++++++++++++++++++++++++++++++++++" << endl;
    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < cols; j++)
        {
            cout << arr2[i][j] << "\t";
        }
        cout << endl;
    }
    for (int i = 0; i < rows; i++)
    {
        delete[]arr[i];
    }

    delete[]arr;
    arr = NULL;

    rows += rw;
    cols += cl;
    arr = new int* [rows];

    for (int i = 0; i < rows; i++)
    {
        arr[i] = new int[cols];
    }

    int* px = new int;

    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < cols; j++)
        {
            arr[i][j] = 0;
        }
        cout << endl;
    }

    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < cols; j++)
        {
            if (j >= rows - rw && i >= cols - cl)
                arr[i][j] = 1;
            else
                arr[i][j] = arr2[i][j];///arr2 есть елемент 0x00000000fdfdfdfd  <Чтение памяти невозможно>
        }
    }

    for (int i = 0; i < rows-rw; i++)
    {
        delete[]arr2[i];
    }
    delete[]arr2;
}

int main()
{
    setlocale(LC_ALL, "rus");
    srand(time(0));

    int rows = 5;
    int cols = 5;
    cout << "Введите Матрицу (Строки и Колонки): ";
    cin >> rows >> cols;
    int** arr;
    int** arr2;
    Load_mass(arr, rows, cols);



    cout << "\nmain 1________________________________________________________\n" << endl;
    Print_mas(arr, rows, cols);
    int r, c;

    cout << "Добавить Строки и Колонки: ";
    cin >> r >> c;

    cout << endl;
    Insert_rows_into_an_array(arr, arr2, rows, cols, r, c);
    cout << endl;

    cout << "\n________________________________________________________\n" << endl;

    Load_mass_2v(arr, rows, cols, r, c);
    Print_mas(arr, rows + r, cols + c);

    cout << "\n________________________________________________________\n" << endl;
    for (int i = 0; i < rows + r; i++)
    {
        delete[]arr[i];
    }
    delete[]arr;
    system("pause");
    return 0;
}

Ответы (0 шт):