Проблема с Valgring обнаружена в QMenu на QT-5.7.0
Создав простую программу только с QMenuBar, мне удалось обнаружить проблему, обнаруженную Valgring GBD.
Вот моя программа
main.cpp:
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.cpp:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMenuBar>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QMenuBar *menuBar = new QMenuBar(this);
QMenu *menu = new QMenu(menuBar);
menu->setTitle("test");
menu->addAction("test1", this, SLOT(onTest1()));
menu->addAction("test2", this, SLOT(onTest2()));
menuBar->addMenu(menu);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::onTest1()
{
qInfo("TEST1");
}
void MainWindow::onTest2()
{
qInfo("TEST2");
}
Когда я запускаю с помощью "Valgrind Memory Analyzer with GBD", при нажатии на действие "test1" или "test2" обнаруживается следующая ошибка:
== 31965 == Параметр Syscall writev(вектор [...]) указывает на неинициализированные байты == 31965 == в 0x6BE040D:??? (syscall-template.S:84) ==31965== от 0xBF97F28:??? (в /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0) ==31965== от 0xBF9831C:??? (в /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0) ==31965== от 0xBF98A76:??? (в /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0) ==31965== от 0xBF98C43: xcb_flush (в /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0) ==31965== от 0xD573C2F: QXcbWindow::hide() (в /home/lmartin/Qt/5.7/gcc_64/lib/libQt5XcbQpa.so.5.7.0) ==31965== от 0x578BE64: QWindow::setVisible(bool) (в /home/lmartin/Qt/5.7/gcc_64/lib/libQt5Gui.so.5.7.0) ==31965== от 0x4FC866E: QWidgetPrivate::hide_sys() (в /home/lmartin/Qt/5.7/gcc_64/lib/libQt5Widgets.so.5.7.0) ==31965== от 0x4FCE7AC: QWidgetPrivate::hide_helper() (в /home/lmartin/Qt/5.7/gcc_64/lib/libQt5Widgets.so.5.7.0) == 31965 == по 0x4FD37E7: QWidget::setVisible(bool) (в /home/lmartin/Qt/5.7/gcc_64/lib/libQt5Widgets.so.5.7.0) == 31965 == по 0x4FCEAE7: QWidgetPrivate::close_hel (QWidgetPrivate::CloseMode) (в /home/lmartin/Qt/5.7/gcc_64/lib/libQt5Widgets.so.5.7.0) == 31965 == от 0x50F3E3A:??? (в /home/lmartin/Qt/5.7/gcc_64/lib/libQt5Widgets.so.5.7.0) == 31965 == от 0x50F47DE:??? (в /home/lmartin/Qt/5.7/gcc_64/lib/libQt5Widgets.so.5.7.0) == 31965 == от 0x50F4AEB:??? (в /home/lmartin/Qt/5.7/gcc_64/lib/libQt5Widgets.so.5.7.0) == 31965 == от 0x50F87C5: QMenu::mouseReleaseEvent(QMouseEvent*) (в /home/lmartin/Qt/5.7/ gcc_64 / lib / libQt5Widgets.so.5.7.0) == 31965 == от 0x4FD3B77: QWidget::event(QEvent*) (в /home/lmartin/Qt/5.7/gcc_64/lib/libQt5Widgets.so.5.7.0) == 31965 == по 0x50F91CA: QMenu::event(QEvent*) (в /home/lmartin/Qt/5.7/gcc_64/lib/libQt5Widgets.so.5.7.0) == 31965 == по 0x4F8E52B: QApplicationPrivate::notify_helper(QObject*, QEvent*) (в /home/lmartin/Qt/5.7/gcc_64/lib/libQt5Widgets.so.5.7.0) == 31965 == от 0x4F95807: QApplication::notify(QObject*, QEvent*) (в /home/lmartin/Qt/5.7/gcc_64/lib/libQt5Widgets.so.5.7.0) == 31965 == от 0x60A2ADF: QCoreApplication::notifyInternal2(QObject*, QEvent*) (в /home/lmartin/Qt/5.7/gcc_64/lib/libQt5Core.so.5.7.0) ==31965== от 0x4F947BE: QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer&, bool (в /home/lmartin/Qt/5.7/gcc_64/lib/libQt5Widgets.so.5.7.0) == 31965 == по 0x4FEF5FA:??? (в /home/lmartin/Qt/5.7/gcc_64/lib/libQt5Widgets.so.5.7.0) == 31965 == от 0x4FF1512:??? (в /home/lmartin/Qt/5.7/gcc_64/lib/libQt5Widgets.so.5.7.0) == 31965 == от 0x4F8E52B: QApplicationPrivate::notify_helper(QObject*, QEvent*) (в / home / lmartin / Qt /5.7/gcc_64/lib/libQt5Widgets.so.5.7.0) == 31965 == от 0x4F9521F: QApplication::notify(QObject*, QEvent*) (в /home/lmartin/Qt/5.7/gcc_64/lib/libQt5Widgets.so.5.7.0) == 31965 == Адрес 0xcc97941 составляет 4545 байт внутри блока размером 21 152 alloc'd ==31965== в 0x4C2FB55: calloc (в /usr/lib/valgrind/vgpreload_memcheck-amd64-linux. так) == 31965 == от 0xBF978DB: xcb_connect_to_fd (в /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0) ==31965== от 0xBF9B610: xcb_connect_to_display_with / us86_info linux-gnu / libxcb.so.1.1.0) == 31965 == от 0xB872809: _XConnectXCB (in /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0) ==31965== от 0xB863391: XOpenDisplay (в /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0) == 31965 == от 0xD55F095: QXcbConnection::QXcbConnection(QXcbNativeInterface*, bool, unsigned int, char const*) (в / главная / lmartin / Qt / 5,7 / gcc_64 / л ib / libQt5XcbQpa.so.5.7.0) == 31965 == от 0xD562AEA: QXcbIntegration::QXcbIntegration(QStringList const&, int&, char**) (в /home/lmartin/Qt/5.7/gcc_64/lib/libQpso.c.5.7.0) == 31965 == от 0xD31D3EA:??? (в /home/lmartin/Qt/5.7/gcc_64/plugins/platforms/libqxcb.so) ==31965== от 0x577041A: QPlatformIntegrationFactory::create(QString const&, QStringList const&, int&, char**, QString const& (в /home/lmartin/Qt/5.7/gcc_64/lib/libQt5Gui.so.5.7.0) ==31965== от 0x577D483: QGuiApplicationPrivate::createPlatformIntegration() (в /home/lmartin/Qt/5.7/gcc_64/lib /libQt5Gui.so.5.7.0) == 31965 == от 0x577DF4C: QGuiApplicationPrivate::createEventDispatcher() (в /home/lmartin/Qt/5.7/gcc_64/lib/libQt5Gui.so.5.7.0) == 31965 = = 0x60A89CC: QCoreApplicationPrivate::init() (в /home/lmartin/Qt/5.7/gcc_64/lib/libQt5Core.so.5.7.0) == 31965 == 0x577E8EB: QGuiApplicationPrivate::init() (в / home / lmartin / Qt / 5.7 / gcc_64 / lib / libQt5Gui.so.5.7.0) == 31965 == от 0x4F92988: QApplicationPrivate::init() (в /home/lmartin/Qt/5.7/gcc_64/lib/libQt5Widgets.so.5.7.0) ==31965== by 0x402B8D: main (main.cpp:6) ==31965== Неинициализированное значение было создано выделением стека ==31965== at 0xD575DB0: не виртуальный преобразователь в QXcbWindow::setVisible(bool) (в /home/lmartin/Qt/5.7/gcc_64/lib/libQt5XcbQpa.so.5.7.0) ==31965== ==31965== (действие при ошибке) vgdb me ... ==31965== Продолжение... { Memcheck:Param writev(вектор [...])
OBJ:/lib/x86_64-linux-gnu/libc-2.23.so
OBJ:/usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0
OBJ:/usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0
obj:/usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0 fun: xcb_flush
Приколы:_ZN10QXcbWindow4hideEv Приколы:_ZN7QWindow10setVisibleEb
весело:_ZN14QWidgetPrivate8hide_sysEv
весело:_ZN14QWidgetPrivate11hide_helperEv
весело:_ZN7QWidget10setVisibleEb
весело:_ZN14QWidgetPrivate12close_helperENS_9CloseModeE
OBJ:/home/lmartin/Qt/5.7/gcc_64/lib/libQt5Widgets.so.5.7.0
OBJ:/home/lmartin/Qt/5.7/gcc_64/lib/libQt5Widgets.so.5.7.0
OBJ:/home/lmartin/Qt/5.7/gcc_64/lib/libQt5Widgets.so.5.7.0
весело:_ZN5QMenu17mouseReleaseEventEP11QMouseEvent
веселье:_ZN7QWidget5eventEP6QEvent fun:_ZN5QMenu5eventEP6QEvent
весело:_ZN19QApplicationPrivate13notify_helperEP7QObjectP6QEvent
весело:_ZN12QApplication6notifyEP7QObjectP6QEvent
весело:_ZN16QCoreApplication15notifyInternal2EP7QObjectP6QEvent
Веселье:_ZN19QApplicationPrivate14sendMouseEventEP7QWidgetP11QMouseEventS1_S1_PS1_R8QPointerIS0_Eb obj:/home/lmartin/Qt/5.7/gcc_64/lib/libQt5Widgets.so.5.7.0
OBJ:/home/lmartin/Qt/5.7/gcc_64/lib/libQt5Widgets.so.5.7.0
Приколы:_ZN19QApplicationPrivate13notify_helperEP7QObjectP6QEvent }
Как я могу приступить к решению таких проблем?