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 получает это поддельное значение?

0 ответов

Другие вопросы по тегам