Почему не передается двойной динамический массив в main?

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

#include <stdio.h>
#include <stdlib.h>




void input(int **matrix, int *n, int *m);
 void output(int **matrix, int n, int m);


int main()
{

int **matrix, **result;
int n,m;

input(matrix, &n , &m);


output(matrix, n, m);
}


void input(int **matrix, int *n, int *m) {

if (!scanf("%d", n) || *n < 1) {
    printf("n/a");
    exit (0);
}

if (!scanf("%d", m) || *m < 1) {
    printf("n/a");
    exit (0);
}

    
matrix = malloc(*n*sizeof(int*));
for (int i = 0; i < *m; i++)
    matrix[i] = malloc(*m*sizeof(int*));

for (int p = 0; p < *n; p++) {
    for (int k = 0; k < *m; k++) {
        scanf("%d", &matrix[p][k]);
     }
   }
   }


   void output(int **matrix, int n, int m) {
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
        printf("%d ", matrix[i][j]);
    }
    if (i != m-1)
        printf("\n");
  }
 }

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

Автор решения: Harry

Ну, раз ну никак не понимаются намеки...

См. https://ideone.com/RLqQDh

#include <stdio.h>
#include <stdlib.h>

void input(int ***matrix, int *n, int *m);
void output(int **matrix, int n, int m);

int main()
{

    int **matrix;
    int n,m;

    input(&matrix, &n , &m);
    output(matrix, n, m);
}


void input(int ***matrix, int *n, int *m) {

    if (!scanf("%d", n) || *n < 1) {
        printf("n/a");
        exit (0);
    }

    if (!scanf("%d", m) || *m < 1) {
        printf("n/a");
        exit (0);
    }


    *matrix = malloc(*n*sizeof(int*));
    for (int i = 0; i < *m; i++)
        (*matrix)[i] = malloc(*m*sizeof(int));

    for (int p = 0; p < *n; p++) {
        for (int k = 0; k < *m; k++) {
            scanf("%d", &(*matrix)[p][k]);
        }
    }
}

void output(int **matrix, int n, int m)
{
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            printf("%d ", matrix[i][j]);
        }
        if (i != m-1)
            printf("\n");
    }
}
→ Ссылка