繁体   English   中英

如何从内存和其中的数组释放结构

[英]how do I release a struct from memory and arrays within them

我想知道如何从内存中正确释放结构并完全擦除它。 我还需要擦除此结构中的数组或值。 每次数据更改时,我都尝试用新数据覆盖结构,但是观察到内存使用量一直在稳定增长,直到收到内存警告,所以我认为最安全的选择是先完全擦除数据,然后再次写入。

    typedef struct {


        SInt16  *array1;     
        SInt16  *array2;    

    } myStruct, *myStructPtr;


 myStructArray        myStruct[16];

    for(int i=0;i<16;i++)

    {
        myStruct[i].array1 =
        (AudioUnitSampleType *) calloc (asize, sizeof (SInt16));

        myStruct[i].array2 =
        (AudioUnitSampleType *) calloc (asize, sizeof (SInt16));

    }

   free(myStructArray) // throws SIGBART error

您没有malloccalloc myStructArray所以您不应该free它。 循环遍历元素并free myStruct[i].array1array2

for(int i=0;i<16;i++)
    {
        free(myStruct[i].array1);
        free(myStruct[i].array2);
    }

一般规则很简单- free您的malloc/calloc/realloc/strdup/other allocs ,不多多少少。 请注意, alloca是一种豁免-它在堆栈上分配,因此您永远都不应释放从中获得的收益。

myStructArray myStruct[16];

myStruct是在堆栈上创建的对象的数组。 您不能free拨打电话。 free需要被上(使用malloc,realloc的等)从自由存储区获得的资源调用。 相反,您需要对结构成员array1array2免费调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM