QWizard可能存在内存泄漏

时间:2014-02-21 09:07:54

标签: qt memory-leaks valgrind

我正在制作一个向导,在执行某个任务时启动另一个程序并自行关闭。它似乎工作正常。但是,一旦我通过Valgrind运行它,它就会在我分配向导页面的行上给我一个可能的内存泄漏。它还给了我一个相当大的信息(大约2,5k行)到控制台。

这是复制问题的简单程序

mainwizard.cpp

MainWizard::MainWizard(QWidget *parent) :
QWizard(parent),
ui(new Ui::MainWizard)
{
    ui->setupUi(this);
    setWizardStyle(QWizard::ClassicStyle);
    //This line gives me a Valgrind warning
    setPage(0,  new WizardPage());
}

MainWizard::~MainWizard()
{
    qDebug() << "end";
    delete ui;
}

void MainWizard::TerminateWizard()
{
    QString program = "../GrafonTest/GrafonTest";
    QStringList arguments;

    QProcess *desktop_process = new QProcess();

    desktop_process->startDetached(program, arguments);
    done(0);
}

wizardpage.cpp

WizardPage::WizardPage(QWidget *parent) :
    QWizardPage(parent),
    ui(new Ui::WizardPage)
{
    ui->setupUi(this);

    connect(ui->pushButton, SIGNAL(pressed()), this, SLOT(FinishWizard()));
}

WizardPage::~WizardPage()
{
    delete ui;
}

void WizardPage::initializePage()
{
    MainWizard *pWizard = (MainWizard*)wizard();
    connect(this, SIGNAL(timeToEndWizard()), pWizard, SLOT(TerminateWizard()));
}


void WizardPage::FinishWizard()
{
    emit timeToEndWizard();
}

的main.cpp

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWizard w;
    w.show();

    return a.exec();
}

我尝试将页面分成向导类的成员,结果是一样的。 如果我不调用QProcess,则没有错误。同样,如果我评论setpage行并通过计时器或其他东西关闭向导。

错误在哪里?

EDIT。即使我没有在TerminateWizard()中关闭向导,valgrind也会抱怨。他按下按钮的那一刻就这样做了。然而,无论多次按下它,可能丢失的字节数都是相同的

0 个答案:

没有答案