Qt 随机双自由或损坏错误

Qt 随机双自由或损坏错误,qt,memory-management,Qt,Memory Management,出于某种原因,我正在用QT编写一个程序。在一段代码中,有时我会得到双重免费或损坏错误,但不是在100%的情况下。例如,我按下按钮时会执行以下代码: void manureman::on_BitBtn3_clicked() { mnrmanothprods *otherprods = new mnrmanothprods(this,database,currentSystem); moduleSubScreen m_dialogWindow; m_dialogWindow.

出于某种原因,我正在用QT编写一个程序。在一段代码中,有时我会得到双重免费或损坏错误,但不是在100%的情况下。例如,我按下按钮时会执行以下代码:

void manureman::on_BitBtn3_clicked()
{
    mnrmanothprods *otherprods = new mnrmanothprods(this,database,currentSystem);
    moduleSubScreen m_dialogWindow;
    m_dialogWindow.loadSubScreen(otherprods);
    m_dialogWindow.setWindowTitle("Purchased products for manure management");
    qDebug() << "Loading window";
    m_dialogWindow.exec();
    qDebug() << "After loading window";

    qDebug() << "Exiting";
}
moduleSubScreen类仅将mnrMothProds添加到具有以下内容的布局:

    void moduleSubScreen::loadSubScreen(impgenmaint *child)
    {
        m_child = child;
        connect(m_child,SIGNAL(closeCalled()),this,SLOT(close()));
        ui->MainLayout->addWidget(child);
    } 
我将调试信息放入类的每个析构函数中,因此在关闭对话框后,通常会得到:

Debug: After loading window 
Debug: Exiting 
Debug: Before destroy moduleSubScreen UI 
Debug: After destroy moduleSubScreen UI 
Debug: After m_child = 0 
Debug: Before destroy mnrmanothprods UI 
Debug: After destroy mnrmanothprods UI 
Debug: Destroy: fieldInColModel 
Debug: Destroy imageCheckDelegate 
Debug: Destroy: periodTableModel 
Debug: Destroy imageCheckDelegate
然而,有时我会随机地在调试的一部分中出现双重删除错误:

Debug: After loading window 
    Debug: Exiting 
    Debug: Before destroy moduleSubScreen UI 
    Debug: After destroy moduleSubScreen UI 
    Debug: After m_child = 0 
    Debug: Before destroy mnrmanothprods UI 
    Debug: After destroy mnrmanothprods UI 
    Debug: Destroy: fieldInColModel
你知道我该怎么做才能抓住虫子吗。。。或者为什么这样的错误不会一直发生

谢谢。
卡洛斯

你可以用一个工具来帮助他。像这样的东西通常很擅长找到这类东西。

Hi,我用valgrind运行了它--leak check=full--log file=./mleaks.log./myprogram。。。但除了在一段不相关的代码中出现2次小内存泄漏外,我没有收到任何重大错误。。。。我认为Valgrind无法跟踪它,所以我在通常发生碰撞的同一行中创建了一个控制问题,Valgrind显示了控制问题。。。现在。。我是瞎子!:-(可能的副本)
Debug: After loading window 
    Debug: Exiting 
    Debug: Before destroy moduleSubScreen UI 
    Debug: After destroy moduleSubScreen UI 
    Debug: After m_child = 0 
    Debug: Before destroy mnrmanothprods UI 
    Debug: After destroy mnrmanothprods UI 
    Debug: Destroy: fieldInColModel