在更改CFDataRef的字节时,iOS 6上的EXC_BAD_ACCESS,但不是5

jbe*_*128 4 exc-bad-access core-foundation cfdata ios ios6

我有一个应用程序,可以将各种过滤器应用于图像.它在iOS 5上运行良好但在6上崩溃.下面是它崩溃的地方示例:

CGImageRef inImage = self.CGImage;
CFDataRef m_DataRef = CGDataProviderCopyData(CGImageGetDataProvider(inImage)); 
UInt8 * m_PixelBuf = (UInt8 *) CFDataGetBytePtr(m_DataRef); 

int length = CFDataGetLength(m_DataRef);

for (int i=0; i<length; i+=4)
{
    if(filter == filterCurve){

    int r = i;
    int g = i+1;
    int b = i+2;

    int red = m_PixelBuf[r];
    int green = m_PixelBuf[g];
    int blue = m_PixelBuf[b];

    m_PixelBuf[r] = SAFECOLOR(red); //    <==== EXC_BAD_ACCESS (code = 2)
    m_PixelBuf[g] = SAFECOLOR(green);
    m_PixelBuf[b] = SAFECOLOR(blue);
   }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试将值重新分配给时,请注意错误的访问点m_PixelBuf.任何人都知道为什么会这样?iOS 6中的内容会导致什么?

小智 5

这解决了这个问题:http://www.iphonedevsdk.com/forum/iphone-sdk-development/108072-exc_bad_access-in-ios-6-but-not-in-ios-5.html

在iOS 6中,你需要使用CFDataCreateMutableCopy()(而不是CGDataProviderCopyData()),其次是CFDataGetMutableBytePtr()(而不是CFDataGetBytePtr()),如果你要直接操作数据的字节.