doble matriz libre o corrupción 3d en C

Recibo un error de "doble liberación o corrupción" al liberar una matriz 3D. ¿Alguien puede decirme dónde está el problema en el código?El tamaño de la matriz es 2 * N * N. El valor de N aquí es 100. Incluso sin lanzar, el mismo resultado. Aquí está el código:

// Mallocing 
double ***h = malloc(2 * (sizeof(double**)));
for(i = 0; i < N; i++) {
    h[i] = malloc(N * sizeof(double*));
    for(j = 0; j < N; j++) {
        h[i][j] = malloc(N * sizeof(double));
    }
}

// Freeing
for(i = 0; i < N; i++) {
    for(j = 0; j < N; j++) {
        free(h[i][j]);
    }
    free(h[i]);
}
free(h);

El programa funciona bien pero al final recibo un error 'doble libre o corrupción (! Prev): 0x08cd24f8' Abortado (núcleo volcado).

Respuestas a la pregunta(5)

Su respuesta a la pregunta