C++ memcpy偶尔崩溃,我没有直接在我的程序中使用它

C++ memcpy偶尔崩溃,我没有直接在我的程序中使用它,c++,sfml,visual-studio-debugging,memcpy,C++,Sfml,Visual Studio Debugging,Memcpy,我正在做一个我做过的最大的项目,我从来没有调试过这样的东西,所以我不知道从哪里开始 关于坠机的一些信息: 我正在使用VisualStudio,调试器是完全无用的。它给我的唯一信息是,它似乎是在调用“memcpy”时发生的。除了memcpy函数外,调用堆栈是完全空的,并且列出了局部变量,但没有任何值 这在任何计算机上都是偶尔发生的 它并不总是在任何(已知)条件下发生,但它只在少数条件下发生。特别是,它只发生在特定类型的对象被破坏时,尽管这不一定是直接原因,调查破坏过程也没有帮助 关于该项目的更多信

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

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

这在任何计算机上都是偶尔发生的

它并不总是在任何(已知)条件下发生,但它只在少数条件下发生。特别是,它只发生在特定类型的对象被破坏时,尽管这不一定是直接原因,调查破坏过程也没有帮助

关于该项目的更多信息: 这是一个使用SFML2.0的游戏,静态链接。 我不会在自己的代码中调用memcpy

一些问题: 给memcpy的电话是从哪里打来的?它是在SFML中还是在其他地方? 当调试器不工作时,如何(使用visual studio)获取有关崩溃的更多信息?

这是对“memcpy调用从何而来”的回答

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

当项目非常大时,这本身不会帮助您发现问题。但是,几乎可以肯定的是,您使用的是对已被破坏的自定义对象的引用或指针(或迭代器)。找到此访问权限的最直接的方法是在valgrind中运行您的程序,在没有优化的情况下编译,并使用调试信息。不幸的是,这不适用于windows(请参阅)


这里的主要问题似乎是,你甚至没有得到回溯,因为这至少会给你一个强烈的暗示,告诉你应该去哪里寻找。我不熟悉windows,所以我只能猜测是什么原因造成的。您确定已使用调试信息编译了所有内容吗?

上次在代码上运行内存泄漏检测器是什么时候?你在代码上运行过静态分析器吗?听起来像是堆损坏。几乎可以肯定,
memcpy
调用中没有错误。这可能是很久以前的事了。
memcpy()
可能只是在识别问题。听起来好像你有一个主要的缓冲区溢出,所以你的大部分堆栈被写在堆栈上的东西(可能是这个
memcpy()
)破坏了。这可能意味着您在堆栈上有一个数组(比如N个元素),但您的代码不知何故猜测数组中有M个元素(M>N),这会导致在调用
memcpy()
之前破坏有用的信息。由于调试器试图使用被破坏的堆栈信息,因此它不会有帮助,因为损坏已经发生。请安装“应用程序验证程序”并运行它。它是微软提供的免费调试工具。它在免费的“Windows调试SDK”中提供。它可以帮助你发现漏洞和腐败。Windows 7版本和以前的信息可以在以下位置找到:或者您可以从或从中获取整个免费调试SDK。事实证明,它是由错误的静态转换导致的错误字符串副本构造函数。等等什么?如果没有堆栈跟踪,这怎么可能发生?这是C++中的特定内容吗?我也得到了这个。。。我怎么才能找到问题所在呢?