我正在尝试用列表做一个简单的作业,我想编写一个函数:
但是当我的代码检查头列表是否为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 is 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);
}
答案 0 :(得分:2)
这就是你应该编译警告的原因。这是你做的:
InserList(head, tempnum);
您传递的t_node *
预计会t_node **
。那些是不兼容的指针类型。因此,您的程序具有未定义的行为。
修复 :
InserList(&head, tempnum);
然后给你的编译器提供高级警告标志并修复你的代码,直到它没有警告。