Java “错误”;“堆芯倾倒”;操作员重新解释铸件后<;const uint8_t*>;

Java “错误”;“堆芯倾倒”;操作员重新解释铸件后<;const uint8_t*>;,java,c++,memory-leaks,java-native-interface,coredump,Java,C++,Memory Leaks,Java Native Interface,Coredump,我有以下问题: 我创建了java项目,它通过JNI使用C++动态库。它读取图像并分析其特征。当我运行C++项目时,它使用相同的库-一切都很好,进程终止时没有错误,但Java项目在不同的映像上终止时出现错误“崩溃发生在Java虚拟机外部,本机代码中……内核转储” 导致错误的代码如下所示: vector<char> getFileContent(const string &fileName) { ifstream file(fileName.c_str()); v

我有以下问题:

我创建了java项目,它通过JNI使用C++动态库。它读取图像并分析其特征。当我运行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
    }
}   
vector getFileContent(常量字符串和文件名)
{
ifstream文件(fileName.c_str());
向量buf;
复制(std::istreambuf_迭代器(文件),std::istreambuf_迭代器(),std::back_插入器(buf));
返回buf;
} 
int分析文件(矢量文件)
{
//检查扩展名“.jpg”
对于(size_t i=0;i

有人有什么想法吗?如能就我的问题提供任何意见,我将不胜感激

您应该处理向量为空的情况(
&fileContent[0]
此时可能无效。)

一个快速检查就是看看文件是否真的被打开了