我是C的初学者,对于正确使用malloc / free指针有疑问,特别是在链表中。我已经实现了一个方法来向我的链表添加一个新节点。节点“head”是全局变量。创建新节点后,我将其插入列表的前面并重新分配头指向它。这是代码:
int add_entry(char* first_name, char* last_name, char* address, char* telephone)
{
struct node* new_node = (struct node*) malloc(sizeof(struct node));
strcpy(new_node->m_first_name, first_name);
strcpy(new_node->m_last_name, last_name);
strcpy(new_node->m_address, address);
strcpy(new_node->m_telephone, telephone);
if (num_nodes == 0)
head = new_node;
else {
new_node->m_next = head;
head = new_node;
}
num_nodes++;
return 1;
}
我们在课堂上被告知,无论何时我们使用malloc,我们也应该免费使用。但是,在这种情况下,在程序结束时使用free for new_node会导致分段错误。在这种情况下,释放内存的正确方法是什么?谢谢!
答案 0 :(得分:4)
void free_list(struct node *head)
{
struct node *temp;
while (head) {
free(head->m_first_name);
free(head->m_last_name);
free(head->m_address);
free(head->m_telephone);
temp = head;
head = head->m_next;
free(temp);
}
}
答案 1 :(得分:2)
释放你的清单的方法:
void freeList(struct node* head)
{
struct node* tmp;
while (head != NULL)
{
tmp = head;
head = head->next;
free(tmp);
}
}