c -free()给了我从聊天到void的错误对话的错误



我正在学习有关动态内存的知识,并尝试编写一些代码。但是,我尝试运行它会输出错误,但我无法解决错误。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);

相关内容

  • 没有找到相关文章

最新更新