使用节点的分段错误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;}}
答
对于初学者的功能有未定义的行为,因为表达式*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
非常感谢! –
没有问题我中所示的代码看到。在你开始使用这个功能之前,你的链表可能会从其他地方断开。你做的唯一的解除引用是'temp->',这表明'* head'不好。 – yano
你的意思是说这个*头是不好的。这只是通过列表的一个临时变量。我还应该如何将它分配给头部? –
我在说'* head'可能是'NULL'或者一些垃圾值,如果你确实在这个函数中出现了段错误。 – yano