变量声明'静态'在Windows XP上崩溃

时间:2018-03-11 13:53:40

标签: c++ winapi visual-c++ windows-xp

我在Windows XP上遇到了一些奇怪的行为。我使用Visual Studio 2017在Windows 10上编译我的项目。当我编译各个源时,我将/D_WIN32_WINNT=0x0501传递给cl,以确保我的程序在XP上运行。

但是,当我尝试在XP上运行它时,我在以下代码中遇到了一个奇怪的崩溃(它没有使用任何Windows API,FWIW):

void CPDF_StreamContentParser::OnOperator(const CFX_ByteStringC& op) {
  static const OpCodes s_OpCodes = InitializeOpCodes();

  auto it = s_OpCodes.find(op.GetID());
  if (it != s_OpCodes.end())
    (this->*it->second)();
} 

在Windows 7和10上,代码运行正常,但在XP上它崩溃了。经过一些调试后,我发现static是罪魁祸首。将第2行更改为此内容会使崩溃消失,并且XP上的一切正常:

/*static*/ const OpCodes s_OpCodes = InitializeOpCodes();

但对我来说,static在这里应该是一个问题并没有任何意义。有没有人解释为什么代码在使用static时在XP上崩溃并在省略static时工作正常?这对我没有意义。

FWIW,InitializeOpCodes()声明如下:

using OpCodes = std::map<uint32_t, void (CPDF_StreamContentParser::*)()>;
static OpCodes InitializeOpCodes();

感谢您的帮助!

0 个答案:

没有答案