C 为什么不能在if语句中使用空指针?

C 为什么不能在if语句中使用空指针?,c,list,function,pointers,linked-list,C,List,Function,Pointers,Linked List,我正在尝试用列表做一个简单的家庭作业,我想编写一个函数: 接收指向列表头和整数的双指针 检查头部是否指向某个对象或NULL 如果head指向NULL,则将其重新分配到包含我的新节点的新内存位置[etc] 如果不为null,只需将新节点添加到列表的底部 但是,当我的代码检查头列表是否为空时,我收到一个读访问内存冲突; 这是我的代码: void InserList(t_node** lis, int x) { t_node* temp; temp = malloc(sizeof(t_

我正在尝试用列表做一个简单的家庭作业,我想编写一个函数:

接收指向列表头和整数的双指针 检查头部是否指向某个对象或NULL 如果head指向NULL,则将其重新分配到包含我的新节点的新内存位置[etc] 如果不为null,只需将新节点添加到列表的底部 但是,当我的代码检查头列表是否为空时,我收到一个读访问内存冲突; 这是我的代码:

void InserList(t_node** lis, int x) {
    t_node* temp;
    temp = malloc(sizeof(t_node));
    temp->num = x;
    if (*lis == NULL) {
        temp->next = NULL;
        *lis = temp;
    }
    else {
        temp = *lis;
        while (temp->next != NULL) {
            temp = temp->next;
        }
        temp->next = malloc(sizeof(t_node));
        temp->next->num = x;
        temp->next->next = NULL;
    }
}
我的代码在执行此操作之前不会出现问题:

if (*lis == NULL) {
        ...
 }
给我一个错误lis是nullptr。 我的想法错了吗?如何修复此函数

多谢各位

编辑:这是主要功能

int main(void) {
    int elements;
    int count;
    int tempnum;
    t_node *head, *second_head;
    head = second_head = NULL;
    t_node **ref_head, **ref_second_head;
    ref_head = &head;
    ref_second_head = &second_head;
    scanf("%d", &elements);
    for (count = 0; count != elements; count++) {
        scanf("%d", &tempnum);
        InserList(head, tempnum);
        if (IsPrimo(tempnum) == false) {
            InserList(second_head, tempnum);
        }
    }
    PrintList(second_head);
}

这就是为什么您应该使用警告进行编译。以下是您要做的:

InserList(head, tempnum);
您传递了一个t_节点*,其中需要一个t_节点**。这些是不兼容的指针类型。因此,您的程序具有未定义的行为

修正为:


然后为编译器提供高级警告标志,并修复代码,直到它没有警告为止

你是怎么称呼英塞利斯特的?这就是lis的来源,在Allifis==NULL之后,不需要取消引用取决于您如何管理它本身是一个指针,为什么不先检查它?当问题缺少信息时,人们开始猜测问题是什么。请阅读并提供。INSERLISTAD,tempnum;->InserList&head,tempnum;谢谢,我也意识到我做了ref_head和ref_second_head只是为了这个,但我没有用它们,我真是个白痴。再次谢谢你
InserList(&head, tempnum);