dupla matriz livre ou corrupção 3d em C

Eu recebo um erro de "dupla liberdade ou corrupção" ao liberar uma matriz 3D. Alguém pode me dizer onde está o problema no código?O tamanho da matriz é 2 * N * N. O valor de N aqui é 100. Mesmo sem vazamento, o mesmo resultado. Aqui está o 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);

O programa funciona bem, mas no final recebo um erro 'em dobro livre ou corrompido (! Prev): 0x08cd24f8' Abortado (núcleo despejado).

questionAnswers(5)

yourAnswerToTheQuestion