C 链表中的前进指针

C 链表中的前进指针,c,pointers,linked-list,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;

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

    * 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;   

}

我不知道该如何让它进入下一个链接;第一个条目打印得很好,其余条目看起来像是在出现分段错误之前从随机内存地址打印的

如果您的列表被设计成“实体”对象的容器,就像add函数中显示的那样,那么我很快就会看到两个问题。首先,实体数据类型应该完全独立于列表数据类型,因此将其强制转换为列表添加中的
link\t*
是错误的,充其量也会造成混乱。这可能是第二个问题的根源:列表中的下一个指针不应该指向“实体”对象。“下一步”指针应仅指向使用list_add创建的列表中的有效项。我还没有详细研究你的list\u next\u链接打算做什么,但是用列表中包含的值覆盖“next”指针几乎肯定是错误的。将列表项中的任何数据重新解释为列表指针肯定会导致问题。

分配
list->last->next
的两行代码应该做什么?我将重写它并记住这一点。我假设next指向的有效项是整个链接(包括它们自己的“next”子结构),而不仅仅是实体?“entity”是一个空指针,用于返回泛型类型,所以我(错误地)使用了类型转换。