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->name
和 node->telephone
是 而不是 指向单独分配的内存块的指针,它们只是 *node
的一部分。将 freeTelephoneBookNode
函数缩减为
void freeTelephoneBookNode(TelephoneBookNode * node) {
free(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->name
和 node->telephone
是 而不是 指向单独分配的内存块的指针,它们只是 *node
的一部分。将 freeTelephoneBookNode
函数缩减为
void freeTelephoneBookNode(TelephoneBookNode * node) {
free(node);
}