推进链表中的指针

时间:2015-03-04 20:48:46

标签: c pointers linked-list

我试图创建一个函数来将链表中的当前指针前进到列表中的下一个实体。这是我的列表结构;

    * malloc() a new list header and initialize it */
list_t *list_init(void)
{
    list_t *list = (list_t *)malloc(sizeof(list_t));
      list->first = NULL;            
          list->last = NULL; 
      list->current = NULL; 
return list;      
}

这是我的链接结构

    /* add an element to the end of a list */
void list_add(list_t *list, void *entity)
{
    link_t *link = (link_t *)malloc(sizeof(link_t));       
         link->entity = (link_t *)entity; 
     //link->next = (link_t *)list;  
       if(list->first != NULL){
            list->last = link;
            link->next = NULL;
            list->last->next = list->current;
            list->current = list->last;
       }        
               else { 

               list->first = link->entity;  }
}

这是我正在尝试创建的函数,我在使其进入下一个实体时遇到问题

/* advance current pointer to next link */
void list_next_link(list_t *list)
{

   assert(list->current != NULL);

    list->last->next = list->current;
    list->last->next =list->current->entity;
    list->current = NULL;   

}

我不确定我应该如何让它前进到下一个链接;第一个条目打印正常,其余条目看起来像是在有分段错误之前从随机内存地址打印。

1 个答案:

答案 0 :(得分:0)

如果您的列表被设计为“实体”对象的容器,就像您从添加功能中看到的那样,那么我很快就会看到两个问题。首先,实体数据类型应完全独立于列表数据类型,因此将其强制转换为list_add中的link_t *是错误的,最多会令人困惑。这可能是第二个问题的根源:列表中的下一个指针不应指向“实体”对象。 “next”指针应该只指向使用list_add创建的列表中的有效项。我没有详细检查你的list_next_link 想要做什么,但是用列表中包含的值覆盖“next”指针几乎肯定是错误的。将列表项中的任何数据重新解释为列表指针一定会导致问题。