链表中的前进指针
advancing pointer in a linked list
我正在尝试创建一个函数来将 linked 列表中的当前指针推进到列表中的下一个实体。这是我的列表结构;
* 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;
}
这是我的 link 结构
/* 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;
}
我不确定我应该如何让它进入下一个 link;第一个条目打印正常,其余条目看起来像是在出现分段错误之前从随机内存地址打印出来的。
如果您的列表设计为包含 "entity" 个对象的容器,正如您的 add 函数所显示的那样,那么我很快就会发现两个问题。首先,实体数据类型应该完全独立于列表数据类型,因此将其转换为 link_t *
in list_add 是错误的,充其量只会造成混淆。这可能是第二个问题的根源:列表中的下一个指针不应该指向 "entity" 对象。 "next" 指针应该只指向使用 list_add 创建的列表中的有效项目。我没有详细检查您的 list_next_link 是 打算 做什么,但是用列表中包含的值覆盖 "next" 指针几乎肯定是错误的。将列表项中的任何数据重新解释为列表指针必然会导致问题。
我正在尝试创建一个函数来将 linked 列表中的当前指针推进到列表中的下一个实体。这是我的列表结构;
* 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;
}
这是我的 link 结构
/* 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;
}
我不确定我应该如何让它进入下一个 link;第一个条目打印正常,其余条目看起来像是在出现分段错误之前从随机内存地址打印出来的。
如果您的列表设计为包含 "entity" 个对象的容器,正如您的 add 函数所显示的那样,那么我很快就会发现两个问题。首先,实体数据类型应该完全独立于列表数据类型,因此将其转换为 link_t *
in list_add 是错误的,充其量只会造成混淆。这可能是第二个问题的根源:列表中的下一个指针不应该指向 "entity" 对象。 "next" 指针应该只指向使用 list_add 创建的列表中的有效项目。我没有详细检查您的 list_next_link 是 打算 做什么,但是用列表中包含的值覆盖 "next" 指针几乎肯定是错误的。将列表项中的任何数据重新解释为列表指针必然会导致问题。