runtime error: null pointer passed as argument 1, which is declared to never be null

runtime error: null pointer passed as argument 1, which is declared to never be null

我编写了一个程序来创建具有两个值的链表。 它在我只有 int 值时有效,但现在我添加了 char* 此错误消息显示 运行时间错误:作为参数 1 传递的空指针被声明为永远不会为空

如前所述,在我将 char* 添加到构造函数和结构之前,它工作正常。不确定哪里出了问题,因为每次我 运行 错误似乎都来自代码中的不同行...那么我需要更改什么?

   #include <stdio.h>
   #include <cs50.h>
   #include <string.h>

typedef struct node  {
        int val;
        char* name;
        struct node *next;
} node_t;

void addFirst(int value, char* word, node_t** nd) {
        //initialize new node, allocate space, set value
    node_t * tmp;
    tmp = malloc(sizeof(node_t));
    tmp->val = value;
    strcpy(tmp->name, word);
    //let the new nodes next pointer point to the old head
    tmp->next = *nd;
    //Make tmp the head node
    *nd = tmp;



}


int findItem(int value,char* word, node_t *nd) {
    if(nd->val == value)
    return 0;
    while(nd->next != NULL) {
    if(nd->val == value && strcmp(word, nd->name) == 0)
    return 0;

    if(nd->next != NULL)
    nd = nd->next;
    }
    return -1;

}


int main (void) {

 node_t *head = malloc(sizeof(node_t));
 head->val = 0;
  strcpy(head->name, "");
    head->next = NULL;
    addFirst(15, "word", &head);
    addFirst(14,"word2", &head);


    printf("%i \n", findItem(15, "word", head));

}

问题出在strcpy(head->name, "");。在这里,您正在尝试使用 head->name 指向的内存位置指针,但您从未为其分配有效内存。

在写入/读取该内存位置之前,您需要确保指针指向有效的内存位置。尝试访问无效内存调用 undefined behavior

这也适用于 name 的其他未初始化实例。

如果您可以使用 POSIX 标准,而不是 strcpy(),您可以使用 strdup()