NSMutableData appendBytes задает длину -1 и вылетает
Я получаю редкий и прерывистый сбой, который выглядит как appendBytes, вызываемый с -1 в качестве длины. теперь я жестко кодировал аргумент "length" каждый раз, когда использовал этот метод, поэтому я не вижу, как это могло произойти, и, что еще хуже, я не вижу, как я мог бы проверить и избежать этого сбоя.
вот вершина стека и исключение (обратите внимание на длину ~4.2b):
*** Terminating app due to uncaught exception 'NSMallocException', reason: '*** -[NSConcreteMutableData appendBytes:length:]: unable to allocate memory for length (4294967295)'
*** Call stack at first throw:
(
0 CoreFoundation 0x91ec5a67 __raiseError + 231
1 libobjc.A.dylib 0x9950a149 objc_exception_throw + 155
2 CoreFoundation 0x91e2d289 +[NSException raise:format:arguments:] + 137
3 CoreFoundation 0x91e2d1f9 +[NSException raise:format:] + 57
4 Foundation 0x92d2489e _NSMutableDataGrowBytes + 1136
5 Foundation 0x92d24391 -[NSConcreteMutableData appendBytes:length:] + 354
вот упрощенная версия кода, который предположительно дает сбой:
if (self.isConnectedToService) {
NSMutableData *myData = [NSMutableData data];
float newValue = PanValue;
const char theTwo[] = {(char)Chan_L, (char)PanParam};
[myData appendBytes:&theTwo length:2];
[myData appendBytes:&newValue length:4];
}
Так что длина всегда 2 или 4.
Я тестировал разные ситуации, в которых буферы содержат больше или меньше 2 и 4, и мне никогда не удавалось преднамеренно вызвать этот сбой.
У меня один и тот же код работает на MacOS10.7.4 и iOS6.0(на iPad3), и иногда я вижу эту проблему на обеих платформах.
так как appendBytes получает это поддельное значение?