我的結構名爲Table
,它包含一個名爲Object
的結構數組。對象持有另一個指針Object
。我希望有兩個方法 - 即(分別ObjectP
和TableP
)釋放時,指針指向這些結構都給出了Table
一個釋放的Object
和一個:c - 正確釋放結構的內存
這是我目前幼稚的做法絕對不因爲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));
...
}
有什麼警告的例子你看到了嗎? – prprcupofcoffee
你能展示你怎麼分配它們嗎?通常刪除的對象應該涉及到'free'的多次調用,因爲構建必須使用'malloc' – simonc
什麼是'top'?它是第一個元素嗎? –