boost异步I / O示例的运行时错误

时间:2012-08-12 18:18:29

标签: windows debugging visual-c++ runtime boost-asio

最近我需要使用boost TCP iostream,所以我一直在尝试编译boost(v1.50.0)异步I / iostream server中的白天clientexample O在Windows 7上同时使用Ubuntu 12.04上的g ++ 4.6和MSVC 11.0(Visual Studio 2012 RC)。该程序在Linux上按预期编译和运行。从那以后我们可以推断出boost例子的源代码完全正确,所以我不会在这里简短地说过。此外,所有MSVC项目设置和提升二进制文件的链接都可以,因为只有according to Microsoft的警告C4250才能正常编译。

问题是服务器和客户端在Windows上运行时崩溃,并且在调试中错误类似于0x000007FEEE9082DE (msvcp110d.dll) (***.exe) unhandled exception: 0xC00000FD: Stack overflow (arguement: 0x0000000000000001, 0x00000000000C3FF0)

当我离开服务器运行后台并且正在调试客户端时,堆栈跟踪 enter image description here 显示了调用堆栈。我挖掘了ostream的源代码,发现sentrybasic_ostream的构造函数

explicit __CLR_OR_THIS_CALL sentry(_Myt& _Ostr)
        : _Sentry_base(_Ostr)
        {   // construct locking and testing stream
        if (_Ostr.good() && _Ostr.tie() != 0)
            _Ostr.tie()->flush();
        _Ok = _Ostr.good(); // store test only after flushing tie
        }

是否有来电_Ostr.tie()->flush()flush()

的定义
_Myt& __CLR_OR_THIS_CALL flush()
    {   // flush output stream
    if (_Myios::rdbuf() != 0)
        {   // buffer exists, flush it
        const sentry _Ok(*this);

        if (_Ok && _Myios::rdbuf()->pubsync() == -1)
            _Myios::setstate(ios_base::badbit); // sync failed
        }
    return (*this);
    }

构造一个恒定的哨兵_Ok。我认为这是一个错误,但我不确定。

所以我的问题是你认为这是MSVC 11.0的运行时错误吗?服务器或客户端,如果使用MSVC 10.0(Visual Studio 2010)进行编译,是否会因为同样的原因在Windows系统上崩溃?

0 个答案:

没有答案