4

名刺の読み取りにtesseract OCRを使用しています。メモリ リークが発生しましたが、解決できません。方法がわかりません。

私のコードでは...

tesseract->Recognize(NULL); 
char* utf8Text = tesseract->GetUTF8Text();

GetUTF8Text() メソッドでメモリ リークが発生します。メモリリーク計測器のログは次のとおりです。

tesseract::TessBaseAPI::GetUTF8Text()
operator new[](unsigned long) libstdc++.6.dylib
operator new(unsigned long) libstdc++.6.dylib
malloc libsystem_c.dylib

いくつかのメモリ リークの後、アプリがクラッシュします。GetUTF8Text は baseapi.h ファイルにあります。tessearact は c++ で書かれたと思います。私はc++を知りません。誰でも助けることができますか?または、誰かがきれいなテッセラクトを持っていますか?

4

2 に答える 2

3

Tesseract のドキュメントから:

認識されたテキストは、UTF8 としてコード化された char* として返され、delete [] 演算子で解放する必要があります。

別の言い方をすれば、メモリを解放するのはあなたの責任であるため、Tesseracts ではなく、あなたのリークです。

于 2012-05-29T20:50:48.943 に答える
3

baseapi.hで見つけたドキュメントによると。

/**
 * The recognized text is returned as a char* which is coded
 * as UTF8 and must be freed with the delete [] operator.
 */
char* GetUTF8Text();

delete []そのため、使い終わったら必要にutf8textなります。

tesseract->Recognize(NULL); 
char* utf8Text = tesseract->GetUTF8Text();
... //use utf8Text or copy if necessary
delete [] utf8text;
于 2012-05-29T20:54:46.067 に答える