我試圖做列出了簡單的功課,我想編寫一個函數:如果頭是指向爲什麼我不能在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'的?這就是'lis'的來源,畢竟 – StoryTeller
'if(lis == NULL)'不需要取消引用(取決於你如何管理它) – BlackBear
'lis'本身就是一個指針,爲什麼不先檢查它呢? –