zlib.h で定義された、Byte 型の静的に割り当てられた C 配列を使用するライブラリを作成しています。memset の呼び出しでコードがクラッシュすることがわかりました。完全なコードは次のようになります。
Byte compressedDataBuffer[kLabelBufSiz];
memset (compressedDataBuffer, 0, (kLabelBufSiz * sizeof(Byte)));
kLabelBufSiz * sizeof(Byte) の値を事前に計算し、memset の数値を使用してみましたが、違いはありませんでした。これはシングルスレッド プログラムで、2 つの呼び出しの間にコードがないため、メモリとポインターが変更されていないことがわかります。sizeof(Byte)が1であることを確認しました。配列型をchar型に変更してみたらクラッシュしなくなったので、ここはByte型が影響しているようです。
このライブラリ関数を呼び出す小さなプログラムを作成しましたが、そのプログラムはクラッシュしません。クラッシュしないプログラムは純粋な C++ ですが、クラッシュするプログラムは Objective-C++ です。gcc-4.2とXCodeを使用して、Mac OSX 10.6.7で両方を構築しています。ここで問題を引き起こす可能性のある ObjC++ について何かありますか? これまで ObjC++ から呼び出された C++ ライブラリで問題が発生したことはありませんが、存在しないわけではありません。どんな助けでも大歓迎です!