delete specific row from dynamic 2d array c++

#include <iostream>

// Function to delete a specific row from a dynamic 2D array
void deleteRow(int& array, int& numRows, int numCols, int rowIndex) {
    // Check if rowIndex is valid
    if (rowIndex < 0 || rowIndex >= numRows) {
        std::cout << "Invalid row index." << std::endl;
        return;
    }

    // Create a new array with one less row
    int newArray = new int*[numRows - 1];

    // Copy rows before the deleted row
    for (int i = 0; i < rowIndex; ++i) {
        newArray[i] = new int[numCols];
        for (int j = 0; j < numCols; ++j) {
            newArray[i][j] = array[i][j];
        }
    }

    // Copy rows after the deleted row
    for (int i = rowIndex + 1; i < numRows; ++i) {
        newArray[i - 1] = new int[numCols];
        for (int j = 0; j < numCols; ++j) {
            newArray[i - 1][j] = array[i][j];
        }
    }

    // Delete the old array and update the array pointer
    for (int i = 0; i < numRows; ++i) {
        delete[] array[i];
    }
    delete[] array;

    array = newArray;
    --numRows;
}

int main() {
    // Example usage
    int numRows = 3;
    int numCols = 4;

    // Create a dynamic 2D array
    int myArray = new int*[numRows];
    for (int i = 0; i < numRows; ++i) {
        myArray[i] = new int[numCols];
    }

    // Populate the array (for example)
    int value = 1;
    for (int i = 0; i < numRows; ++i) {
        for (int j = 0; j < numCols; ++j) {
            myArray[i][j] = value++;
        }
    }

    // Display the original array
    std::cout << "Original Array:" << std::endl;
    for (int i = 0; i < numRows; ++i) {
        for (int j = 0; j < numCols; ++j) {
            std::cout << myArray[i][j] << " ";
        }
        std::cout << std::endl;
    }

    // Delete a specific row (for example, row with index 1)
    int rowIndexToDelete = 1;
    deleteRow(myArray, numRows, numCols, rowIndexToDelete);

    // Display the updated array
    std::cout << "\nArray after deleting row " << rowIndexToDelete << ":" << std::endl;
    for (int i = 0; i < numRows; ++i) {
        for (int j = 0; j < numCols; ++j) {
            std::cout << myArray[i][j] << " ";
        }
        std::cout << std::endl;
    }

    // Clean up memory
    for (int i = 0; i < numRows; ++i) {
        delete[] myArray[i];
    }
    delete[] myArray;

    return 0;
}