为什么我不能在if语句中使用空指针?
问题描述:
我试图做列出了简单的功课,我想编写一个函数:如果头是指向为什么我不能在if语句中使用空指针?
- 接收双指针链表的头和一个整数
- 检查某事或NULL
- 如果头指向NULL,然后将其重新分配到新的存储位置包含我的新节点[等]
- 如果不为空,只需添加新节点列表的底部
但是,当我的代码检查头列表是否为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_node *
其中t_node **
预期。这些是不兼容的指针类型。您的程序因此具有未定义的行为。
修复是是:
InserList(&head, tempnum);
然后给你的编译器高水平的警告标志和修复您的代码,直到它没有警告的。
+0
谢谢,我也意识到我做了“ref_head “和”ref_second_head“只是为了这个,但我没有使用它们,我是一个白痴。 再次感谢你 – RaiN
你是怎么称呼'InserList'的?这就是'lis'的来源,毕竟 – StoryTeller
'if(lis == NULL)'不需要取消引用(取决于你如何管理它) – BlackBear
'lis'本身就是一个指针,为什么不先检查它呢? –