Странная ошибка сегментации при выделении памяти в подфункции в c

Это мой код, который выделяет место для матрицы размера, заданного параметрами, и возвращает указатель на указанную матрицу:

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()выделенная память была освобождена (поскольку я получил ошибка сегментации). Но почему? Все, что я делаю, это выделяю память для заданного указателя, и все это делается в подфункции.

Подводя итог моему вопросу: почему я получаю ошибку сегментации во втором фрагменте кода? Большое тебе спасибо!

0
задан UnknowableIneffable 14 August 2017 в 02:43
поделиться