3

長さとして -1 を指定して appendBytes が呼び出されているように見える、まれな断続的なクラッシュが発生します。現在、このメソッドを使用するたびに「長さ」引数をハードコーディングしているため、これがどのように発生するかがわからず、さらに悪いことに、このクラッシュをテストして回避する方法もわかりません。

これがスタックの一番上と例外です (~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 はどのようにして偽の値を取得しているのでしょうか?

4

0 に答える 0