Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
app.exe已触发断点,后跟访问冲突写入位置 我有一个QT+C++应用程序,代码基础很大。我对体系结构有点熟悉,但对代码了解不多。每次关闭应用程序时,它都会显示消息“app.exe已触发断点”,如果我单击“继续”,我将获得_C++_Debugging_Qt_Visual Studio 2005_Access Violation - Fatal编程技术网

app.exe已触发断点,后跟访问冲突写入位置 我有一个QT+C++应用程序,代码基础很大。我对体系结构有点熟悉,但对代码了解不多。每次关闭应用程序时,它都会显示消息“app.exe已触发断点”,如果我单击“继续”,我将获得

app.exe已触发断点,后跟访问冲突写入位置 我有一个QT+C++应用程序,代码基础很大。我对体系结构有点熟悉,但对代码了解不多。每次关闭应用程序时,它都会显示消息“app.exe已触发断点”,如果我单击“继续”,我将获得,c++,debugging,qt,visual-studio-2005,access-violation,C++,Debugging,Qt,Visual Studio 2005,Access Violation,“app.exe中0x6701c95d(QtCored4.dll)处未处理的异常: 0xC0000005:访问冲突写入位置0x0c3e9fd8。“ 有一个像这样的堆栈跟踪 我已经连接了应用验证程序,它会将其转储到输出窗口中 =========================================================== VERIFIER STOP 0000000000000013: pid 0x2654: first chance access violation for

“app.exe中0x6701c95d(QtCored4.dll)处未处理的异常: 0xC0000005:访问冲突写入位置0x0c3e9fd8。“

有一个像这样的堆栈跟踪

我已经连接了应用验证程序,它会将其转储到输出窗口中

===========================================================
VERIFIER STOP 0000000000000013: pid 0x2654: first chance access violation for current stack trace 

    000000000C3E9FD8 : Invalid address being accessed
    000000006701C95D : Code performing invalid access
    000000000008EB40 : Exception record. Use .exr to display it.
    000000000008E650 : Context record. Use .cxr to display it.
===========================================================
This verifier stop is continuable. 
After debugging it use `go' to continue.
===========================================================

我的问题是,如何进行调试以找出导致此问题的原因?我在非托管编程领域没有太多经验,我完全迷失了方向。如果有任何帮助,我们将不胜感激。

您已经连接了调试器,并且调试器显示了调用堆栈,您应该能够在遍历堆栈时检查变量值,并查看是否有任何变量处于正确状态

这里的崩溃是因为您尝试访问/取消引用的指针无效

你有源代码吗?如果是这样的话,那么这应该是相对简单的,因为看起来您有完整的QT PDB,因为它显示了正确解析的符号和行号

您也可以尝试WinDbg,但这是一个非常高级的调试器,需要您花时间学习

我认为,事实上,您已经附加了调试器,它已经向您显示了很多有用的信息,您应该查看内存窗口/局部变量/自动变量并检查变量值,这些指针中的一个很可能为null或未初始化


查看调用堆栈,我会查看QCursor对象,如果调试会话处于活动状态,则将光标悬停在该对象上可能会出现一些弹出窗口,显示其当前值,值或地址可能为null或无效。

可能是由于缓冲区溢出或双重删除悬空指针而导致内存损坏。巴特指出,如果您没有意识到QObject的父对象拥有Qt代码,那么在调用Qt代码时可能会发生这种情况。您已经在使用App Verifier,但我也会尝试从Windows调试工具运行
gflags
,并启用,因为这可能有助于定位问题。

最可能的事情是什么?我在猜,但是继续往下调用,直到你找到你真正写的东西。考虑到析构函数调用,我冒昧猜测您实际上正在删除Qt拥有的某些内容。