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