単連結リストの整列 #5 デグレードしてた
変更箇所はほとんどないのに前回の変更でバグを作りこんでいた。
実験的コードだからといってシステマティックなテストはやらないと駄目ということか。
関数node_printにNULLをfirst_nodeとして渡すとこける。
前回の変更前はpをfirst_node
で初期化した直後、
ループが開始される前にpとNULLとを比較するようになっていた。
変更後、無条件にfirst_node->next
で初期化するバグが入った。
...snip static void node_print(node_t *first_node) { node_t *p; if (first_node == NULL) return; for (p = first_node->next; p != NULL; p = p->next) { printf(p->next == NULL ? "%d\n" : "%d ", p->val); } } ...snip
修正は単にfirst_nodeが有効なアドレスかどうかをチェックする文を入れるだけである。