正常ルートは終わる時 q==NULL なのに、その前の
defer free(q) したときのqの値でfree() するんですね

うへぇ…
誤解釈してバグ出しそう

てかこれは、ひねり出された意地悪サンプルで…実際のプログラミングでdefer式が効果的となる使用例ではない、ですよね?