我的结构体名为
Table
,它包含了一个名为Object
的结构体数组。Object结构体包含指向另一个Object
的指针。我想创建两个方法——一个用于释放Object
,另一个用于释放Table
,当给定这些结构体的指针(分别为ObjectP
和TableP
)时:
这是我当前天真无知的实现,完全不起作用,因为valgrid在各个地方都在报警告(我从Java转过来,对C语言非常陌生):
/*
* Represents a linked list containing a key value
*/
typedef struct Object {
void *key;
struct Object *top;
struct Object *next;
Boolean originalCell;
} Object;
/*
* Represents a table that stores keys based on a given object's hash
*/
typedef struct Table{
Object *linkedObjects;
size_t size, originalSize;
HashFcn hfun;
PrintFcn pfun;
ComparisonFcn fcomp;
Boolean wasDuplicated;
} Table;
void FreeObject(ObjectP object)
{
free(object);
}
void FreeTable(TableP table)
{
free(table);
}
如何正确释放这些结构体?
编辑:
这是我分配变量的方式:
ObjectP CreateObject(void *key)
{
struct Object *object = (struct Object*) malloc(sizeof(struct Object));
...
}
TableP CreateTable(size_t tableSize, HashFcn hfun, PrintFcn pfun, ComparisonFcn fcomp)
{
struct Table *table = malloc(sizeof(Table));
if (table==NULL)
{
ReportError(MEM_OUT);
return NULL;
}
table->linkedObjects = NULL;
table->linkedObjects = malloc(tableSize * sizeof(Object));
...
}
malloc
相同数量的free
调用。 - simonctop
?它是第一个元素吗? - Adam Sznajdertable->linkedObjects = malloc(tableSize * sizeof(Object));
而对于表格,你的对象中也不需要next
指针。 - Roddy