gpt4 book ai didi

c - 删除列表中的最后一个元素

转载 作者:太空宇宙 更新时间:2023-11-04 00:07:19 25 4
gpt4 key购买 nike

我目前在结构中使用列表,如下所示:

这是一个从列表中删除元素的函数。我从 for 循环开始遍历整个列表。如果 i 小于它进入 if 语句的条目数。然后它把旧位置变成一个保持指针。使旧的 on = 为 NULL,然后移动列表,以便下面的元素占据它的位置。

这是我调用此函数时的示例列表:

100125150

当我这样做时,我想从它经过的列表中删除 150,但失去了对列表中内存的访问权限 -> wlist_ptr[i] -> eth_address。然后我得到一个设置错误。有没有办法绕过轨道?

最佳答案

循环中有一个很大的错误。

只有一个元素“上移”,设置为null后上移。

所以,这个 列表 -> wlist_ptr[i] = NULL; list->wlist_ptr[i-1] = list->wlist_ptr[i];

需要对此进行更改以防止向上移动 NULL:

        list->wlist_ptr[i-1] = list->wlist_ptr[i];
list -> wlist_ptr[i] = NULL;

但是,需要一个循环来遍历列表的其余部分,以便将它们向上移动。 memmove 是你的 friend 。还要记住,完成后,您不想为下一次迭代增加 i,因为列表中的下一个元素现在将位于原始 i 位置。

也许这会完成工作:

struct wifi_info_t *wifilist_remove(struct wifilist_t * list, int user_address)
{
int i;
int count;
struct wifi_info_t *ptr;
ptr = NULL;

count = wifilist_number_entries(list);

// TODO: take out the ( ptr == NULL ) logic if more than one match needs to be
// removed.
for(i=0; ( i < count ) && ( ptr == NULL ); i++)
{
if(list -> wlist_ptr[i] -> eth_address == user_address)
{
ptr = list -> wlist_ptr[i];
if ( i < ( count - 1 ) )
memmove(&(wlist_ptr[i]), &(wlist_ptr[i + 1]), (count - (i + 1)) * sizeof(wlist_ptr[0]));

// TODO: decrement the length of the list returned by
// wifilist_number_entries(list)
}
}
if(ptr != NULL)
{
list->wlist_entries--;
}
return ptr;
}

请注意,我只是在此处键入此内容,因此可能存在语法错误或类似错误。

关于c - 删除列表中的最后一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18524644/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com