memset в статически размещенном байтовом массиве zlib в библиотеке приводит к сбою программы Objective-C ++ - PullRequest
0 голосов
/ 21 июля 2011

Я пишу библиотеку, которая использует статически размещенный C-массив типа Byte, определенный в zlib.h. Я обнаружил, что код вылетает при вызове memset. Полный код выглядит так:

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

Я пытался предварительно вычислить значение kLabelBufSiz * sizeof (байт) и использовать числовое значение для memset, но это не имело никакого значения. Это однопоточная программа, и между двумя вызовами нет кода, поэтому я знаю, что память и указатель не меняются. Я подтвердил, что sizeof (Byte) равен 1. Я попытался изменить тип массива на char, и это остановило сбой, поэтому кажется, что здесь может играть роль тип Byte.

Я написал небольшую программу, которая вызывает эту библиотечную функцию, и она не дает сбоя. Не сбойная программа - чистый C ++, а сбойная - Objective-C ++. Я собираю их обоих на Mac OSX 10.6.7, с gcc-4.2 и XCode. Есть ли что-то в ObjC ++, что может вызвать проблемы здесь? У меня никогда не было проблем с библиотеками C ++, вызываемыми из ObjC ++, но это не значит, что их не существует. Любая помощь с благодарностью!

1 Ответ

0 голосов
/ 21 июля 2011

Байт - это класс-оболочка. используйте символ вместо байта. если вы не используете байт, в этом случае не используйте memset

...