#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
с его текущей сигнатурой все в порядке, поскольку она не изменяет указатели.