使用 ostringstream 导致程序崩溃

Posted

技术标签:

【中文标题】使用 ostringstream 导致程序崩溃【英文标题】:Using ostringstream causing program crash 【发布时间】:2015-08-18 17:50:52 【问题描述】:

我有一些需要维护的旧 C++ 应用程序/服务在 Windows 2003 上运行(不是选择)。我已经完成了一切准备工作并使用 VS 2013,但现在我无法让任何 C++ 项目再次工作。他们只是崩溃。我将范围缩小到使用 stringstream 时,所以我编写了一个示例 Win32 exe 进行测试。

这些是我在 VS 2013 Update 5 中更改的唯一设置: 设置为使用平台工具集 = Visual Studio 2013 - Windows XP (v120_xp)。特点 Set = 使用多字节字符集。

int _tmain(int argc, _TCHAR* argv[])

    ostringstream zs;
    zs << "Hello";
    string strTemp = zs.str();
    printf("%s\n", zs.str().c_str());

    return 0;

它在 zs 上崩溃

【问题讨论】:

请详细说明只是崩溃!您可能缺少一些 DLL 或绑定到错误的 DLL。 redist DLL 在那里。我从 2010 年到 2013 年的每个版本都有它们(msxxx100.dll、110.dll 和 120.dll)。当您缺少相应的 redist dll 时,问题不会崩溃。操作系统显示缺少所需 DLL 的消息。当我尝试附加到 zs 时发生崩溃。在这个例子中,它在 zs 什么是异常/编译器错误信息?通常程序不会“只是崩溃” ILLEGAL_INSTRUCTION (0xc000001d) 地址为 0x00416ab9。我可以注释掉 zs 你试过zs &lt;&lt; L"Hello";了吗?可能是多字节字符识别的问题。 【参考方案1】:

在 Visual Studio 2013 及更高版本中,用于多字节字符编码 (MBCS) 的 MFC 库作为 Visual Studio 的单独插件提供,可从 MSDN 下载站点下载。

https://msdn.microsoft.com/en-us/library/5z097dxa.aspx

【讨论】:

以上是关于使用 ostringstream 导致程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章

BadParcelable 异常偶尔会导致应用程序崩溃

按活动栏中的按钮导致应用程序崩溃

c++ std::ostringstream vs std::string::append

如何将ostringstream直接写入cout

iPhone 应用程序在 OS 3.1 不在模拟器中的设备上崩溃

由于 android.os.FileUriExposedException,Android 应用程序崩溃