![](/img/trans.png)
[英]Memory leak - How do I allocate memory for a Typdef Struct passed within another struct as thread arguments?
[英]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
您没有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
是一种豁免-它在堆栈上分配,因此您永远都不应释放从中获得的收益。
myStructArray myStruct[16];
myStruct
是在堆栈上创建的对象的数组。 您不能free
拨打电话。 free
需要被上(使用malloc,realloc的等)从自由存储区获得的资源调用。 相反,您需要对结构成员array1
, array2
免费调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.