未初始化的值是由堆栈分配创建的 - Qt - C ++

时间:2012-12-05 10:51:02

标签: c++ qt valgrind

使用:

valgrind --leak-check=full -v --fullpath-after=. --num-callers=50 --track-origins=yes --leak-resolution=high offline

Valgrind说:

==8914== Conditional jump or move depends on uninitialised value(s)
==8914==    at 0x62E9ADD: QTextFormatCollection::indexForFormat(QTextFormat const&) (/var/tmp/qt-src/src/gui/text/qtextformat.cpp:3075)
==8914==    by 0x6301D65: QTextDocumentPrivate::init() (/var/tmp/qt-src/src/gui/text/qtextdocument_p.cpp:228)
==8914==    by 0x630350B: QTextDocumentPrivate::clear() (/var/tmp/qt-src/src/gui/text/qtextdocument_p.cpp:275)
==8914==    by 0x62F41E7: QTextDocument::setHtml(QString const&) (/var/tmp/qt-src/src/gui/text/qtextdocument.cpp:1186)
==8914==    by 0x62C123E: QTextControlPrivate::setContent(Qt::TextFormat, QString const&, QTextDocument*) (/var/tmp/qt-src/src/gui/text/qtextcontrol.cpp:481)
==8914==    by 0x64F4C8E: QTextEditPrivate::init(QString const&) (/var/tmp/qt-src/src/gui/widgets/qtextedit.cpp:174)
==8914==    by 0x64F5528: QTextEdit::QTextEdit(QString const&, QWidget*) (/var/tmp/qt-src/src/gui/widgets/qtextedit.cpp:625)
==8914==    by 0x40E1B3: controlRThroughQt::controlRThroughQt() (in /home/anisha/.../offline)
==8914==    by 0x40E933: main (in /home/anisha/.../offline)
==8914==  Uninitialised value was created by a stack allocation
==8914==    at 0x62E73B0: QTextFormatPrivate::recalcHash() const (/var/tmp/qt-src/src/gui/text/qtextformat.cpp:317)
==8914== 

您认为哪些值未初始化?

构造函数:

controlRThroughQt :: controlRThroughQt ()
{
    /** Qt widget's interface which will be controlling the R's widget */
    window          = new QMainWindow  ();
    centralWidget = new QWidget (window);

    refresh          = new QPushButton ("Start R", window);
    refresh->setFixedSize   (55, 55);
    connect (refresh, SIGNAL (clicked ()), this, SLOT (slotRefreshR ()));

    zoomIn          = new QPushButton ("Zoom\nin", window);
    zoomIn->setFixedSize   (55, 55);
    connect (zoomIn, SIGNAL (clicked ()), this, SLOT (slotZoomInR ()));

    zoomOut        = new QPushButton ("Zoom\nout", window);
    zoomOut->setFixedSize   (55, 55);
    connect (zoomOut, SIGNAL (clicked ()), this, SLOT (slotZoomOutR ()));

    panLeft          = new QPushButton ("Pan\nLeft", window);
    panLeft->setFixedSize   (55, 55);
    connect (panLeft, SIGNAL (clicked ()), this, SLOT (slotPanLeftR ()));

    panRight         = new QPushButton ("Pan\nRight", window);
    panRight->setFixedSize   (55, 55);
    connect (panRight, SIGNAL (clicked ()), this, SLOT (slotPanRightR ()));

    panTop          = new QPushButton ("Pan\nTop", window);
    panTop->setFixedSize   (55, 55);
    connect (panTop, SIGNAL (clicked ()), this, SLOT (slotPanTopR ()));

    panBottom      = new QPushButton ("Pan\nBottom", window);
    panBottom->setFixedSize   (55, 55);
    connect (panBottom, SIGNAL (clicked ()), this, SLOT (slotPanBottomR ()));

    panBottomRight = new QPushButton ("Bottom\nRight", window);
    panBottomRight->setFixedSize   (55, 55);
    connect (panBottomRight, SIGNAL (clicked ()), this, SLOT (slotPanBottomRightR ()));

    panBottomLeft   = new QPushButton ("Bottom\nLeft", window);
    panBottomLeft->setFixedSize   (55, 55);
    connect (panBottomLeft, SIGNAL (clicked ()), this, SLOT (slotPanBottomLeftR ()));

    panTopRight     = new QPushButton ("Top\nRight", window);
    panTopRight->setFixedSize   (55, 55);
    connect (panTopRight, SIGNAL (clicked ()), this, SLOT (slotPanTopRightR ()));

    panTopLeft      = new QPushButton ("Top\nLeft", window);
    panTopLeft->setFixedSize   (55, 55);
    connect (panTopLeft, SIGNAL (clicked ()), this, SLOT (slotPanTopLeftR ()));

    findInfo        = new QPushButton ("Find\nInfo.", window);
    findInfo->setFixedSize   (55, 55);
    connect (findInfo, SIGNAL (clicked ()), this, SLOT (slotFindInfoR ()));

    textEdit        = new QTextEdit ("Vehicle Info. will be shown here.", window);
    textEdit->setReadOnly (true);
    textEdit->setFixedSize (155, 555);

    layout          = new QGridLayout ();
    centralWidget->setLayout (layout);
    layout->addWidget (refresh, 0, 0);
    layout->addWidget (zoomIn, 1, 0);
    layout->addWidget (zoomOut, 1, 1);

    layout->addWidget (panLeft, 2, 0);
    layout->addWidget (panRight, 2, 1);
    layout->addWidget (panTop, 3, 0);
    layout->addWidget (panBottom, 3, 1);

    layout->addWidget (panBottomRight, 4, 0);
    layout->addWidget (panBottomLeft, 4, 1);
    layout->addWidget (panTopRight, 5, 0);
    layout->addWidget (panTopLeft, 5, 1);

    layout->addWidget (findInfo, 6, 0);
    layout->addWidget (textEdit, 7, 0);

    window->setCentralWidget (centralWidget);
    window->setWindowFlags (Qt::WindowStaysOnTopHint);
    window->show ();
}

