c - C 中的双重自由或腐败 3d 数组

标签 c arrays malloc free corruption

我在释放 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/

相关文章:

c# - 如何检查 List < int[ ] > 是否包含与另一个 int[ ] 存储相同值的 int[] 元素?

c - 使用 malloc 时出错

image - OpenGL 与 GLUT——malloc 错误

C99 标准 - fprintf - s 精确转换

arrays - 动态/列表/​​数组变量抖动上的setState

javascript - 您可以使用 Array.map 来根据条件摆脱它所作用的元素吗?

c - 出现段错误 11 不确定在 C 中是否正确使用指针

c++ - C 和汇编程序实际上编译成什么?

c - scanf中的空格导致结果异常

c - fscanf 上的段错误