Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. [SOLVED] Memory management question
Forum Updated to NodeBB v4.3 + New Features

[SOLVED] Memory management question

Scheduled Pinned Locked Moved General and Desktop
6 Posts 2 Posters 3.2k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Offline
    M Offline
    maximus
    wrote on last edited by
    #1

    Hi guys, I want to make sure that my code doesn't have any memory leak. i'm new to C++ and pointers.
    Here is my question (see commentary)
    Thank you!

    @subtitleActionGroup = new QActionGroup(this); //OK parent will delete this children when deleted

    QAction *actionSubtitleChoice;
    subtitleActionGroup->addAction(actionSubtitleChoice); // Will actionSubtitle be delete when subtitleActionGroup is deleted? If not, I will have to store an array of QAction and delete it, I just want to know if doing this work is useless@

    Full function code below:

    @//---- Construct subtitle menu
    if (subtitleActionGroup == nullptr) {

        qDebug() << "nullptr...";
    
        subtitleActionGroup = new QActionGroup(this);
        subtitleActionGroup->setExclusive(true);
        QAction *actionSubtitleChoice;
    
    
        int nbSub = _video->subtitleCount();
    
        int i=0;
        if (nbSub>0) {
            QStringList lstSub = _video->subtitleDescription();
            foreach (QString str, lstSub) {
                qDebug() << "ADDING Sub :" << str;
                actionSubtitleChoice = subMenuSubtitle->addAction(str);
                actionSubtitleChoice->setCheckable(true);
                actionSubtitleChoice->setData(i);
                subtitleActionGroup->addAction(actionSubtitleChoice);
                connect(actionSubtitleChoice, SIGNAL(triggered()), this, SLOT(subtitleChanged()));
                i++;
            }
        }@
    

    Free Indoor Cycling Software - https://maximumtrainer.com

    1 Reply Last reply
    0
    • M Offline
      M Offline
      maximus
      wrote on last edited by
      #2

      I found the answer in the doc.

      Do not use .addAction on the QActionGroup.

      Use
      @void QAction::setActionGroup ( QActionGroup * group )@
      to add the Action to the ActionGroup

      then no memory management is needed..


      Free Indoor Cycling Software - https://maximumtrainer.com

      1 Reply Last reply
      0
      • M Offline
        M Offline
        maximus
        wrote on last edited by
        #3

        Finally I add to use .addAction() because I need to add it to multiple group.

        I add to do memory management (see code below)
        Is there a way to set a pointer ton NULL like in Java?
        If I use "subtitleActionGroup = nullptr;" I get a runtime crash

        Thanks

        @void DemoPlayer::resetSubtitle() {
        // subtitleActionGroup->removeAction();

        foreach (QAction *myAction, lstSubAction) {
        
            qDebug() << "need to remove this action...";
        
            disconnect(myAction, SIGNAL(triggered()), this, SLOT(subtitleChanged()));
            subtitleActionGroup->removeAction(myAction);
            subMenuSubtitle->removeAction(myAction);
        

        // subtitleActionGroup = nullptr;
        delete myAction;
        }
        lstSubAction.clear();

        }@

        [EDIT] I'm dump I was doing this in the loop
        put "subtitleActionGroup = nullptr;" out and it worked


        Free Indoor Cycling Software - https://maximumtrainer.com

        1 Reply Last reply
        0
        • S Offline
          S Offline
          Sam
          wrote on last edited by
          #4

          Just for information, you can also use Dr Memory to check for memory leakage in your application.

          1 Reply Last reply
          0
          • M Offline
            M Offline
            maximus
            wrote on last edited by
            #5

            Hey Sam,

            I just used Dr.Memory

            The file generated is huge.
            The thing is, I don't really know how to interpret the memory leak error
            Thanks


            ERRORS FOUND:
            8 unique, 172 total unaddressable access(es)
            2278 unique, 52237 total uninitialized access(es)
            0 unique, 0 total invalid heap argument(s)
            0 unique, 0 total GDI usage error(s)
            0 unique, 0 total warning(s)
            26 unique, 51 total, 4024 byte(s) of leak(s)
            0 unique, 0 total, 0 byte(s) of possible leak(s)
            ERRORS IGNORED:
            3 potential error(s) (suspected false positives)
            (details: C:\Users\Toto\AppData\Roaming\Dr. Memory\DrMemory-PowerVelo2.exe.4816.000\potential_errors.txt)
            483 potential leak(s) (suspected false positives)
            (details: C:\Users\Toto\AppData\Roaming\Dr. Memory\DrMemory-PowerVelo2.exe.4816.000\potential_errors.txt)
            398 unique, 496 total, 117896 byte(s) of still-reachable allocation(s)
            (re-run with "-show_reachable" for details)
            Details: C:\Users\Toto\AppData\Roaming\Dr. Memory\DrMemory-PowerVelo2.exe.4816.000\results.txt

            Example of leak :

            Error #2290: LEAK 8 direct bytes 0x00da8eb0-0x00da8eb8 + 0 indirect bytes

            0 replace_RtlAllocateHeap [d:\drmemory_package\common\alloc_replace.c:3048]

            1 KERNELBASE.dll!LocalAlloc +0x5e (0x754458de <KERNELBASE.dll+0x158de>)

            2 libGLESv2.dll!glViewport +0x1d7 (0x5cef3698 <libGLESv2.dll+0x13698>)

            3 libGLESv2.dll!Ordinal178 +0x4f740 (0x5cf55541 <libGLESv2.dll+0x75541>)

            4 libGLESv2.dll!Ordinal178 +0x4f6b7 (0x5cf554b8 <libGLESv2.dll+0x754b8>)

            5 ntdll.dll!RtlQueryEnvironmentVariable +0x240 (0x779a99a0 <ntdll.dll+0x399a0>)

            6 ntdll.dll!RtlAllocateActivationContextStack +0x1ce (0x779aa1e6 <ntdll.dll+0x3a1e6>)

            7 ntdll.dll!RtlDecodePointer +0xf6 (0x779a9ecc <ntdll.dll+0x39ecc>)

            8 ntdll.dll!LdrInitializeThunk +0xf (0x779a9ef9 <ntdll.dll+0x39ef9>)

            Example of Leak 2
            Error #2301: LEAK 12 direct bytes 0x027b1b40-0x027b1b4c + 0 indirect bytes

            0 replace_calloc [d:\drmemory_package\common\alloc_replace.c:2310]

            1 libstream_filter_dash_plugin.dll!vlc_entry_license__1_2_0l+0x1917 (0x57135bd8 <libstream_filter_dash_plugin.dll+0x15bd8>)

            2 libstream_filter_dash_plugin.dll!vlc_entry_license__1_2_0l+0x7e866 (0x571b2b27 <libstream_filter_dash_plugin.dll+0x92b27>)

            3 libstream_filter_dash_plugin.dll!? +0x0 (0x571213fa <libstream_filter_dash_plugin.dll+0x13fa>)

            4 libstream_filter_dash_plugin.dll!? +0x0 (0x57121443 <libstream_filter_dash_plugin.dll+0x1443>)

            5 ntdll.dll!LdrResSearchResource +0xb4c (0x779ad939 <ntdll.dll+0x3d939>)

            6 ntdll.dll!LdrResSearchResource +0xa0f (0x779ad7fc <ntdll.dll+0x3d7fc>)

            7 ntdll.dll!LdrLoadDll +0x7a (0x779ac558 <ntdll.dll+0x3c558>)

            8 KERNELBASE.dll!LoadLibraryExW +0x1f0 (0x75442c95 <KERNELBASE.dll+0x12c95>)

            9 KERNEL32.dll!LoadLibraryW +0x10 (0x759748dc <KERNEL32.dll+0x148dc>)

            #10 libvlccore.dll!vlc_accept +0x2db (0x5942960c <libvlccore.dll+0x9960c>)
            #11 libvlccore.dll!module_config_free +0x3f (0x5940a040 <libvlccore.dll+0x7a040>)


            Free Indoor Cycling Software - https://maximumtrainer.com

            1 Reply Last reply
            0
            • S Offline
              S Offline
              Sam
              wrote on last edited by
              #6

              The above list shows the stack sequence, you can increase the callstact frames which will give you where you have a memory leak, try running with the argument as

              • callstack_max_frames 50 // <------- 50 us the max no. of frames

              here you can check for the line numbers of your code like for my tests I get

              Error #17: LEAK 96 direct bytes 0x0378b288-0x0378b2e8 + 96 indirect bytes

              0 replace_operator_new [d:\drmemory_package\common\alloc_replace.c:2421]

              1 Uid1.1.dll!ui::mainframe::menu::LiMenuFileReader::parseXML_Folder [c:\qt-development\foundation\ui\pre-releases\1.1\mainframe\menu\limenufilereader.cpp:242]

              2 Uid1.1.dll!ui::mainframe::menu::LiMenuFileReader::parseXML_Folder [c:\qt-development\foundation\ui\pre-releases\1.1\mainframe\menu\limenufilereader.cpp:287]

              3 Uid1.1.dll!ui::mainframe::menu::LiMenuFileReader::parseXML_LisecInterface [c:\qt-development\foundation\ui\pre-releases\1.1\mainframe\menu\limenufilereader.cpp:154]

              4 Uid1.1.dll!ui::mainframe::menu::LiMenuFileReader::parseXML [c:\qt-development\foundation\ui\pre-releases\1.1\mainframe\menu\limenufilereader.cpp:111]

              5 Uid1.1.dll!ui::mainframe::menu::LiMenuFileReader::parseMenuFile [c:\qt-development\foundation\ui\pre-releases\1.1\mainframe\menu\limenufilereader.cpp:78]

              6 Uid1.1.dll!ui::mainframe::menu::LiMenuFileReader::parseMenuFile [c:\qt-development\foundation\ui\pre-releases\1.1\mainframe\menu\limenufilereader.cpp:62]

              7 Uid1.1.dll!ui::mainframe::menu::LiMenuFileReader::loadMenuFile [c:\qt-development\foundation\ui\pre-releases\1.1\mainframe\menu\limenufilereader.cpp:29]

              8 Uid1.1.dll!ui::mainframe::panel::LiMainFramePanel::LiMainFramePanel [c:\qt-development\foundation\ui\pre-releases\1.1\mainframe\panel\limainframepanel.cpp:92]

              9 Uid1.1.dll!ui::LiApplication::getMainFrame [c:\qt-development\foundation\ui\pre-releases\1.1\liapplication.cpp:319]

              #10 Uid1.1.dll!ui::LiApplication::getMainFramePanel [c:\qt-development\foundation\ui\pre-releases\1.1\liapplication.cpp:329]
              #11 main [c:\test\lialarmtype\main.cpp:14]

              For more information you can also look at the documentation e.g "Error Types Reported by Dr. Memory":http://drmemory.org/docs/page_types.html

              1 Reply Last reply
              0

              • Login

              • Login or register to search.
              • First post
                Last post
              0
              • Categories
              • Recent
              • Tags
              • Popular
              • Users
              • Groups
              • Search
              • Get Qt Extensions
              • Unsolved