Передаю сформированный одной функцией массив в другую. Передаёт указатель на ничто. Попытался двумя способами, никак. Help

#include "stdio.h"
//Функция получает динамический двумерный массив типа int**, количество строк, количество столбцов массива.
//Возвращает знчение максимального элемента массива.
int _max(int** A, int n, int m)
{
int v_max = A[0][0];
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
if (A[i][j] > v_max)
v_max = A[i][j];
return v_max;
}
int main()
{
int n = 3;//Количество строк.
int m = 4;//Количество столбцов.
//Динамическое выделение памяти под двумерный массив.
int** A = new int*[n];
for (int i = 0; i < n; i++)
A[i] = new int[m];
//Инициализация элементов массива индексами.
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
A[i][j] = 10 * (i + 1) + (j + 1);
//Вывод значений элементов массива.
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
printf("%3d", A[i][j]);
printf("\n");
}
//Вывод значения максимального элемента массива.
//В вызове функции printf(), осуществлен вызов функции _max().
printf("max element of matrix:%d", _max(A, n, m));
//Освобождение памяти занимаемой динамическим массивом A[n][m].
for (int i = 0; i < n; i++)
delete[] A[i];
return 0;
}
int** - это применимо к матрицам, которые мы сами в куче создаём. А матрица на стеке - это просто одномерный массив, в котором элементы всех строк записаны подряд.
int detForDIM3(int* matrix);
Тогда в этой функции доступ к элементам будет в виде: matrix[i * rowsCount + j]
Вызывать так: detForDIM3((int*)matrix);
Либо вот так сделать, но тогда число столбцов должно быть обязательно известно:
int detForDIM3(int matrix[DIM][DIM]);
detForDIM3(matrix);