1

次の問題があります。

JNI を介して C++ ダイナミック ライブラリを使用する Java プロジェクトを作成しました。画像を読み取り、その特徴を分析します。同じライブラリを使用するC++ プロジェクトを実行すると、すべて問題なくプロセスはエラーなしで終了しますが、Java プロジェクトは別のイメージで終了し、「ネイティブ コードで Java 仮想マシンの外部でクラッシュが発生しました。コア ダンプされました」というエラーが表示されます。

エラーの原因となるコードは次のとおりです。

vector<char> getFileContent(const string &fileName)
{
    ifstream file(fileName.c_str());
    vector<char> buf;
    copy( std::istreambuf_iterator<char>(file), std::istreambuf_iterator<char>(),std::back_inserter(buf) );
    return buf;
} 

int analyzeFiles(vector<File> files)
{
    //check for extension ". jpg"
    for(size_t i = 0; i < files.size(); i++)
    {   
        vector<char> fileContent = getFileContent(files[i].directory + '/' + files[i].fileName);
        DrawingDetector dd(reinterpret_cast<const uint8_t*>(&fileContent[0]), fileContent.size()); //causes error in a runtime, terminates on any image
        //the rest code
    }
}   

誰にもアイデアはありますか?私の質問の主題に関するアドバイスに感謝します。

4

1 に答える 1

2

ベクトルが空の場合を処理する必要があります(&fileContent[0]この時点では無効である可能性があります)。

簡単なチェックは、ファイルが実際に開かれたかどうかを確認することです。

于 2013-01-21T12:15:50.627 に答える