我在释放 3d 数组时收到“双重释放或损坏”错误。谁能告诉我代码中的问题在哪里? 数组大小为2*N*N。这里 N 的值为 100。即使不进行转换,结果相同。 这是代码:
// Mallocing
double ***h = malloc(2 * (sizeof(double**)));
for(i = 0; i < N; i++) {
h[i] = malloc(N * sizeof(double*));
for(j = 0; j < N; j++) {
h[i][j] = malloc(N * sizeof(double));
}
}
// Freeing
for(i = 0; i < N; i++) {
for(j = 0; j < N; j++) {
free(h[i][j]);
}
free(h[i]);
}
free(h);
程序运行良好,但最后我收到错误消息“双重释放或损坏 (!prev): 0x08cd24f8” 已中止(核心已转储)。
最佳答案
对于第一个维度,您分配了 2 个元素:
double ***h = (double***) malloc(2 * (sizeof(double**)));
但是你把它当作有 N
个元素:
for(i = 0; i < N; i++) {
h[i] = ...
将最外层循环的分配和自由比较更改为:
for(i = 0; i < 2; i++) {
也不要强制转换 malloc
的返回值。此外,您的代码缺少错误处理,如果分配失败将会中断。
关于c - C 中的双重自由或腐败 3d 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28317035/