free()给我一个错误,从char转换为void无效

问题描述 投票:0回答:1

我正在学习有关动态内存和尝试编写代码的东西。但是乳清我尝试运行它输出错误,我无法解决错误。使用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;
}
c memory-management malloc free
1个回答
3
投票

为数组分配空间时,可以在三个级别分配内存:

  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);
© www.soinside.com 2019 - 2024. All rights reserved.