我正在制作一个向导,在执行某个任务时启动另一个程序并自行关闭。它似乎工作正常。但是,一旦我通过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也会抱怨。他按下按钮的那一刻就这样做了。然而,无论多次按下它,可能丢失的字节数都是相同的