あなたのコードは、ポインター(アスタリスクの3つの配列)へのポインターの配列を宣言していますが、割り当てによって、サイズがcells_x * cells_y * cells_z
の単一ブロックへのポインターが配置されます。 - 複数のループで
static double*** initGrid(size_t cells_x, size_t cells_y, size_t cells_z) {
double ***grid;
grid = malloc(cells_x, sizeof(double**));
for (size_t x = 0 ; x != cells_x ; x++) {
grid[x] = malloc(cells_y, sizeof(double*));
for (size_t y = 0 ; y != cells_y ; y++) {
grid[x][y] = calloc(cells_z, sizeof(double));
}
}
return grid;
}
static void freeGrid(double ***grid, size_t cells_x, size_t cells_y) {
for (size_t x = 0 ; x != cells_x ; x++) {
for (size_t y = 0 ; y != cells_y ; y++) {
free(grid[x][y]);
}
free(grid[x]);
}
free(grid);
}
あなたは別の方法でジャグ配列を割り当て、自由にする必要があります:あなたのextern
変数のユーザーは「ギザギザ」の配列(ポインタへのポインタのすなわち配列)を期待するので、これは、間違っています配列の配列へのポインタとしてgrid
を宣言してください。
'grid.c'を' driver.c'のグローバルとして宣言しましたか? – Kninnug
'double *** grid;'は、その言語に関する3d配列ではありません。 – StoryTeller
[this](http://stackoverflow.com/questions/14111210/when-two-dimensional-array-and-multidimensional-array-as-function-parameters-in/14111286#14111286) – StoryTeller