2

如果我没有做错任何事情,我有点困惑,但是下面的代码:

#include <stdio.h>

int main()
{
    fputws(L"this fails.\n", stderr);
    return 0;
}

对我来说崩溃了,但有以下例外:

Unhandled exception at 0x56BEDABC (msvcr110.dll) in errors.exe: 0xC0000005: Access violation reading location 0x000000A4.

我正在使用 MSVC2012。

我尝试过了

  • 切换调试/发布模式(都崩溃)
  • 标准错误/标准输出(都崩溃)
  • 切换 x86/x64(均崩溃)
  • 将 /subsystem:console 添加到链接器(崩溃)
  • 在 MSVC2010 中编译 -它可以工作!

我有以下版本:

Microsoft Visual Studio Professional 2012
Version 11.0.50727.1 RTMREL
Microsoft .NET Framework
Version 4.5.50709
4

1 回答 1

4

我终于设法用谷歌搜索了这个问题,但之前没有提到它,所以链接如下:

http://connect.microsoft.com/VisualStudio/feedback/details/772585/fputws-yields-access-violation

VS2012update1 fixes the problem. msvcr110d.dll version is 11.00.51106.1.

另一种解决方法是在使用fputs("", stderr);之前使用fwputs, 来正确初始化 IO 流。

于 2013-09-02T15:40:47.737 回答