释放指向结构数组的链表

时间:2016-10-27 18:20:20

标签: c arrays memory-management struct

我有一个链表

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);
    }

我怀疑这是否是正确的方法,我不确定何时添加该行以转到下一个节点。

0 个答案:

没有答案