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

时间:2011-03-16 11:02:59

标签: c memory-management struct

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

    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

2 个答案:

答案 0 :(得分:3)

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

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

一般规则很简单 - freemalloc/calloc/realloc/strdup/other allocs,或多或少。请注意,alloca是一种豁免 - 它在堆栈上分配,因此您永远不应该从中获取所有内容。

答案 1 :(得分:1)

myStructArray myStruct[16];

myStruct是在堆栈上创建的对象数组。您无法在其上拨打free。需要对从免费商店获得的资源调用free(使用malloc,realloc等)。相反,您需要在结构成员array1array2上免费调用。