C++ 应用程序的行为与代码不同

C++ Application behaves differently from code

本文关键字:代码 应用程序 C++      更新时间:2023-10-16

我正在使用MS Visual Studio 2010用C++编写游戏。游戏几乎处于测试状态,但我在这里面临一个严重的问题,希望有人能够提供帮助。

因此,如果我从 VS 运行游戏(例如使用 F5 键),一切正常。但是,一旦我在游戏的某些时候运行同一游戏的新编译的.exe文件,我就会崩溃并发生其他一些奇怪的事情。我可以做些什么来修复它吗?VS 中可能有一定的设置吗?这真的让我感到困惑,如果有人知道解决方案,请提供帮助。

如果我没记错的话,F5键用于启动调试,并且在调试器中运行时,Visual Studio会执行不在调试器中运行时不会发生的事情。

首先,调试器将为您清除所有内存,这意味着未初始化的变量变为零。此清除包括初始化为空指针的未初始化指针变量。

如果您有未初始化的指针变量并对其进行了空指针检查,则这些检查在调试器中运行时将

正常工作,但当不在调试器中运行时,这些变量将具有不确定的值,该值看似随机,并且很可能不是空指针。因此,当您在调试器外部运行时,这些非空指针将使程序认为指针有效,并且您将取消引用它们,这将导致未定义的行为

您需要做的是遍历代码并查找未初始化的变量,尤其是指针,并确保在使用它们之前正确初始化它们。


像其他提及一样,在与Visual Studio调试器不同的环境中运行时,或者从Visual Studio启动程序时,还有许多其他事情可能会出错。提到的一个主要问题是相对文件路径可能不再正确。从不同目录的命令行运行时,或者通过双击其图标运行时,程序工作目录将与从 Visual Studio 中启动时不同。最好使用某种配置值来说明游戏资产和其他文件的基本目录。然后,您可以将进程当前工作目录更改为该目录,或者使用它自己解析资产的绝对路径。