Ошибка сегментации C выводит 2d-массив

#c #multidimensional-array #segmentation-fault

#c #многомерный массив #ошибка сегментации

Вопрос:

Когда я пытаюсь вызвать функцию createPlayground , которая должна вывести 2D массив на C на консоль, я получаю ошибку сегментации. Я не знаю, что не так.

 #include<stdio.h>
#include<stdlib.h>

void createPlayground(int, int **);
void printPlayground(int, int **);

int main() {
    int size = 8;
    int **playground;

    createPlayground(size, playground);

    printPlayground(size, playground);

    return 0;
}

void createPlayground(int size, int **array) {
    array = (int **) malloc(size * sizeof(int *));
    for (int i = 0; i < size;   i) {
    array[i] = (int *) calloc(size, sizeof(int));
    }
}

void printPlayground(int size, int **array) {
    for (int i = 0; i < size;   i) {
        for (int j = 0; j < size;   j){
            printf("%d  ", array[i][j]);
        }
        printf("n");
    }
}
  

Комментарии:

1. Помните: в C параметры передаются по значению. Что бы вы ни назначили параметру внутри функции, вызывающий объект не будет виден.

Ответ №1:

Вам нужно добавить еще один уровень косвенности к createPlayground :

 void createPlayground(int size, int ***array) {
    *array = (int **)malloc(size * sizeof(int *));
    for (int i = 0; i < size;   i) {
        (*array)[i] = (int *)calloc(size, sizeof(int));
    }
}
  

Назовите это так:

 createPlayground(size, amp;playground);
  

Обратите внимание, что printPlayground с его текущей сигнатурой все в порядке, поскольку она не изменяет указатели.