java - 运算符 reinterpret_cast<const uint8_t*> 后出现错误 "core dumped"

标签 java c++ memory-leaks java-native-interface coredump

我有以下问题:

我创建了 Java 项目,它通过 JNI 使用 C++ 动态库。它读取图像并分析其特征。当我运行 C++ 项目 时,它使用相同的库 - 一切都正常并且进程终止时没有错误,但是 Java 项目 在不同的图像上终止错误“崩溃发生在 native 代码中的 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 为空的情况(&fileContent[0] 此时可能无效。)

快速检查一下文件是否真的被打开了。

关于java - 运算符 reinterpret_cast<const uint8_t*> 后出现错误 "core dumped",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14438374/

相关文章:

c - 二维数组内存分配出错时如何正确释放

c - 在C中释放动态分配的内存

java - 如何从 mongodb 中检索 Hashtable?

java - 无法实现构造函数(隐式 super 构造函数 Item() 未定义)

c++ - 指针上的指针 - 性能损失的原因

c++ - 在 Xcode 中,我在代码片段中发现了语义问题

javascript - 内存泄漏闭包和它的简单解决方法有什么区别?

java - 如何阻止 Maven/Artifactory 保留带有时间戳的快照

java - toString() 方法打印空值

c++ - 堆分配变量的返回值优化和初始化