64bitポインタの落とし穴
2016年03月13日 05:35更新
先週はC言語の微妙な仕様のせいでバグ取りに二日に跨って時間を奪われてしまいました。
C言語による実装の過程でヘッダファイルの関数プロトタイプ宣言が漏れていました。あとでまとめて書けばいいやと…。ところがコンパイラは暗黙的関数宣言(implicit declaration of function)として戻り値をint型(32bit)でしらっと実行。しかし件の関数はポインタ型(64bit)を戻り値として返却していたため、関数の呼び出し元で64bit(ポインタ型)から32bit(int型)への予期せぬ丸めが発生してポインタアクセスで落ちていました。64bit OSなんて、大っ嫌いだ!(コンパイラのワーニングを見逃していた私もいけないのですが…)