程式碼在 insertPointToLink 函式中出現經典低級錯誤:
if (pre = NULL) { // 應為 ==
p->next = *hp;
*hp = p;
} else {
p->next = pre->next;
pre->next = p;
}
pre = NULL 是賦值運算,將 pre 設為 NULL,運算結果為 NULL(假),導致 if 判斷永遠進入 else 分支。pre 原本為 NULL(插入頭節點),else 分支執行 pre->next 解參考空指標 → 段錯誤/崩潰。if (pre == NULL) { // 雙等號比較
p->next = *hp;
*hp = p;
} else {
p->next = pre->next;
pre->next = p;
}
if (NULL == pre),若誤寫單等號編譯器會報錯(無法賦值給常量)。-Wall -Wextra、MSVC /W4 會提示 assignment used as truth value。一個等號的差別,從邏輯錯誤到程式崩潰,是 C/C++ 開發者必須養成的肌肉記憶。