C:正确使用malloc作为链表

时间:2014-01-30 13:49:26

标签: c list memory malloc

我是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会导致分段错误。在这种情况下,释放内存的正确方法是什么?谢谢!

2 个答案:

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

}
相关问题