2014年12月28日

やってしまった

zlib を使ったコードを Visual C++ で書いて Xcode でテストしていたのですが、謎のエラーに悩まされました。Visual C++ で実行しているときは何もないのですが、Xcode で実行すると落ちるんです。やっとのことで原因をみつけだしてみると...


uint32_t destsize = ...
...
int zerr = ::uncompress(destbuf, (uLongf *)&destsize, sourcebuf, sourcesize);

とかやっていたのが原因でした。問題は (uLongf *)&size の部分です。uLongf は zlib で typedef されている型で、実体は unsigned long です。

Visual C++ だと uint32_t も long も同じ 32 ビットだったのですが、Xcode だと long は 64 ビットなんですよね…

たしかに int とか long は環境によってサイズが異なる、というのはCの常識としてあったわけだけですが、いつの間にかそういう常識も忘れてしまうという話でした。ああ、うん、安易にキャストするものじゃないですよね。ハイ。

(なんか昔 wchar_t のサイズが 2 バイトだと思い込んでいたせいで困ったことになった記憶があるのですが、その教訓は生かされなかったようです)
posted by JUNOSOFT at 03:26| Comment(0) | プログラミング
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。