C Ошибка сегментации распечатать 2d массив - PullRequest
2 голосов
/ 12 марта 2019

Когда я пытаюсь вызвать функцию createPlayground, которая должна печатать двумерный массив в 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 Ответ

0 голосов
/ 12 марта 2019

Вам нужно добавить еще один уровень косвенности к 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, &playground);

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

...