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

标签 c++

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

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

最佳答案

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

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

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

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


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

关于C++ 应用程序的行为不同于代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38371583/

相关文章:

c++ - 调整 native 窗口大小

c++ - qt 背景样式表不起作用

返回的 C++ 时间晚了两个小时

c++ - 如何使用 boost::filesystem 获取 inode?

c++ - 在字符串流中使用来自 github 的代码时出错

类扩展模板类的 C++ 符号导出

c++ - 为什么这个数组分配会导致段错误?

c++ - USB相机的文件路径

c++ - 如何使用 yield_context 作为 resolver.async_resolve 的处理程序?

c++ - Jsoncpp 没有正确读取指数