C 为什么不能在if语句中使用空指针?
我正在尝试用列表做一个简单的家庭作业,我想编写一个函数: 接收指向列表头和整数的双指针 检查头部是否指向某个对象或NULL 如果head指向NULL,则将其重新分配到包含我的新节点的新内存位置[etc] 如果不为null,只需将新节点添加到列表的底部 但是,当我的代码检查头列表是否为空时,我收到一个读访问内存冲突; 这是我的代码: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_
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);