gpt4 book ai didi

c++ - 右值的 c_str() - 不安全?

转载 作者:太空狗 更新时间:2023-10-29 23:08:19 25 4
gpt4 key购买 nike

谁能解释为什么以下代码在 avformat_open_input0xFFFFFFFF 发生访问冲突而崩溃?

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;
}

最佳答案

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

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


看起来 avformat_open_input 没有做错任何事。现在我怀疑程序早期某处发生了未定义的行为。尝试使用 valgrind 或静态分析等工具,看看是否有结果。

关于c++ - 右值的 c_str() - 不安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10127150/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com