在MainWindow::runButton_clicked()
中,我实例化了GraphWindow
类型的对象。我需要通过MainWindow
中的另一个函数访问此对象,所以我尝试将对象的地址传递给相同类型的指针;
在MainWindow.h中
//Forward declaring Graphwindow
class GraphWindow;
class MainWindow : public QMainWindow
{
//Member slots
GraphWindow *graphPtr;
}
in MainWindow.cpp
MainWindow::on_runButton_clicked()
{
GraphWindow graphObj;
MainWindow::graphPtr = &graphObj;
//Other code
}
MainWindow::someFunction()
{
MainWindow::graphPtr->exec();
}
我知道这不是最优雅的做事方式;我这样做的原因;
GraphWindow
定义中创建MainWindow
的对象
因为class GraphWindow
在那里被宣告to access all its member functions in
MainWindow :: on_runButton_clicked()but I'm using this function called
QTimer :: singleShot()in
MainWindow :: on_runButton_clicked()which requires a object of type
GraphWindow `无论如何,我猜我通过存储在访问后者的指针广告中创建的对象的地址来做的方式是正确的。但不确定为什么我的程序崩溃了。任何建议表示赞赏
答案 0 :(得分:1)
您在堆栈上存储局部变量的地址。当public boolean canShowErrorDialogs() {
return mShowDialogs && !mSleeping && !mShuttingDown
&& mLockScreenShown != LOCK_SCREEN_SHOWN;
} // ActivityManagerService
函数返回时,该on_runButton_clicked
对象被销毁/解除分配。这称为悬空指针:访问该指针的任何代码稍后会调用未定义的行为。
一个解决方案:使用GraphWindow
在堆上分配对象(不要忘记new
它!):
delete