开发者

(iphone) KERN_PROTECTION_FAILURE at ob_msgSend()

I'm fairly certain KER_PROTECTION_FAILURE is happening due to the following code.

(I don't get the error when I skip calling this function)

What I suspect is that the following code is wrong? (data can be gone before string object is released or something like that)

NSMutableData* data = [NSMutableData dataWithLength: dataLength];
// populate data 
return [[[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding] autorelease];

Register $r0 shows the address of the returning NSString object.

and $r1 shows "release".

开发者_C百科
 - (NSString *)encode:(const uint8_t *)input length:(NSInteger)length {
     static char table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

     int dataLength = ((length+2)/3)*4;
     int remainder = dataLength % 16;
     dataLength = dataLength + (16- remainder);

     NSMutableData *data = [NSMutableData dataWithLength:
 dataLength];
     uint8_t *output = (uint8_t *)data.mutableBytes;

     for (NSInteger i = 0; i < length; i += 3) {
         NSInteger value = 0;
         for (NSInteger j = i; j < (i + 3); j++) {
             value <<= 8;

             if (j < length) {
                 value |= (0xFF & input[j]);
             }
         }

         NSInteger index = (i / 3) * 4;
         output[index + 0] =                    table[(value >> 18) & 0x3F];
         output[index + 1] =                    table[(value >> 12) & 0x3F];
         output[index + 2] = (i + 1) < length ? table[(value >> 6)  & 0x3F] :
 '=';
         output[index + 3] = (i + 2) < length ? table[(value >> 0)  & 0x3F] :
 '=';
     }

     return [[[NSString alloc] initWithData:data
 encoding:NSASCIIStringEncoding]
 autorelease]; }
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