有人可以解释为什么以下0xFFFFFFFF
avformat_open_input
处的访问权限违规导致崩溃?
std::string u8(const std::wstring& str)
{
return boost::locale::conv::utf_to_utf<char>(str);
}
AVFormatContext* open_input(const std::wstring& filename)
{
AVFormatContext* context = nullptr;
avformat_open_input(&context, u8(filename).c_str(), nullptr, nullptr);
avformat_find_stream_info(context, nullptr);
return context;
}
以下作品:
AVFormatContext* open_input(const std::wstring& filename)
{
auto u8filename = u8(filename);
AVFormatContext* context = nullptr;
avformat_open_input(&context, u8filename.c_str(), nullptr, nullptr);
avformat_find_stream_info(context, nullptr);
return context;
}
答案 0 :(得分:1)
在u8(filename).c_str()
返回之前,avformat_open_input
的结果应该可用。它可能会保存您提供的指针,然后在avformat_find_stream_info
期间使用它。
发布这些avformat函数或其实现的文档,以便我们可以看到它是否真的这样做。
看起来avformat_open_input
做错了什么。现在我怀疑在程序的早期某处发生了未定义的行为。尝试使用像valgrind或静态分析这样的工具,看看是否会出现任何问题。