[Это репост этого вопроса на форумах вопросов и ответов OpenCV.]
Привет! У меня большая проблема с FileStorage API с этим YML-файлом (pastebin) (и любым другим YML, который я добавляю в OpenCV). По сути, всякий раз, когда я пытаюсь получить доступ к информации о любом FileNode
, программа segfaults.
Сначала я думал, что это из-за моей собственной сборки OpenCV на macOS, но после попытки с предварительно собранным OpenCV 4.2.0 Windows двоичные файлы, проблема сохраняется.
Возиться в LLDB Я понял, что cra sh происходит в
cv::FileStorage::Impl::getNodePtr(unsigned long, unsigned long)
Соответствующий код Сегмент:
cv::FileStorage fs;
try{
fs = cv::FileStorage("someFile.yml", cv::FileStorage::READ);
}catch(cv::Exception ex)
{
return 1;
}
cv::FileNode node = fs.root();
std::cout << "Got root node" << std::endl;
std::cout << "Root node is type: " << node.type() << std::endl; //Crash here
Я действительно в растерянности ... любая помощь приветствуется.
РЕДАКТИРОВАТЬ 1
На OpenCV на форумах кто-то обнаружил, что инициализация fs
в блоке try/catch
вызвала проблему. Инициализация вне его, как в cv::FileStorage fs = cv::FileStorage("someFile.yml", cv::FileStorage::READ);
, решает проблему. Я до сих пор понятия не имею, почему это происходит ...