Qt应用程序:验证器停止000000 13:当前堆栈跟踪的首次访问冲突

Qt应用程序:验证器停止000000 13:当前堆栈跟踪的首次访问冲突,qt,access-violation,qt-designer,application-verifier,Qt,Access Violation,Qt Designer,Application Verifier,一周后,我的Qt应用程序无法运行。我不熟悉堆损坏、访问冲突等东西。现在我知道它“疼”得要命,) 同时,我安装了应用程序验证程序。我使用的是VS2010,Qt4.8.4,Qwt6.0.0。现在,我将GUI类减少到最小,并且仍然通过应用程序验证程序获得访问冲突。这是GUI代码: #include "mygui.h" #include <QtGui/QApplication> int main(int argc, char *argv[]) { QApplication a(ar

一周后,我的Qt应用程序无法运行。我不熟悉堆损坏、访问冲突等东西。现在我知道它“疼”得要命,)

同时,我安装了应用程序验证程序。我使用的是VS2010,Qt4.8.4,Qwt6.0.0。现在,我将GUI类减少到最小,并且仍然通过应用程序验证程序获得访问冲突。这是GUI代码:

#include "mygui.h"
#include <QtGui/QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MYGUI w;
    w.show();
    return a.exec();
}
在ui_mygui.h中,完成并输入MYengine的构造函数。构造函数的任何一行都不会被执行,它只会触发一个断点。这是验证者报告:

======================================= 验证程序停止000000 13:pid 0x1CDC:当前堆栈跟踪的首次机会访问冲突

0AF79000 : Invalid address causing the exception.
00E15057 : Code address executing the invalid access.
0032F134 : Exception record.
0032F184 : Context record.
======================================= 此验证器停止是可继续的。 调试后,使用“go”继续

=======================================

如果我只删除一行

myEngine_ = boost::shared_ptr<MYengine>(new MYengine());
myEngine=boost::shared_ptr(new myEngine());
在mygui.cpp中,Gui打开,没有应用程序验证程序断点,一切正常


我完全迷路了。MYengine类是一个嵌入在静态库中的大型类,其中包含数百个附加类。甚至在执行Myengine构造函数的第一行之前,也会发生此错误。那么,为什么有或没有这条线,行为会如此不同呢?任何想法都将不胜感激。这段代码开始让我觉得,(

在不知道代码其余部分的情况下,我很确定您不应该将Qt指针放入boost共享指针中-Qt有自己的对象生命周期管理,并且会在不询问共享指针的情况下删除内存,因此您可能最终会得到指向已释放内存的boost指针。 但这只适用于

boost::shared_ptr<QMenu> treeWidgetMenu_;
boost::shared_ptr<QAction> treeWidgetMenuDeleteAction_;
boost::shared_ptr treewidgetmenus;
boost::shared_ptr treeWidgetMenuDeleteAction_u2;;
可能分别是QMenu*和QAction*


我假设MYengine不是Qt类。也许,您应该向我们展示MYengine的接口,以便我们能够理解为什么指向MYengine的共享指针会造成麻烦。

当存在QSharedPointer时,为什么要使用boost::shared\u ptr?您使用的优化级别是什么?MYengine构造函数中的内存损坏可能会导致错误d到setupUi中的一个错误。@Archie:我用QSharedPointer尝试过。没有变化。我是Qt新手,以前一直使用boost共享指针。@Ixanezis:我使用的是最大速度优化。我对应用程序验证程序断点的确切行有错误。它是在setupUi方法之后,当输入MYengine的构造函数时抛出的。但是甚至在构造函数的第一行被执行之前。你可能这样做了,但我还是要问它,只是为了减少潜在问题的数量:你是否尝试过完全重建?
void setupUi(QMainWindow *MYGUIClass)
0AF79000 : Invalid address causing the exception.
00E15057 : Code address executing the invalid access.
0032F134 : Exception record.
0032F184 : Context record.
myEngine_ = boost::shared_ptr<MYengine>(new MYengine());
boost::shared_ptr<QMenu> treeWidgetMenu_;
boost::shared_ptr<QAction> treeWidgetMenuDeleteAction_;