このルーチンを呼び出してCIImageを作成すると、タイトルにmallocエラーが発生します。 initWithBitmapDataを直接呼び出すと(createClUimageFromDataルーチン内ではない)、正常に動作します。initWithBitmapDataを呼び出すとMallocポインタが解放されませんでした
iOSの関連する可能性のあるバグを参照していますが、私は確信が持てません。
私の推測は、何とか私の追加のリダイレクトが問題を引き起こしていますが、必要な場所にコードを埋め込むよりもはるかに明確なルーチンを持っています。
ありがとうございます。
の失敗:
- (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 createciimage\n");
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 ciimage\n");
return _dataCIImage;
}
作品:NSData
オブジェクトはデータを解放しようとしたときに
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);
// . . .
}
'freeWhenDone:NO'を試してみて、' CIImage'を終えたらデータを解放してください。 – user3386109
ありがとう、それは仕事をしたようだ!答えとして追加すると、これが答えであることが示されます。 – user938797
@ user938797誰かがあなたに言うことができるのを待ってみましょう***なぜ***これが答えです。私はちょうど推測していた:)それは問題の原因となるシーンの裏に何が起こっているのか知ることは有益だろう。だから私たちはすべて将来避けなければならないことを知っている。 – user3386109