C++ _块类型在C+中是有效的(pHead->;nBlockUse)崩溃+;

C++ _块类型在C+中是有效的(pHead->;nBlockUse)崩溃+;,c++,qt,assertion,C++,Qt,Assertion,我有一个QtGUI程序,在它里面我可以点击一个按钮来加载/卸载许多dock小部件。 我有一个问题,当我点击按钮加载/卸载dock小部件时,程序会因为这样说而崩溃 Debug Assertion Failed, Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse) 并不是每次都这样。(事实上很少发生。) 当我检查Windows的事件日志时,它说应用程序挂起时带有跨线程死锁。 但大多数在线人士表示,“块类型”是有效的(pHead->nBlock

我有一个QtGUI程序,在它里面我可以点击一个按钮来加载/卸载许多dock小部件。 我有一个问题,当我点击按钮加载/卸载dock小部件时,程序会因为这样说而崩溃

Debug Assertion Failed, Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
并不是每次都这样。(事实上很少发生。) 当我检查Windows的事件日志时,它说应用程序挂起时带有跨线程死锁。 但大多数在线人士表示,“块类型”是有效的(pHead->nBlockUse)意味着内存错误。 我只是不知道发生了什么

这是一个非常大的程序,由别人和错误发生很少。。。 我现在能做些什么来定位这个bug

编辑: 您好,我已经得到了崩溃转储文件,我看到我的程序在一个工作线程停止,调用堆栈:>ntdll.dll_NtWaitForMultipleObjects@20()+0x15字节

如何追溯程序实际停止的源代码?

这通常意味着您试图访问std容器中的非法内存块


要正确地调试它,只需查看
调用堆栈
窗口中的堆栈,查找堆栈直到找到代码,并查看该值无效的原因。

这通常意味着您试图访问std容器中的非法内存块


要正确地调试它,只需查看
调用堆栈
窗口中的堆栈,查找堆栈直到找到代码,并查看该值无效的原因。

这通常意味着您试图访问std容器中的非法内存块


要正确地调试它,只需查看
调用堆栈
窗口中的堆栈,查找堆栈直到找到代码,并查看该值无效的原因。

这通常意味着您试图访问std容器中的非法内存块


要正确调试,只需查看
调用堆栈
窗口中的堆栈,查找堆栈直到找到您的代码,并查看该值无效的原因。

很难描述它,但简单地说,以下是您应该做的:

安装并运行应用程序验证程序

Ctrl+A,选择可执行文件

取消选择右窗格中的所有测试,仅选择基本->堆

确保启用了“完整堆”和“跟踪”(通过右键单击“堆”项来设置属性)

保存。您现在可以关闭应用程序验证程序

启动适当架构的WinDBG(与您的应用程序相同)

Ctrl+E,选择可执行文件

程序将在第一条指令时停止,请使用F5运行它

您遇到错误的概率会高得多。您还可能会发现以前不知道的内存访问问题。当您点击其中一个按钮时,调试器将停止其中一个“验证程序停止”,您将在控制台中看到消息,告诉您可以使用哪个命令进行进一步调查。通常,您可以使用
查看有关堆的详细信息!heap-p-a
,包括分配和解除分配堆栈

请记住,即使应用程序验证程序应用程序未启动,也会启用应用程序验证程序检查。您需要运行应用程序验证程序,禁用检查并按“保存”以实际禁用它们


希望这会有所帮助,至少有一点。阅读有关Internet上应用程序验证技术的更多信息。

很难描述它,但简单地说,以下是您应该做的:

安装并运行应用程序验证程序

Ctrl+A,选择可执行文件

取消选择右窗格中的所有测试,仅选择基本->堆

确保启用了“完整堆”和“跟踪”(通过右键单击“堆”项来设置属性)

保存。您现在可以关闭应用程序验证程序

启动适当架构的WinDBG(与您的应用程序相同)

Ctrl+E,选择可执行文件

程序将在第一条指令时停止,请使用F5运行它

您遇到错误的概率会高得多。您还可能会发现以前不知道的内存访问问题。当您点击其中一个按钮时,调试器将停止其中一个“验证程序停止”,您将在控制台中看到消息,告诉您可以使用哪个命令进行进一步调查。通常,您可以使用
查看有关堆的详细信息!heap-p-a
,包括分配和解除分配堆栈

请记住,即使应用程序验证程序应用程序未启动,也会启用应用程序验证程序检查。您需要运行应用程序验证程序,禁用检查并按“保存”以实际禁用它们


希望这会有所帮助,至少有一点。阅读有关Internet上应用程序验证技术的更多信息。

很难描述它,但简单地说,以下是您应该做的:

安装并运行应用程序验证程序

Ctrl+A,选择可执行文件

取消选择右窗格中的所有测试,仅选择基本->堆

确保启用了“完整堆”和“跟踪”(通过右键单击“堆”项来设置属性)

保存。您现在可以关闭应用程序验证程序

启动适当架构的WinDBG(与您的应用程序相同)

Ctrl+E,选择可执行文件

程序将在第一条指令时停止,请使用F5运行它

您遇到错误的概率会高得多。您还可能会发现以前不知道的内存访问问题。当您点击其中一个按钮时,调试器将停止其中一个“验证程序停止”,您将在控制台中看到消息,告诉您可以使用哪个命令进行进一步调查。通常,您可以使用
查看有关堆的详细信息!heap-p-a
,包括分配和解除分配堆栈

请记住,即使应用程序验证程序应用程序未启动,也会启用应用程序验证程序检查。您需要运行应用程序验证程序,禁用检查并按“保存”以实际禁用