首页 > 解决方案 > 在 C 中创建和释放 3D 数组的内存

问题描述

我是 C 的初学者。我得到了一个制作我一直使用的 2D 数组内存的例子。示例如下:

    complex** calloc_com2d(int value1, int value2){
  complex **c;
  int i;

  c = (complex**)calloc(value1, sizeof(complex*));
  if(c==NULL){
    perror("MemError.\n");
    exit(1);
  }
  for(i=0; i<value1; i++){
    c[i] = (complex*)calloc(value2, sizeof(complex));
    if(c[i]==NULL){
      perror("MemError.\n");
      exit(1);
    }
  }
  return c;
}

制作二维数组内存的另一个版本如下:

complex **mat_new(int t,int r){
  int  i;
  complex **tmp;
  tmp = (complex**)calloc(t, sizeof(complex*));
  for(i=0;i<t;i++){
    tmp[i] = (complex*)calloc(r, sizeof(complex));
  }
  // MEM+=2;
  return tmp;
}

问题是我不知道哪个更好用,如果我想为 3d 数组创建内存,我该怎么办?如果我想释放这个 3D 数组的内存,我该怎么办。

我试图写3D数组的内存。我不知道它是否顺利。我认为这不太正确。

complex*** calloc_com3d(int value1, int value2, int value3){
      complex ***c;
      int i, j;

      c = (complex***)calloc(value1, sizeof(complex*));
      if(c==NULL){
        perror("MemError.\n");
        exit(1);
      }
      for(i=0; i<value1; i++){
        c[i] = (complex**)calloc(value2, sizeof(complex*));
        if(c[i]==NULL){
          perror("MemError.\n");
          exit(1);
        }
        for ( j = 0; j < value2; j++) {
          c[j] = (complex**)calloc(value3, sizeof(complex));
          if(c[j]==NULL){
            perror("MemError.\n");
            exit(1);
          }
        }
      }
      return c;
    }

非常感谢您的阅读。非常感谢您的帮助。

标签: arraysmultidimensional-array

解决方案


推荐阅读