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

时间:2016-07-14 10:18:13

标签: c++

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

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

1 个答案:

答案 0 :(得分:3)

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

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

如果你有未初始化的指针变量并对它们进行空指针检查,那么这些检查在调试器中运行时可以正常工作,但是当没有在调试器中运行时,这些变量将具有不确定值,一个看似随机的值,很可能不是空指针。因此,当您在调试器外部运行时,这些非空指针将使您的程序认为指针有效,并且您将取消引用它们,这将导致未定义的行为

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

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