При попытке работать с массивом выдается ошибка Segmentation fault. Необходимо выделение памяти именно в отдельной процедуре

Выделение памяти в процедуре под двумерный массив

#include <stdio.h>
#include <stdlib.h>
        
// Объявление процедуры выделения памяти
void memoryAllocation( int ***arr, int *column, int *line);
        
int main() {
    // Двумерный динамический массив
    int **array = NULL;  

    // Размерность массива
    int column = 7, line = 5;  

    // Процедура выделения памяти
    memoryAllocation( &array, &column, &line);  

    // Освободим память
    free (array); 
    array = NULL;
    return 0;
}
 
// Процедура выделения памяти под динамический двумерный массив       
void memoryAllocation( int ***arr, int *column, int *line) {
     *arr = malloc(*column * sizeof(*arr));
     for (int index = 0; index < *column; index++) {
     *arr[index] = malloc(*line * sizeof(**arr));
     }
}

В итоге при попытке поработать с ним, выдается Segmentation fault( При выделение в функции main ошибок нет, а при попытке работы во внешних функциях есть... Помогите разобраться!


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

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

Чаще надо скобочки ставить. Приоритет у квадратных скобочек больше, чем у разыменования. Надо значения ставить (*arr)[index] = ... Ещё перепутали размеры указателей sizeof(int*) (или sizeof(**arr)) с простыми типами sizeof(int) (или sizeof(***arr)).

// Процедура выделения памяти под динамический двумерный массив       
void memoryAllocation( int ***arr, int *column, int *line) {
     *arr = malloc(*column * sizeof(int*));
     for (int index = 0; index < *column; index++) {
       (*arr)[index] = malloc(*line * sizeof(int));
     }
}
→ Ссылка