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
}