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

时间:2018-02-14 02:49:18

标签: c memory struct malloc free

编辑:由于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);

}

1 个答案:

答案 0 :(得分:2)

永远记住一件事,无论您使用free及其朋友分配了什么,您都会转到malloc

您已通过free(&(stp.signals[i].intervals));,为什么要传递stp.signals[i].intervals stp.signals[i].intervals的地址,其中包含已分配的地址块。*alloc (刚使用free(stp.signals[i].intervals)创建的内存块的起始地址)所以 success: function (file, response) { setImageAfterUpload(file); } function setImageAfterUpload(filename) { var imgSrcValue= $('img[alt="'+ filename.name +'"]').first().prop('src'); //get the src value document.getElementById("displayImage").src = imgSrcValue; //set it to an existing img tag on the page } 是释放它的正确方法。

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

来自标准7.22.3.3p2

  

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