我有一个链表
typedef struct LinkedList {
Element* arrayOfStruct;
struct LinkedList* next;
} LinkedList;
指向一个名为arrayOfElements的结构数组,它包含名为Element的结构。
typedef struct {
char colName[30];
data_type type;
void* data;
} Element;
首先,链接列表的头部已初始化
struct LinkedList *head =NULL;
然后arrayOfElements是malloc'd
Element* arrayOfElements;
arrayOfElements= malloc(columns * sizeof(Element));
arrayOfElements的每个元素都是malloc'd
arrayOfElements[ii].data = malloc( sizeof(int) );
最后链接列表的每个新节点都是malloc'd
LinkedList* insertNode = malloc(sizeof(LinkedList));
我如何创建一个函数,我只是导入头部并释放所有已分配的内存?
我想它会是这样的
First LL node ---->
Free all the elements of arrayOfElements ---->
Free arrayofElements itself ------->
traverse to 2nd Node ----->
Free First Node
CYCLE UNTIL NO MORE LINKED LIST NODES
我的代码:
void FreeList(LinkedList* head, int columns)
{
Element* arrayPtr;
void* elementPtr;
for (ii=0 ; ii<columns; ii++)
{
//arrayptr points to the ii instance of arrayOfStruct
arrayPtr = &head->arrayOfStruct[ii];
//elementPtr points to the data member of the struct Element
elementPtr = arrayPtr ->data;
free(elementPtr);
free(arrayPtr);
}
//frees linked list
free(head);
}
我怀疑这是否是正确的方法,我不确定何时添加该行以转到下一个节点。