问题:如果我有一个指向“ints”结构的指针(如下所示)并将其转换为 void 并返回,这是否意味着我不再允许释放它? free 如何跟踪分配大小?
typedef struct ints
{
int size;
int *data;
}
ints;
static void dev_array_cleanup(void *array, array_type type)
{
switch(type)
{
case INT:
ints *i = (ints*) array;
free(i->data);
free(i);
i = NULL;
break;
}
}
static void* dev_array_set(void *array, int size, array_type type)
{
void *p;
switch(type)
{
case INT:
ints *i = (ints*) malloc(sizeof(ints));
i->size = size;
i->data = (int*) malloc(size * sizeof(int));
p = (void*) i;
break;
}
return p;
}
我不能再释放它了?
是的,您可以
free
。事实上,你必须(最终)free
它才能避免内存泄漏。
free
不关心指针指向的类型 - 它接受 void*
。void*
。free
(无论是否强制转换)。
free 如何跟踪分配大小?
这是由运行时库内部完成的,不依赖于类型。