Fiz um tópico anterior a esse, mas estava bem confuso, ilegivel, pois parte do codigo estava misturado com um projeto meu (que alias, é onde eu pretendo utilizar essa tecnologia de matriz dinamica de 3 (ou ate mais) dimensões)
Estou com problemas na alocação dinamica de matriz de 3 dimensões
Enfim, segue abaixo alocação estática de matriz, nessa já fiz várias manipulações e não há problema nenhum, consigo acessar todos os locais da matriz
int main(){
    int matriz[2][3][2];
    int a=2, b=3 , c=2; //os valores de a,b,c devem coincidir com as dimensoes da matriz
    int i,j,k;
    int contador=1;
    for( i=0 ; i<a ; i++){
        for ( j=0; j<b ; j++){
            for ( k=0 ; k<c ; k++){
                matriz[i][j][k] = i+j+k;
                printf("%d matriz %d %d %d = %d \n", contador,i,j,k,matriz[i][j][k]);
                contador++;
            }
        }
    }
}Meu problema é na alocação dinamica de matriz de 3 dimensoes, segue meu codigo , APARENTEMENTE, tudo roda bem, porem em algum ponto na liberação da memoria (coloquei alguns printf com numeros dentro) o programa simplesmente para de funcionar e encerra abruptamente
porem se tentar outras variantes para a,b,c , percebe-se que o programa simplesmente tem um comportamento estranho se a condição a<=b<=c não for respeitada
se ocorrer b>c , só vai rodar ate a interação [1][c][c] para qualquer "a" , e então o programa para abruptamente
se ocorrer a>b && b<c , so vai rodar ate a interação [b][b][c] , e entao o programa para abruptamente
#include <stdio.h>
#include <stdlib.h>
int*** matriz;
int i,j,k;
int main(){
    //////////// inicio alocando matriz
    int a = 4;
    int b = 3;
    int c = 2; //dimensoes da matriz
    matriz = malloc (sizeof (int**) * a);
    for ( i = 0; i<b; i++){
        matriz[i] = malloc (sizeof (int*) * b);
    }
    for ( i = 0; i<b; i++){
        for (j = 0 ; j<c; j++){
            matriz[i][j] = malloc (sizeof (int) * c );
        }
    }
    ///////////// fim alocando matriz
    ////////////// inicio utilziar a matriz
    for( i=0 ; i<a ; i++){
        for ( j=0; j<b ; j++){
            for ( k=0 ; k<c ; k++){
                matriz[i][j][k] = i+j+k;
                printf("matriz %d %d %d = %d \n", i,j,k,matriz[i][j][k]);
            }
        }
    }
    printf("1\n");
    ///////////// fim utilizar a matriz
    ////////// inicio liberacao da matriz
    for ( i=0 ; i<a ; i++){
        for ( j=0; j<b ; j++){
            free ( matriz[i][j] );
        }
    }
    printf("2\n");
    for ( i=0 ; i<a ; i++ ){
        free ( matriz [i] );
    }
    printf("3\n");
    free ( matriz );
    printf("4\n");
    //////////// fim liberacao da matriz
} 
            