内联实现和函数调用在C中显示了两种不同的行为?
我一直在尝试实现单链表的删除功能 我的实现如下内联实现和函数调用在C中显示了两种不同的行为?,c,function,pointers,data-structures,linked-list,C,Function,Pointers,Data Structures,Linked List,我一直在尝试实现单链表的删除功能 我的实现如下 typedef struct singly_linked_list{ int data; struct singly_linked_list *next; }sll; 删除第一个节点的功能如下: void delete_node_from_front(sll ** head){ sll ** temp; *temp = *head; (*head) = (*head)->next; (*tem
typedef struct singly_linked_list{
int data;
struct singly_linked_list *next;
}sll;
删除第一个节点的功能如下:
void delete_node_from_front(sll ** head){
sll ** temp;
*temp = *head;
(*head) = (*head)->next;
(*temp)->next = NULL;
free_node(temp);
}
我调用此函数的另一个函数:
void delete_node_from_given_pos(sll ** head, int pos){
int i = 1;
sll * temp;
sll * prev;
temp = *head;
prev = *head;
if(pos == 1){
delete_node_from_front(head);
}
else{
while(temp != NULL && i < pos){
i++;
prev = temp;
temp = temp->next;
}
if(temp != NULL){
prev->next = temp->next;
temp->next = NULL;
free_node(&temp);
}
else{
printf("Node with given position is not present");
}
}
}
void free_node(sll ** head){
free(*head);
}
程序运行良好。我称之为功能的方式:
sll * head;
head = NULL;
int arr[_SIZE]=_ELEMENT;
create_list(&head, arr, _SIZE);
delete_node_from_given_pos(&head, 1);
print_list(head);
打印列表功能的实现
自由_节点功能的实现:
void delete_node_from_given_pos(sll ** head, int pos){
int i = 1;
sll * temp;
sll * prev;
temp = *head;
prev = *head;
if(pos == 1){
delete_node_from_front(head);
}
else{
while(temp != NULL && i < pos){
i++;
prev = temp;
temp = temp->next;
}
if(temp != NULL){
prev->next = temp->next;
temp->next = NULL;
free_node(&temp);
}
else{
printf("Node with given position is not present");
}
}
}
void free_node(sll ** head){
free(*head);
}
此行为的可能原因是什么?您的“从前端删除节点”功能显示未定义的行为;temp指向哪里?@OliverCharlesworth链接列表的标题。初始化*temp=*头是否错误??那么正确的方法是什么?*temp=*head;这是错误的。temp未初始化*温度=*水头;应为sll*温度=*压头;在使用“指针”和“指针指向指针”时,它可以帮助我拿一张纸,在malloced内存、箭头下一个指针和命名箭头指针变量中绘制框。所以ssl**temp将绘制为一个框,一个ssl,一个指向带有未命名变量或命名*temp的框的箭头,另一个箭头指向带有标签temp的未命名变量。这表明:如果你需要这个构造,你需要为这个未命名的*temp调用malloc内存。