我正在学习有关动态内存的知识,并尝试编写一些代码。但是,我尝试运行它会输出错误,但我无法解决错误。Malloc()用法必须有问题,但我不确定。
误差点在这里 -> free(cube [c] [b] [a]);
谢谢!
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#define DIM 4
void showCube(char**** cube, int dim) {
int a, b, c;
for(c = 0; c < dim; c++) {
for(b = 0; b < dim; b++) {
for(a = 0; a < dim; a++) {
printf("%c ", *cube[c][b][a]);
}
printf("n");
}
printf("50*-n");
}
}
int main() {
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';
}
}
}
showCube(&cube, DIM);
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);
return 0;
}
当您为数组分配空间时,您可以在三个级别分配内存:
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);