Двойной свободный или коррупционный 3D-массив в C

Я получаю ошибку «двойное освобождение или повреждение» при освобождении трехмерного массива. Может кто-нибудь сказать, пожалуйста, где проблема в коде?Размер массива составляет 2 * N * N. Значение N здесь составляет 100. Даже без приведения, тот же результат. Вот код:

// 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);

Программа работает нормально, но в конце я получаю сообщение об ошибке «двойное освобождение или повреждение (! Prev): 0x08cd24f8» Aborted (ядро сброшено).

Ответы на вопрос(1)

Ваш ответ на вопрос