Итак, у меня есть программа на С, структурированная в 3 файла: main.c, alloc.h и alloc.c. В функции main.c
у меня есть объявление указателя на другой указатель, которому я намерен выделить массив n * m
:
#include <stdio.h>
#include <stdlib.h>
#include "alloc.h"
int main() {
int **mat, n, m;
alloc_matrix(&mat, int &n, int &m);
return 0;
}
В alloc.c у меня есть следующие объявления:
#ifndef ALLOC_H_INCLUDED
#define ALLOC_H_INCLUDED
#include <stdio.h>
#include <stdlib.h>
void alloc_matrix(int***, int*, int*);
#endif
В alloc.c у меня есть функция:
void alloc_matrix(int ***mat, int *n, int *m) {
printf("\nn = "); scanf("%d", n);
printf("\nm = "); scanf("%d", m);
*mat = (int**)calloc(*n, sizeof(int*));
int i;
for (i = 0; i < *n; i++)
*(mat + i) = (int*)calloc(*m, sizeof(int));
}
Но программа не работает. Он входит в какую-то петлю и не заканчивается.
Если я выделю его в main
, он будет работать, но я понятия не имею, что я делаю неправильно в функции alloc
.