Wenn ich ein CImage erstellen durch Aufruf dieser Routine bekomme ich den malloc Fehler im Titel. Wenn ich initWithBitmapData direkt aufruft (nicht in der Routine createCIUimageFromData), dann funktioniert es gut.Malloc Zeiger freigelassen wurde nicht zugeordnet Fehler beim Aufruf von initWithBitmapData
Ich habe Referenzen zu möglichen Fehlern in iOS gesehen, die verwandt sein könnten, aber ich kann nicht sicher sagen und ich verdächtige meinen Code mehr als Apples!
Meine Vermutung ist irgendwie meine zusätzliche Umleitung ist Dinge zu vermasseln, aber es ist sauberer, die separate Routine zu haben als den Code einzubetten, wo immer ich es brauche.
Vielen Dank.
schlägt fehl:
- (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;
}
Works:
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);
// . . .
}
Versuchen Sie 'freeWhenDone: NO', und geben Sie die Daten frei, nachdem Sie mit dem' CImage' fertig sind. – user3386109
Danke, das scheint die Aufgabe erledigt zu haben! Wenn Sie es als Antwort hinzufügen, kann ich angeben, dass dies die Antwort war. – user938797
@ user938797 Warten wir ab und sehen, ob jemand Ihnen sagen kann *** warum *** das ist die Antwort. Ich habe nur raten :) Es wäre nützlich zu wissen, was hinter den Kulissen passiert, die das Problem verursachen. Also wissen wir alle, was wir in Zukunft vermeiden sollten. – user3386109