という名前Table
の構造体は、という名前の構造体の配列を保持していObject
ます。オブジェクトは別のへのポインタを保持しますObject
。2つのメソッドを作成したいと思います。1つはanを解放し、もう1つはこれらの構造体へのポインターが与えられObject
たときにaを解放します(それぞれ)。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));
...
}