[英]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->name
和node->telephone
不是指向单独分配的内存块的指针,它们只是*node
。 将freeTelephoneBookNode
函数减少为
void freeTelephoneBookNode(TelephoneBookNode * node) {
free(node);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.