2011-07-21 11 views
0

zlib.hで定義されている静的に割り当てられたByte型のC配列を使用するライブラリを作成しています。私はmemsetへの呼び出しでコードがクラッシュすることを発見しています。完全なコードは次のようになります。静的に割り当てられたzlibのmemsetライブラリのバイト配列がObjective-C++プログラムをクラッシュする

Byte compressedDataBuffer[kLabelBufSiz]; 
memset (compressedDataBuffer, 0, (kLabelBufSiz * sizeof(Byte))); 

私はkLabelBufSiz *はsizeof(バイト)の値を事前に計算し、memsetのための数値を使用してみましたが、それは何の違いが行われていません。これはシングルスレッドのプログラムで、2つの呼び出しの間にコードがないので、メモリとポインタが変更されていないことがわかります。 sizeof(Byte)が1であることを確認しました。配列型をcharに変更しようとしましたが、クラッシュが止まったので、Byte型がここで役割を果たすようです。

このライブラリ関数を呼び出す小さなプログラムを作成しましたが、クラッシュすることはありません。非衝突プログラムは純粋なC++ですが、クラッシュするプログラムはObjective-C++です。私はMac OSX 10.6.7とgcc-4.2とXCodeの両方でビルドしています。ここに問題を引き起こす可能性のあるObjC++について何かありますか?以前はObjC++から呼び出されたC++ライブラリでは問題は一度もありませんでしたが、それが存在しないというわけではありません。どんな助けでも大歓迎です!

答えて

0

バイトはラッパークラスです。バイトの代わりにcharを使用します。あなたがバイトを使用しなければならない場合は、memsetを使用しないでください。

+0

私は残念なことにバイトを使用する必要があります。 memsetよりも配列をゼロにする良い方法はありますか? – David

+0

forループを使用できます。 memsetは実際にはforループより速い大きなメモリブロックにのみ使用されます – marinara

+0

これは良い考えです!ところで、私は配列の最後の場所にByteを置いてみました。それがうまくいっていました(compressedDataBuffer [kLabelBufSiz-1] =(Byte)1;)。なぜmemsetが問題を引き起こすのか分かりません。 – David