朝来てからすぐ昨日の問題に取り掛かった。 1 時間かけても解決せずどうしようもなくなったので、他の人が書いたそのライブラリを使ったテストコードソースを隅々まで眺めて調べるも、やっぱりおかしな点は見つからない。デバッガで関数に渡す引数を全て調べても、やっぱり問題は無い (ように見える)。しかしやはり実行すると Access Violation が発生する。特定のアドレスに対しての操作でいつも失敗しているようだ。引数の値を変更しても変わらないので、渡している引数とは別のところで問題が出ているのか? しかし、ライブラリにバグがあるなんてことは……テスト済みのはずだし……。
徐々に苛立ちが募ってきたところで、テストコードの置いてあるフォルダにライブラリのヘッダファイルと同名の cpp ファイルがあるのを見つける。ソースファイルだ。早速その cpp ファイルを include して (リンクする気力も無かった) 、デバッガで追ってみた (ソースなんか読んでる気力も無い)。すると、以下のようなコードで止まっていた。
int hogehogelibrary_function() { FILE* fp = fopen("C:\\tmp\\tmp.dat); // ... なんかいろいろ ... fprintf(fp, "nanka iroiro"); //< ここ }
そして、自分の使っている PC には C ドライブの直下に tmp フォルダなんてものは存在していなかったと。こ、こんなのわかるわけないじゃないか!!!111 昨日からの数時間はなんだったんだ……orz
さすがにこれは仕様として問題あるのでまともなエラー処理と、フォルダの指定をできるよう修正をお願いしてもらうよう言ってみた。しかし、仕様を作っているのはこちらなので (自分ではない)、もしかしたらこっちが悪いのかもしれないのだけれど、そんなの知らんし……。「このフォルダは、絶対あるって前提ですから!」とかこっちの人が言ってたら、このライブラリ (を作った人) には文句は言えない、かもしれない。