[英]advancing pointer in a 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;
}
我不确定我应该如何让它前进到下一个链接; 第一个条目打印正常,其余条目看起来像是在有分段错误之前从随机内存地址打印。
如果您的列表被设计为“实体”对象的容器,就像您从添加功能中看到的那样,那么我很快就会看到两个问题。 首先,实体数据类型应完全独立于列表数据类型,因此将其强制转换为list_add中的link_t *
是错误的,最多会令人困惑。 这可能是第二个问题的根源:列表中的下一个指针不应指向“实体”对象。 “next”指针应该只指向使用list_add创建的列表中的有效项。 我没有详细你的list_next_link是为了做研究,但它几乎肯定是错误的覆盖与列表中所含值“下一个”指针。 重新解释列表项中的任何数据作为列表指针必然会导致问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.