#include <iostream>
// Function to allocate a 2D array
int** allocateArray(int rows, int cols) {
int** array = new(std::nothrow) int * [rows];
if (array == nullptr) {
std::cout << "Memory allocation failed for rows." << "\n";
return nullptr;
}
for (int i = 0; i < rows; i++) {
array[i] = new(std::nothrow) int[cols];
if (array[i] == nullptr) {
std::cout << "Memory allocation failed for row " << i << "." << "\n";
for (int j = 0; j < i; j++) {
delete[] array[j];
}
delete[] array;
return nullptr;
}
}
return array;
}
// Function to fill the array with values
void fillArray(int** array, int rows, int cols) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
array[i][j] = (i + 1) * (j + 1);
}
}
}
// Function to print the array
void printArray(int** array, int rows, int cols) {
std::cout << "2D Array Values:" << "\n";
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
std::cout << array[i][j] << " ";
}
std::cout << "\n";
}
}
// Function to deallocate the array
void deallocateArray(int** array, int rows) {
for (int i = 0; i < rows; i++) {
delete[] array[i];
}
delete[] array;
}
int main() {
int rows = 3, cols = 4;
int** array = allocateArray(rows, cols);
if (array == nullptr) {
return 1;
}
fillArray(array, rows, cols);
printArray(array, rows, cols);
deallocateArray(array, rows);
}
/*
run:
2D Array Values:
1 2 3 4
2 4 6 8
3 6 9 12
*/