调用 initWithBitmapData 时,释放的 Malloc 指针未分配错误



当我通过调用此例程创建 CIImage 时,我在标题中收到 malloc 错误。 当我直接调用 initWithBitmapData 时(不在 createCIUimageFromData 例程中),那么它工作正常。

我已经看到了对 iOS 中可能相关的错误的引用,但我不能确定,我当然怀疑我的代码比 Apple 的代码更多!

我的

猜测是我的附加重定向以某种方式搞砸了事情,但是拥有单独的例程比将代码嵌入我需要的地方更干净。

谢谢。

失败:

- (CIImage *) createCIimageFromData : (unsigned char *)pData   width : (int32_t)width height : (int32_t)height
{
    /*
     Once we have the raw data, we convert it into a CIImage.
     The following code does the required work.
     */
    NSLog(@"entering createciimagen");
    CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceGray();
    NSData *_pixelsData = [NSData dataWithBytesNoCopy:pData length:(sizeof(unsigned char)*width*height) freeWhenDone:YES ];
    CIImage *_dataCIImage = [[CIImage alloc] initWithBitmapData:_pixelsData bytesPerRow:(width*sizeof(unsigned char)) size:CGSizeMake(width,height) format:kCIFormatR8 colorSpace:colorSpaceRef];
    CGColorSpaceRelease(colorSpaceRef);
    /*
     newImage is the final image
     Do remember to release the allocated parts.
     */
    NSLog(@"done ciimagen");
    return _dataCIImage;
}

工程:

void prepData(unsigned char *pData,  // source-destination
                           int strideSrc, // stride
                           int width,
                           int height,
                           double amount,
                           int deltaLimit,
                           id owner)
{
   //[owner createCIimageFromData:pData width:width height:height];  // <-- commented out
    CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceGray();
    NSData *_pixelsData = [NSData dataWithBytesNoCopy:pData length:(sizeof(unsigned char)*width*height) freeWhenDone:YES ];
    CIImage *_dataCIImage = [[CIImage alloc] initWithBitmapData:_pixelsData bytesPerRow:(width*sizeof(unsigned char)) size:CGSizeMake(width,height) format:kCIFormatR8 colorSpace:colorSpaceRef];
    CGColorSpaceRelease(colorSpaceRef);
// . . .
}

显然,当NSData对象尝试释放数据时,会导致此问题。若要避免此问题,请使用 freeWhenDone:NO,然后在完成CIImage后释放数据。

相关内容

  • 没有找到相关文章

最新更新