java — ошибка & quot; ядро ​​сброшено & quot; после оператора reinterpret_cast & lt; const uint8_t * & gt;

У меня есть следующая проблема:

Я создал проект Java, который использует динамическую библиотеку C ++ через JNI. Он читает изображения и анализирует их характеристики. Когда я бегу 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
}
}

У кого-нибудь есть идеи? Буду благодарен за любые советы по теме моего вопроса.

1

Решение

Вы должны обработать случай, когда вектор пуст (&fileContent[0] может быть недействительным в этот момент.)

Быстрая проверка позволит увидеть, действительно ли файл был открыт.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector