嘿!我正在尝试使用 C 中的链表尝试所有可能性,但是当我尝试删除第一项 (pop) 时,我不断收到错误



这是我的代码,问题出在函数pop

在这个程序中,我只是创建一个链表,有两个值,1 和 2。然后我简单地打印列表,然后我再次打印,但在运行弹出功能之后。但是,我一直遇到此警告/错误。如果您能提供帮助,我将不胜感激。

#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int val;
struct node* next;
}
node;
//Print list
void print_list(node * header) {
node * current = header;
while (current != NULL) {
printf("%dn", current->val);
current = current->next;
}
}
//Removing from the list (pop)
int pop(node** header)
{
if (*header == NULL)
{
return -1;
}
node* next_node = *header;
int retvalue = next_node->val;
(*header) = (*header)->next;
free(next_node);
return retvalue;
}

int main(void)
{
//Alllocating the header of the list
node *header = (node*) malloc(sizeof(node));
//Making sure header doesn't return NULL
if (header == NULL)
{
return 1;
}
header->val = 1;
header->next = (node*) malloc(sizeof(node));
header->next->val = 2;
header->next->next = NULL;
printf("Here is the first list:n");
print_list(header);
printf("Here is the list with a removed value (start)(pop):n");
pop(header);
print_list(header);

}

这是我从编译器得到的错误:

warning: incompatible pointer types passing 'node *' (aka 'struct node *') to parameter of type
'node **' (aka 'struct node **'); take the address with & [-Wincompatible-pointer-types]
pop(header);
^~~~~~
&
warning: incompatible pointer types passing 'node *' (aka 'struct node *') to parameter of type
'node **' (aka 'struct node **'); take the address with & [-Wincompatible-pointer-types]
pop(header);
^~~~~~
&

您的编译器错误解释了一切。 函数int pop(node** header)接受address of a pointer of type node作为其参数,而您只是发送value of header,这是一个pointer to the location allocation by malloc

因此,将pop(header)更改为pop(&header).

由于pop()函数采用指向指针的指针,因此必须按如下方式传入一个指针:

pop(&header);

这可能是因为该函数可能需要更改该指针,并且需要作为可变参数直接访问它。

问题是您将node*传递给接受node**pop函数,您只需要传递&header即可使其工作。

使用静态分析器时可以避免这种微小的错误,它会立即突出显示有问题的代码。

相关内容

  • 没有找到相关文章

最新更新