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”是一个空指针,用于返回泛型类型,所以我(错误地)使用了类型转换。