c-取消对列表的双指针的引用



这是节点

typedef struct s_list
{
void            *content;
struct s_list   *next;
}               t_list;
void    ft_lstclear(t_list **lst, void (*del)(void*))
{
t_list  *temp;
while ((*lst) != NULL)
{
temp = (*lst)->next;
del((*lst)->content);
free(*lst);
*lst = temp;
}
}

为什么当我从函数中删除((时不起作用

void    ft_lstclear(t_list **lst, void (*del)(void*))
{
t_list  *temp;
while (*lst != NULL)
{
temp = *lst->next;
del(*lst->content);
free(*lst);
*lst = temp;
}
} 

我正在尝试删除并释放给定的元素和该元素的继承者,使用函数"del"和免费(3(。指向列表的指针必须设置为NULL。

这里的问题是"运算符优先级"(https://en.cppreference.com/w/cpp/language/operator_precedence)。

从列表中可以看出,->的求值优先级高于*,这意味着编译器将尝试"访问**的成员",而不是首先将**解引用为*。

大括号告诉编译器首先将**取消引用为*,然后访问成员属性。

事实上,这很像数学。

方程为:4 + 3 * 3 = 13,而(4 + 3) * 3 = 21

后缀运算符的优先级高于一元运算符。

因此表达式

*lst->next

相当于

*( lst->next )

但是指针CCD_ 5不指向该结构类型的对象。它指向另一个指针。所以这个表达式lst->next导致了未定义的行为。

相关内容

  • 没有找到相关文章

最新更新