0

tesseract api で実行されている非常に単純なアプリからメモリ リークが発生していることがわかりました。GetUTF8Text() から char 配列を [] 削除する必要があると言っている tesseract api を知っていますが、私の場合はクラッシュしました。コードのブロックは次のとおりです。

int main(int argc, char** argv){
Mat plate_segments = imread(argv[1], 0);
tesseract::TessBaseAPI *myOCR = new tesseract::TessBaseAPI();
myOCR->SetPageSegMode(tesseract::PSM_AUTO);
if (myOCR->Init("./", "newnz+oldnz")) {

        std::cerr << "Could not initialize tesseract." << std::endl;
        exit(1);
    }
myOCR->SetVariable("tessedit_char_blacklist","abcdefghijklmnopqrstuvwxyz`~!@#$%^&*()_+-={}[]|\':;/?.<,>");
myOCR->SetVariable("tessedit_char_whitelist","ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789");
myOCR->SetImage((uchar*) plate_segments.data,plate_segments.size().width, plate_segments.size().height, plate_segments.channels(), plate_segments.step1());
myOCR->Recognize(0);
char* license_result = myOCR->GetUTF8Text();
printf("OCR output:\n%s", license_result );
    delete [] license_result; // CAUSE CRASH
myOCR->Clear();
myOCR->End();
return 0;}

「myOCR の削除」を行う必要がありますか? 試してみましたが、同様にクラッシュします。

4

1 に答える 1

0

試す

delete myOCR;
myOCR=nullptr;

だから、あなたは電話する必要はありません

myOCR->Clear();
myOCR->End();

削除があなたのためにそれをしたからです!(それは ~TessBaseAPI() の呼び出しです)

于 2014-12-28T21:29:23.053 に答える