【发布时间】:2011-07-02 02:45:33
【问题描述】:
由于情况模糊,我很犹豫要不要问这个问题,但我想了解这怎么可能。我有一个使用 Visual Studio 2008 开发的 C++ 应用程序。当我在 Windows 7 64 位(或 Vista 32 位)上编译该应用程序时,该应用程序运行良好。当我在 32 位 Windows XP SP3 上编译应用程序时,我收到缓冲区溢出警告并且进程终止。这是使用与 Visual Studio 2008 C++ 编译器相同的版本。我在 XP 上收到缓冲区溢出,但在其他 Windows 平台上却没有,这是怎么回事?
【问题讨论】:
-
当涉及到未定义的行为(例如鼻恶魔)时,一切都可能发生。当然,您可能会好奇为什么会发生这种情况,但您不应该感到惊讶,这就是 UB 的本质 :)
-
可能是整数或指针大小的问题导致未定义的行为。
-
@André:XP 和 Vista 32 位之间没有整数/指针大小差异。
-
何时编译或运行?
-
@DeadMG 在我的例子中,我在运行之前在给定平台上编译。
标签: c++ visual-studio buffer-overrun