使用节点的分段错误struct

问题描述:

我有这种方法给我一个分段错误,我无法弄清楚。我们必须删除与给定名称相匹配的节点。使用节点的分段错误struct

typedef struct node 
{ 
int id; 
char* name; 
struct node* next; 
} node; 

node* rem_inorder(node** head, char* key_name) 
{ 

node* temp = *head; 
int found =0; 
while(temp -> next != NULL &&!found) 
{ 

if(temp -> name == key_name){ 
    printf("works"); 
    found = -1;} 
else { 
    temp = temp ->next;}} 
if(found == -1) 
{return temp;} 
else 
{return NULL;}} 
+0

没有问题我中所示的代码看到。在你开始使用这个功能之前,你的链表可能会从其他地方断开。你做的唯一的解除引用是'temp->',这表明'* head'不好。 – yano

+0

你的意思是说这个*头是不好的。这只是通过列表的一个临时变量。我还应该如何将它分配给头部? –

+0

我在说'* head'可能是'NULL'或者一些垃圾值,如果你确实在这个函数中出现了段错误。 – yano

对于初学者的功能有未定义的行为,因为表达式*head的值可以等于NULL为空列表。在这种情况下,此表达式temp -> next将无效。

当您搜索节点时,您还必须比较字符串而不是指针。

根据分配的描述,您必须从列表中删除找到的节点。

该函数可以被定义如下方式

node * rem_inorder(node **head, const char *key_name) 
{ 
    node *target = NULL; 

    while (*head && strcmp((*head)->name, key_name) != 0) 
    { 
     head = &(*head)->next; 
    } 

    if (*head != NULL) 
    { 
     target = `*head; 
     *head = (*head)->next; 
     target->next = NULL; 
    } 

    return target; 
}` 
+0

非常感谢! –