trong ứng dụng của tôi, tôi tạo ra một con trỏ char unsigned sử dụng chức năng này:C và Objective-C - Cách thực hiện để giải phóng một con trỏ char unsigned
- (unsigned char*)getRawData
{
// First get the image into your data buffer
CGImageRef image = [self CGImage];
NSUInteger width = CGImageGetWidth(image);
NSUInteger height = CGImageGetHeight(image);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
unsigned char *rawData = malloc(height * width * 4);
NSUInteger bytesPerPixel = 4;
NSUInteger bytesPerRow = bytesPerPixel * width;
NSUInteger bitsPerComponent = 8;
CGContextRef context = CGBitmapContextCreate(rawData, width, height, bitsPerComponent, bytesPerRow, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
CGColorSpaceRelease(colorSpace);
CGContextSetBlendMode(context, kCGBlendModeCopy);
CGContextDrawImage(context, CGRectMake(0.0f, 0.0f, (CGFloat)width, (CGFloat)height), image);
CGContextRelease(context);
// Now your rawData contains the image data in the RGBA8888 pixel format.
return rawData;
}
Và trong lớp khác tôi gán một tài sản để có con trỏ như vậy : self.bitmapData = [image getRawData];
Tôi có thể giải phóng bộ nhớ malloc'd ở đâu trong quá trình này? Khi tôi cố gắng giải phóng tài sản trong dealloc, nó cho tôi một lỗi exc_bad_access. Tôi cảm thấy như tôi đang thiếu khái niệm c cơ bản hoặc mục tiêu c ở đây. Tất cả trợ giúp đều được đánh giá cao.
Bạn giải phóng tài sản bằng cách nào? – iandotkelly
Mỗi người cấp phát có một bộ cấp phát được ghép nối với * miễn phí * đối tượng được phân bổ. Xem trang hướng dẫn cho ['malloc'] (http://linux.die.net/man/3/malloc) - nhưng tốt nhất là tìm tài liệu liên quan đến nền tảng cụ thể của bạn - sẽ giải thích những gì nên được sử dụng ;-) –
Tôi đã cố gắng miễn phí (tài sản) mà không có vẻ chính xác nhưng tôi đã cho nó một đi anyway. –