Манипулировать динамическим массивом указателей на 2 массива

#c

#c

Вопрос:

Я пытаюсь инициализировать значение массива внутри функции, но я действительно борюсь с этим. Следующий код выдает EXC_BAD_ACCESS (code=1, address=0x0) ошибку.

В конце мне нужен массив, подобный [piecesNumber][10][10] тому, где число частей равно 12.

MAX_SIZE это просто define = 10 .

 int main() {

    int (*pieces) [MAX_SIZE][MAX_SIZE] = NULL;

    createPieces(amp;pieces);

    for (int i = 0; i < 12;   i) {
        for (int x = 0; x < MAX_SIZE;   x) {
            for (int y = 0; y < MAX_SIZE;   y) {
                printf("%d",pieces[i][x][y]);
            }
            printf("n");
        }
    }

    return 0;
}

void createPieces(int (**pieces)[MAX_SIZE][MAX_SIZE]){
    
    *pieces = malloc(sizeof(int[MAX_SIZE][MAX_SIZE])*piecesNumber()); //piecesNumber = 12 

    for (int i = 0; i < 12; i  ) {
        for (int x = 0; x < MAX_SIZE; x  ) {
            for (int y = 0; y < MAX_SIZE; y  ) {
                *pieces[i][x][y] = 1;
            }
        }
    }

}
  

Большое вам спасибо за вашу помощь, я пытаюсь решить это со вчерашнего утра: (

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

1. Да, количество элементов () возвращает 12.

2. Ошибка, которую я получаю, возникает, когда я делаю: * pieces [i] [x] [y] = 1;

3. Каждый раз, когда вы получаете EXC_BAD_ACCESS сообщение об ошибке — наиболее вероятной причиной является то, что вы злоупотребляете указателем и пытаетесь получить доступ к адресу памяти за пределами допустимого диапазона ваших программ (например, в области памяти, зарезервированной системой, И т. Д.)

Ответ №1:

Проблема вызвана непреднамеренной группировкой. Следующее:

 *pieces[i][x][y] = 1;
  

должно быть:

 (*pieces)[i][x][y] = 1;
  

Без круглых скобок * оператор применяется только после индексации, что явно не сработает.