c-将节点添加到多级链表中



我为这个noob问题道歉,但我真的很难回答。我有一个有两个不同链接的链表:Next和sort。我想用Next添加到前面,但按递增顺序添加以排序。然而,每当我尝试添加以排序时,我都会遇到segfault,我不知道如何访问它们,使它们成为两个不同的链表,具有相同的数据,但顺序不同。

这是我的清单:

typedef struct NODE { 
value_t value;
key_t key;
struct NODE * next; 
struct NODE * sort;
} Node;

这就是我写的方式

Node * add_sorted(Node ** head, int value, key_t key){
Node *new_node = malloc(sizeof(Node));
if (new_node != NULL) {
new_node->sort->value = value;
new_node->sort->key = key;
new_node->sort = *head; 
*head = new_node;
}
return new_node;
}

提前感谢你忍受我的无知

您正试图将值分配给地址空间中未初始化的位置。

new_node->sort->value = value; 
new_node->sort->key = key;

在本部分中,您没有创建*sort,但它被声明为存在。创建new_node并不意味着存在*排序。因为它是一个指针。在这种情况下,它不指向任何地方,而是指向无效。

我不知道这是否与你的问题有关,但我认为你也需要解决这个问题。

希望能有所帮助。

添加时,new_node->sort = *head;没有任何意义。因为,属性sort的先前设置将被擦除。

首先,您要为指针赋值,而不为其分配内存或初始化它。

这应该有效:

if (new_node != NULL) {
new_node->sort = malloc(sizeof(Node));
new_node->sort->value = value;
new_node->sort->key = key;
new_node->sort = *head; 
*head = new_node;
}

还要注意,函数参数int value的类型与分配给它的成员的类型不同。(value_t value(

我还认为这里的new_node->sort = *head;你指的是new_node->next = *head;,因为有了这个赋值数据,你分配给排序字段的数据就会丢失。

最新更新