Это мой код, который выделяет место для матрицы размера, заданного параметрами, и возвращает указатель на указанную матрицу:
int **allocateSpace(int row, int col){
int i;
int **a;
a = malloc(sizeof(int *) * row);
for(i = 0; i < row; i ++)
a[i] = malloc(sizeof(int) * col);
return a;
}
Приведенный выше код работает так, как предполагалось.
Однако, когда я изменяю код на следующий вид, я получаю ошибку сегментации:
void allocateSpace(int **a, int row, int col){
int i;
a = malloc(sizeof(int *) * row);
for(i = 0; i < row; i ++)
a[i] = malloc(sizeof(int) * col);
}
Похоже, что при возврате из функции allocateSpace()
выделенная память была освобождена (поскольку я получил ошибка сегментации). Но почему? Все, что я делаю, это выделяю память для заданного указателя, и все это делается в подфункции.
Подводя итог моему вопросу: почему я получаю ошибку сегментации во втором фрагменте кода? Большое тебе спасибо!