首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在重新分配std::clog时退出segv

在重新分配std::clog时退出segv
EN

Stack Overflow用户
提问于 2016-02-24 19:17:37
回答 1查看 70关注 0票数 1

在使用g++退出后,我会得到以下程序的一个分段错误:

代码语言:javascript
复制
#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 ;                                                              
    }                                                                       

有什么线索吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-24 19:48:03

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):

调用cout.flush()、cerr.flush()、clog.flush()、wcout.flush()、wcerr.flush()、wclog.flush()

flush()的调用将在clog中使用rdbuf()对象,而且由于先前传递给cloglogfile.rdbuf()已被销毁,您将得到未定义的行为。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35611069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档