double*** cube;
double** plane;
double* line;
int x, y;

cube = malloc(sizeof(double**)*N);
for(x = 0; x < N; x++){
plane = malloc(sizeof(double*)*N);
cube[x] = plane;
for(y = 0; y < N; y++){
line = malloc(sizeof(double)*N);
cube[x][y] = line;
}
}

もっとも、
cube = malloc(sizeof(double)*N*N*N);
でいいんちゃうかとはおもうが。アクセスは
cube[z*(N*N) +y*(N) +x]。