c++ - 我没有直接在我的程序中使用的 memcpy 偶尔崩溃

标签 c++ sfml visual-studio-debugging memcpy

我正在做我做过的最大的项目,我从来没有调试过这样的东西,所以我不知道从哪里开始。

关于崩溃的一些信息: 我正在使用 Visual Studio,调试器完全没用。它给我的唯一信息是它似乎是在调用“memcpy”期间发生的。除了 memcpy 函数外,调用堆栈完全是空的,并且列出了局部变量,但它没有任何值。

它偶尔会在任何计算机上发生。

它不会总是在任何(已知)条件下发生,但只会在少数条件下发生。特别是只有当特定类型的对象被销毁时才会发生这种情况,尽管这不一定是直接原因,而且调查销毁过程也没有帮助。

关于该项目的更多信息: 这是一款使用 SFML 2.0 静态链接的游戏。 我不会在我自己的代码中的任何地方调用 memcpy。

一些问题: 对 memcpy 的调用可能来自哪里?它是在 SFML 中还是在其他地方? 当调试器不工作时,我如何(使用 visual studio)获得有关崩溃的更多信息?

最佳答案

这是对“对 memcpy 的调用可能来自哪里?”的回答

在大多数情况下,这是使用 NULL 指针调用 std::string 的复制构造函数的结果,或者是对已破坏的字符串进行字符串操作的结果。当然,这个字符串可以是你的一个类的成员。

当项目非常大时,这本身并不能帮助你找到问题。但是,您几乎可以肯定地假设您正在使用指向已被破坏的自定义对象的引用或指针(或迭代器)。找到此访问权限的最直接方法是在 valgrind 中运行未经优化编译并带有调试信息的程序。不幸的是,这不适用于 Windows(请参阅 Is there a good Valgrind substitute for Windows?)。

这里的主要问题似乎是您甚至没有获得回溯,因为这至少会强烈提示要查看的位置。虽然我不熟悉 Windows,所以我只能猜测是什么原因造成的。您确定已使用调试信息编译所有内容吗?

关于c++ - 我没有直接在我的程序中使用的 memcpy 偶尔崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25815830/

相关文章:

c++ - 如何调用在另一个文件中找到的函数?

visual-studio - 确切地说,必须打开哪些端 Eloquent 能使MSVSMON.exe(远程调试)正常工作?

c++ - 在 VC++ 中调试时幕后发生了什么

c# - 即使 DebugType=full,也无法在 Release模式下调试应用程序

c++ - 仅包含第一个派生类

c++ - 同时具有聚合初始化和模板推导

c++ - 编译c++程序时的 fatal error

C++ asterisk 星号运算符

c++ - 返回 C++ const 项,取决于是否存在,安全

c++ - SFML 2.1 RenderWindow 链接错误