我正在学习有关动态内存和尝试编写代码的东西。但是乳清我尝试运行它输出错误,我无法解决错误。使用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);