我想知道如何从内存中正确释放结构并完全擦除它。我还需要擦除此结构中的数组或值。我尝试在每次数据更改时用新数据覆盖结构但我观察到内存使用量稳步上升,直到我收到内存警告,所以我认为我最安全的选择是先完全擦除数据然后再写入数据。
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
答案 0 :(得分:3)
您没有malloc
或calloc
myStructArray
所以您不应该free
它。循环遍历元素free
myStruct[i].array1
和array2
for(int i=0;i<16;i++)
{
free(myStruct[i].array1);
free(myStruct[i].array2);
}
一般规则很简单 - free
你malloc/calloc/realloc/strdup/other allocs
,或多或少。请注意,alloca
是一种豁免 - 它在堆栈上分配,因此您永远不应该从中获取所有内容。
答案 1 :(得分:1)
myStructArray myStruct[16];
myStruct
是在堆栈上创建的对象数组。您无法在其上拨打free
。需要对从免费商店获得的资源调用free
(使用malloc,realloc等)。相反,您需要在结构成员array1
,array2
上免费调用。