成员函数调用:

void controlRThroughQt :: slotRefreshR () { rdaTilesOnR :: loadNewTileAndPlotPointsOnRWidget (0, 0, 0); }

void controlRThroughQt :: slotPanLeftR () { rdaTilesOnR :: loadNewTileAndPlotPointsOnRWidget (1, 0, 0); }
void controlRThroughQt :: slotPanRightR () { rdaTilesOnR :: loadNewTileAndPlotPointsOnRWidget (2, 0, 0); }
void controlRThroughQt :: slotPanTopR () { rdaTilesOnR :: loadNewTileAndPlotPointsOnRWidget (3, 0, 0); }
void controlRThroughQt :: slotPanBottomR () { rdaTilesOnR :: loadNewTileAndPlotPointsOnRWidget (4, 0, 0); }

void controlRThroughQt :: slotPanTopLeftR () { rdaTilesOnR :: loadNewTileAndPlotPointsOnRWidget (5, 0, 0); }
void controlRThroughQt :: slotPanTopRightR () { rdaTilesOnR :: loadNewTileAndPlotPointsOnRWidget (6, 0, 0); }
void controlRThroughQt :: slotPanBottomLeftR () { rdaTilesOnR :: loadNewTileAndPlotPointsOnRWidget (7, 0, 0); }
void controlRThroughQt :: slotPanBottomRightR () { rdaTilesOnR :: loadNewTileAndPlotPointsOnRWidget (8, 0, 0); }

void controlRThroughQt :: slotZoomInR () { rdaTilesOnR :: loadNewTileAndPlotPointsOnRWidget (9, 0, 0); }
void controlRThroughQt :: slotZoomOutR () { rdaTilesOnR :: loadNewTileAndPlotPointsOnRWidget (10, 0, 0); }

void controlRThroughQt :: slotFindInfoR () { rdaTilesOnR :: loadNewTileAndPlotPointsOnRWidget (12, 0, 0); }

更新


controlRThroughQt :: controlRThroughQt () : 
                    window (new QMainWindow  ()),
                    centralWidget (new QWidget (window)),
                    refresh (new QPushButton ("Start R", window)), 
                    zoomIn (new QPushButton ("Zoom\nin", window)),
                    zoomOut (new QPushButton ("Zoom\nout", window)),
                    panLeft (new QPushButton ("Pan\nLeft", window)),
                    panRight (new QPushButton ("Pan\nRight", window)),
                    panTop (new QPushButton ("Pan\nTop", window)),
                    panBottom (new QPushButton ("Pan\nBottom", window)),
                    panBottomRight (new QPushButton ("Bottom\nRight", window)),
                    panBottomLeft (new QPushButton ("Bottom\nLeft", window)),
                    panTopRight (new QPushButton ("Top\nRight", window)),
                    panTopLeft (new QPushButton ("Top\nLeft", window)),
                    findInfo (new QPushButton ("Find\nInfo.", window)),
                    textEdit (new QTextEdit ("Vehicle Info.", window)),
                    layout (new QGridLayout ())

我更新了我的代码,如上所示,但错误w.r.t QTextEdit仍然存在。当我从Qt GUI中完全删除QTextEdit时,错误就消失了 请指导。

2 个答案:

答案 0 :(得分:1)

您正在做的是不初始化它是一项任务 检查 Member Initialization List

答案 1 :(得分:0)

从代码中我可以看出,问题出在Qt本身。编写一个只有QTextEdit的最小应用程序,看看是否可以得到类似的错误。如果是,那是Qt的问题,而不是你的问题,你应该将错误添加到抑制列表中。

相关问题