free()给我一个错误的无效对话,从聊天到无效

时间:2019-02-27 15:39:12

标签: c memory-management malloc free

我正在学习有关动态内存的知识,并尝试编写一些代码。但是,乳清我尝试运行它输出一个错误,但我无法解决该错误。我一定对malloc()的使用有问题,但是我不确定。

错误指向此处-> free(cube [c] [b] [a]);

谢谢!

这是我的代码:

var oTable = $('#carrier-profile-listing').DataTable();

$('#carrier-drpdwn').on('change', 'select[name="carrier_id"]', function() {
  var textSelected = $('#carrier-drpdwn option:selected').text();
  oTable.columns(0).search(textSelected).draw(); // note columns(0) here
});

1 个答案:

答案 0 :(得分: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);