Я пытаюсь написать процедуру, которая позволит мне выделить непрерывный блок памяти размером n1 * n2 * n3 и получить к нему доступ с использованием 3 индексов, как если бы вы использовали массив
int array[n1][n2][n3];
У меня естьуспешно (насколько я могу судить) удалось это с двумя индексами (см. мой пример ниже)
#include <stdlib.h>
int main() {
// Dimensions
const int n1 = 2;
const int n2 = 2;
int **array;
// Pointers
array = (int **)malloc(n1*sizeof(int *));
// Contiguous chunk of memory of size n1xn2
array[0] = (int *)malloc(n1*n2*sizeof(int));
// Pointer arithmetic
for(int i=0;i<n1;i++) {
array[i] = array[0] + i*n2;
}
array[0][0] = 1;
return EXIT_SUCCESS;
}
Но когда я пытаюсь подобную конструкцию с тремя индексами, моя процедура выдает segfault:
#include <stdlib.h>
int main() {
// Dimensions
const int n1 = 2;
const int n2 = 2;
const int n3 = 2;
int ***array;
// Pointers
array = (int ***)malloc(n1*sizeof(int **));
array[0] = (int **)malloc(n1*n2*sizeof(int *));
// Contiguous chunk of memory of size n1xn2xn3
array[0][0] = (int *)malloc(n1*n2*n3*sizeof(int));
// Pointer arithmetic
for(int i=0;i<n1;i++) {
for(int j=0;j<n2;j++) {
array[i][j] = array[0][0] + i*n2*n3 + j*n2;
}
}
array[0][0][0] = 1;
return EXIT_SUCCESS;
}
Я понимаю, что есть и другие способы управления непрерывным блоком памяти.Меня особенно интересует, почему моя логика не работает в приведенном выше случае.