Когда вы выделяете пространство для массива, вы выделяете память на трех уровнях:
char*** cube = (char***)malloc(sizeof(char**) * DIM);
int a, b, c;
for(c = 0; c < DIM; c++) {
cube[c] = (char**)malloc(sizeof(char**) * DIM);
for(b = 0; b < DIM; b++) {
cube[c][b] = (char*)malloc(sizeof(char*) * DIM);
for(a = 0; a < DIM; a++) {
cube[c][b][a] = ((a + b + c) % 26) + 'A';
}
}
}
Но попробуйте освободить его на 4 уровнях:
for(c = 0; c < DIM; c++) {
for(b = 0; b < DIM; b++) {
for(a = 0; a < DIM; a++) {
free(cube[c][b][a]);
}
free(cube[c][b]);
}
free(cube[c]);
}
free(cube);
cube[c][b][a]
являетсяchar
, а не char *
, поэтому вы не можете его освободить.Избавьтесь от самой внутренней петли.
for(c = 0; c < DIM; c++) {
for(b = 0; b < DIM; b++) {
free(cube[c][b]);
}
free(cube[c]);
}
free(cube);