C - 无法释放双向链表节点

C - Unable to free doubly linked list node

我有这样的数据结构:

typedef struct telephoneBookNode
{
    int id;
    char name[NAME_LENGTH];
    char telephone[TELEPHONE_LENGTH];
    struct telephoneBookNode * previousNode;
    struct telephoneBookNode * nextNode;
} TelephoneBookNode;

typedef struct telephoneBookList
{
    TelephoneBookNode * head;
    TelephoneBookNode * tail;
    TelephoneBookNode * current;
    unsigned size;
} TelephoneBookList;

我可以创建节点,并使列表包含数据,因为我在显示列表、插入或移动节点时没有问题....

但是当我编写擦除列表的函数时,出现错误:

PhoneBook(6187,0x7fff77045000) malloc: *** error for object 0x7f87c1f00004: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug

这是我的橡皮擦功能:

void freeTelephoneBookList(TelephoneBookList* aList) {
    TelephoneBookNode* node;
    TelephoneBookNode* temp = aList->head;

    while (temp) {
        node = temp;
        temp = node->nextNode;
        freeTelephoneBookNode(node);
    }
    free(aList);
}

void freeTelephoneBookNode(TelephoneBookNode * node) {
    free(node->name);
    free(node->telephone);
    free(node);
}

请任何人告诉我我在这里做错了什么。谢谢!

注意这个答案与问题的initial version有关。

变量 node->namenode->telephone 而不是 指向单独分配的内存块的指针,它们只是 *node 的一部分。将 freeTelephoneBookNode 函数缩减为

void freeTelephoneBookNode(TelephoneBookNode * node) {
    free(node);
}