为什么我的函数不接受双指针?
Why is my function not accepting a double pointer?
我有一个散列 table 声明如下:
node* table[26];
下面是应该释放散列的函数 table:
bool unload(void)
{
// TODO
for (int i = 0; i < 26; i++)
{
free_table(&table[i]);
if (table[i] != NULL)
{
return false;
}
}
return true;
}
void free_table(node** hash)
{
if (*hash == NULL)
{
return;
}
free_table((*hash) -> next);
free(*hash);
*hash = NULL;
}
问题是每当我尝试编译时,我都会收到以下错误:
error: incompatible pointer types passing 'node **' (aka 'struct node **') to parameter of type 'node *' (aka 'struct node *'); remove & [-Werror,-Wincompatible-pointer-types]
free_table(&table[i]);
^~~~~~~~~
我做错了什么?
free_table
在 free_table
定义的第 4 行再次递归调用 free_table
as
free_table((*hash) -> next);
此外,您是否将 free_table
声明为
free_table(node ** hash);
(在头文件或其他地方)在这里定义之前?我怀疑你可能是函数声明有误,导致编译出错
我猜测struct成员next
的类型是node *
,也就是说(*hash) -> next
的类型也是node *
。将该行更改为以下内容应该可以工作,即获取 (*hash) -> next
.
的地址
free_table(&((*hash) -> next));
我有一个散列 table 声明如下:
node* table[26];
下面是应该释放散列的函数 table:
bool unload(void)
{
// TODO
for (int i = 0; i < 26; i++)
{
free_table(&table[i]);
if (table[i] != NULL)
{
return false;
}
}
return true;
}
void free_table(node** hash)
{
if (*hash == NULL)
{
return;
}
free_table((*hash) -> next);
free(*hash);
*hash = NULL;
}
问题是每当我尝试编译时,我都会收到以下错误:
error: incompatible pointer types passing 'node **' (aka 'struct node **') to parameter of type 'node *' (aka 'struct node *'); remove & [-Werror,-Wincompatible-pointer-types]
free_table(&table[i]);
^~~~~~~~~
我做错了什么?
free_table
在 free_table
定义的第 4 行再次递归调用 free_table
as
free_table((*hash) -> next);
此外,您是否将 free_table
声明为
free_table(node ** hash);
(在头文件或其他地方)在这里定义之前?我怀疑你可能是函数声明有误,导致编译出错
我猜测struct成员next
的类型是node *
,也就是说(*hash) -> next
的类型也是node *
。将该行更改为以下内容应该可以工作,即获取 (*hash) -> next
.
free_table(&((*hash) -> next));