Утечки памяти с QMenu - PullRequest
       20

Утечки памяти с QMenu

0 голосов
/ 11 мая 2019

Я попытался создать приложение Qt . При использовании Valgrind наблюдаются утечки памяти, вызванные QMenu. Я не в состоянии понять это точно. Я попытался следовать примеру QT для класса QTMenu , но даже это привело к утечкам. Valgrind уведомляет, что здесь происходят утечки при вызове addMenu:

void MainWindow::createMenu()
{
    //Create menus
    QAction *quit = new QAction("&Quit", this);
    QMenu *file = menuBar()->addMenu("&File");
    file->addAction(quit);
    connect(quit, &QAction::triggered,
    [=]() {
        QApplication::quit();
    });

    //Creating instances of ticker and timer here
    //Done so that the connection between ticker and timer is possible
    ticker = new Ticker(this);
    timer = new Timer(this);
    connect(timer, &Timer::timeout, ticker, &Ticker::playSound);
}

Это и есть журнал Valgrind

The leaks happen with 78 (32 direct, 46 indirect) bytes in 1 blocks are definitely lost in loss record 11,297 of 16,371
  in MainWindow::createMenu() in /home/user/Documents/C/QT/Metronome/MainWindow.cpp:47
  1: operator new(unsigned long) in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so
  2: 0x1630a434
  3: /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5.5.1
  4: QMainWindow::menuBar() const in /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5.5.1
  5: MainWindow::createMenu() in /home/user/Documents/C/QT/Metronome/MainWindow.cpp:47
  6: MainWindow::setMainWindow() in /home/user/Documents/C/QT/Metronome/MainWindow.cpp:20
  7: MainWindow::MainWindow(QWidget*) in /home/user/Documents/C/QT/Metronome/MainWindow.cpp:6
  8: main in /home/user/Documents/C/QT/Metronome/main.cpp:22

Итак, мой вопрос: как мне выложить меню, чтобы избежать утечек памяти? Кстати, удаление раздела QAction, QMenu не приводит к утечкам.

1 Ответ

0 голосов
/ 20 мая 2019

Выполнение этого в функции main() помогло решить проблему:

MainWindow *window = new MainWindow();
...