C 编程:释放结构中的嵌套多维数组

昏迷

编辑:由于 coderredoc 建议的表述不佳,我正在关闭此问题。

我有一个自由函数的问题,我错误地将一个位置的地址作为参数。

    void freeMemory(Stack stp, int n){
    for(int i=0; i<n; i++){
        free(&(stp.signals[n].intervals));
    }
    free(stp.signals);

}

这是正确的代码(查看下面了解更多信息)

    void freeMemory(Stack stp, int n){
    for(int i=0; i<n; i++){
        free(stp.signals[n].intervals);
    }
    free(stp.signals);

}
用户2736738

永远记住一件事,你会传递给free你分配使用的任何东西,malloc它是朋友。

在这里,你已经通过了free(&(stp.signals[i].intervals));,为什么你传递的地址,stp.signals[i].intervals它的stp.signals[i].intervals其中包含分配块的地址。(刚刚使用创建的内存块的起始地址*alloc)所以free(stp.signals[i].intervals)是释放它的正确方法。

准确地说,您在这里所做的是未定义的行为。

从标准7.22.3.3p2

free 函数导致 ptr 指向的空间被释放,即可供进一步分配。如果 ptr 是空指针,则不会发生任何操作。否则,如果参数与之前由内存管理函数返回的指针不匹配,或者如果空间已通过调用 free 或 realloc 释放,则行为未定义

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章