Xcode中的EXC_BAD_ACCESS错误

时间:2011-09-13 02:21:22

标签: xcode nsstring uiimageview uiimage tesseract

我真的需要你的帮助,我在Xcode中运行我的程序,但后来成功了,

它告诉我这个错误: **线程1:程序收到信号:“EXC_BAD_ACCESS”在我的程序行中我 **粗体

- (NSString *) ocrImage: (UIImage *) uiImage
{
    CGSize imageSize = [uiImage size];
    double bytes_per_line   = CGImageGetBytesPerRow([uiImage CGImage]);
    double bytes_per_pixel  = CGImageGetBitsPerPixel([uiImage CGImage]) / 8.0;

    CFDataRef data = CGDataProviderCopyData(CGImageGetDataProvider([uiImage CGImage]));
    const UInt8 *imageData = CFDataGetBytePtr(data);

    // this could take a while. maybe needs to happen asynchronously.

    **char* text = tess->TesseractRect(imageData,(int)bytes_per_pixel,(int)bytes_per_line, 0, 0,(int) imageSize.height,(int) imageSize.width);**

    // Do something useful with the text!
    NSLog(@"Converted text: %@",[NSString stringWithCString:text encoding:NSUTF8StringEncoding]);

    return [NSString stringWithCString:text encoding:NSUTF8StringEncoding];
}

谢谢你。

2 个答案:

答案 0 :(得分:0)

确保此处imageData不为NULL。这是你所看到的最常见的原因。您应该重新考虑与您的问题更相关的标题,并专注于堆栈跟踪以及您传递给TesseractRect()的所有变量。

另一个主要的可能性是tess(无论是什么)是一个坏指针,或者不是正确的C ++类的一部分(我假设这是Objective-C ++;你不清楚任何那个)。

答案 1 :(得分:0)

- (NSString *)readAndProcessImage:(UIImage *)uiImage
{
  CGSize imageSize = [uiImage size];
  int bytes_per_line = (int)CGImageGetBytesPerRow([uiImage CGImage]);
  int bytes_per_pixel = (int)CGImageGetBitsPerPixel([uiImage CGImage]) / 8.0;

  CFDataRef data =
      CGDataProviderCopyData(CGImageGetDataProvider([uiImage CGImage]));
  const UInt8 *imageData = CFDataGetBytePtr(data);

  // this could take a while. maybe needs to happen asynchronously?
  char *text = tess.TesseractRect(imageData, bytes_per_pixel, bytes_per_line, 0,
                                  0, imageSize.width, imageSize.height);

  NSString *textStr = [NSString stringWithUTF8String:text];

  delete[] text;
  CFRelease(data);
  return textStr;
}