int mat(int ***matrix, int m, int n) {
Зачем три звёздочки? Для двумерного массива достаточно было бы двух:
int mat(int **matrix, int m, int n) {
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++) {
printf("x: %d / y: %d / ", i, j);
matrix[i][j] = 1;
}
return 0;
}
int mato(int **matrix, int m, int n) {
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
if (j == m - 1) {
printf("%d\n", matrix[i][j]);
} else {
printf("%d ", matrix[i][j]);
}
return 0;
}
int main() {
int **matrix = malloc(XMAX * YMAX * sizeof(int) + XMAX * sizeof(int*));
...
if (mat(matrix, XMAX, YMAX) != 0) {
free(matrix);
return 1;
}
mato(matrix, XMAX, YMAX);
...
}
В коде с тремя звёздочками конкретно здесь:
mat(&matrix[0][0], XMAX, YMAX)
передаётся неправильный указатель, потому что
matrix
--- это не настоящий двумерный массив, и
matrix
и
&matrix[0][0]
указывают в разные места.
Ну и порекламирую свой давнишний
обзорный ответ на подобный вопрос.