rvalue的c_str() - 不安全?

时间:2012-04-12 15:48:23

标签: c++

有人可以解释为什么以下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;
}

1 个答案:

答案 0 :(得分:1)

u8(filename).c_str()返回之前,avformat_open_input的结果应该可用。它可能会保存您提供的指针,然后在avformat_find_stream_info期间使用它。

发布这些avformat函数或其实现的文档,以便我们可以看到它是否真的这样做。


看起来avformat_open_input做错了什么。现在我怀疑在程序的早期某处发生了未定义的行为。尝试使用像valgrind或静态分析这样的工具,看看是否会出现任何问题。