繁体   English   中英

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

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

注意此答案与问题的初始版本有关。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM