gpt4 book ai didi

c++ - 重新分配 std::clog 时退出 segv

转载 作者:行者123 更新时间:2023-11-30 02:33:17 25 4
gpt4 key购买 nike

以下程序在使用 g++ 退出后出现段错误:

#include <iostream>                                                         
#include <fstream>

int
main()
{
std::ofstream logfile( "logfile" ) ;
if( !logfile.is_open() )
{
std::cerr << "oops ofstream\n" ;
return -1 ;
}
std::clog.flush() ;
std::clog.rdbuf( logfile.rdbuf() ) ;

std::clog << "test output\n" ;
std::clog.flush() ;
std::cerr << "all done\n" ;

return 0 ;
}

有什么线索吗?

最佳答案

std::clog 及其友元的生命周期由 std::ios_base::Init 类型的静态对象管理 (C++11 27.5.3.1. 6 类 ios_base::Init)。当该对象被销毁时(在 main() 返回后),它会执行以下操作来销毁 std::clog 和相关的 iostream 对象( C++11 27.5.3.1.6/4 类 ios_base::Init):

calls cout.flush(), cerr.flush(), clog.flush(), wcout.flush(), wcerr.flush(), wclog.flush()

flush() 的调用将使用 clog 中的 rdbuf() 对象,并且由于 logfile.rdbuf( ) 之前传递给 clog 已被销毁,您将获得未定义的行为。

关于c++ - 重新分配 std::clog 时退出 segv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35611069/

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