这是我的代码,问题出在函数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
即可使其工作。
使用静态分析器时可以避免这种微小的错误,它会立即突出显示有问题的代码。