Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt
  • Unsolved
Collapse
qtws26_logo

The Qt Event of the Year: Qt World Summit 2026

Save Your Spot >
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Memoy leak using QtCharts
Qt 6.12 LTS is out! See what's new in the release blog

Memoy leak using QtCharts

Scheduled Pinned Locked Moved Unsolved General and Desktop
30 Posts 10 Posters 10.4k Views 5 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.
  • A Offline
    A Offline
    aawawa
    wrote on last edited by
    #15

    @Christian-Ehrlicher thank you... But it is supposed to be deleted 100000 times in my case no when I use RemoveAllSeries no?

    1 Reply Last reply
    0
    • A Offline
      A Offline
      aawawa
      wrote on last edited by
      #16

      @Christian-Ehrlicher would rather try to add the points to one QLineSeries this strategy works quiet well.
      By changing y program as this for the header :

      class MyChartView:public QChartView
      {
      public:
      	MyChartView();
      	~MyChartView();
      	void Draw(void);
      
      private:	
      	QLineSeries *mSeries;
      };
      

      and for the .cpp

      MyChartView::MyChartView()
      {
      
      	mSeries = new QLineSeries;
      	chart()->addSeries(mSeries);
      
      }
      
      
      MyChartView::~MyChartView()
      {
      }
      
      void MyChartView::Draw(void)
      {
      	int Length = 1000;
      	mSeries->clear();
      	for (int i = 0; i < Length; i++)
      	{
      		mSeries->append(QPoint (i, sin(2 * i*3.141516*0.1)));
      	}
      	//update();
      
      }
      
      

      It seems (I have to confirm this point later) to not have anymore memory leak

      1 Reply Last reply
      1
      • Christian EhrlicherC Offline
        Christian EhrlicherC Offline
        Christian Ehrlicher
        Lifetime Qt Champion
        wrote on last edited by
        #17

        @aawawa said in Memoy leak using QtCharts:

        But it is supposed to be deleted 100000 times in my case no when I use RemoveAllSeries no?

        You're right. I think I found the culprit:

        qlineseries.cpp:112
        
        QLineSeries::QLineSeries(QObject *parent)
            : QXYSeries(*new QLineSeriesPrivate(this), parent)
        

        this is never deleted... :/

        Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
        Visit the Qt Academy at https://academy.qt.io/catalog

        JonBJ 1 Reply Last reply
        3
        • Christian EhrlicherC Christian Ehrlicher

          @aawawa said in Memoy leak using QtCharts:

          But it is supposed to be deleted 100000 times in my case no when I use RemoveAllSeries no?

          You're right. I think I found the culprit:

          qlineseries.cpp:112
          
          QLineSeries::QLineSeries(QObject *parent)
              : QXYSeries(*new QLineSeriesPrivate(this), parent)
          

          this is never deleted... :/

          JonBJ Online
          JonBJ Online
          JonB
          wrote on last edited by
          #18

          @Christian-Ehrlicher
          I think this is the second time I've seen that *new cause this. When will people decide that C++ is getting too clever for its boots? ;-)

          1 Reply Last reply
          0
          • SGaistS Offline
            SGaistS Offline
            SGaist
            Lifetime Qt Champion
            wrote on last edited by SGaist
            #19

            Hi,

            @Christian-Ehrlicher said in Memoy leak using QtCharts:

            QLineSeriesPrivate

            It's QObject based, so when the QXYSeries object is deleted it should also get deleted.

            It's indeed QObject based but stored in a QScopedPointer so it will automatically get delete on object's destruction.

            Interested in AI ? www.idiap.ch
            Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

            1 Reply Last reply
            1
            • A Offline
              A Offline
              aawawa
              wrote on last edited by
              #20

              @Christian-Ehrlicher Thank you. It's the first time I see *new in c++ what does it mean?

              mrjjM 1 Reply Last reply
              0
              • A aawawa

                @Christian-Ehrlicher Thank you. It's the first time I see *new in c++ what does it mean?

                mrjjM Offline
                mrjjM Offline
                mrjj
                Lifetime Qt Champion
                wrote on last edited by
                #21

                @aawawa
                Hi
                Its a Dereference
                http://www.cplusplus.com/doc/tutorial/pointers/
                See section Dereference operator (*)

                1 Reply Last reply
                0
                • A Offline
                  A Offline
                  aawawa
                  wrote on last edited by
                  #22

                  @mrjj yes... I understand... But I don't understand the location of the asterix (*). I am used for example to write

                  int *a = new int;
                  

                  what does

                  *new int
                  

                  means?

                  mrjjM 1 Reply Last reply
                  0
                  • A aawawa

                    @mrjj yes... I understand... But I don't understand the location of the asterix (*). I am used for example to write

                    int *a = new int;
                    

                    what does

                    *new int
                    

                    means?

                    mrjjM Offline
                    mrjjM Offline
                    mrjj
                    Lifetime Qt Champion
                    wrote on last edited by mrjj
                    #23

                    @aawawa
                    Means
                    value pointed to by ptr
                    The actual value.

                    int copy = *SomeIntPtr;
                    that will copy the value to the copy var.
                    if you did
                    int copy = SomeIntPtr;
                    you get the address of pointer into copy

                    1 Reply Last reply
                    0
                    • Christian EhrlicherC Offline
                      Christian EhrlicherC Offline
                      Christian Ehrlicher
                      Lifetime Qt Champion
                      wrote on last edited by
                      #24

                      Ok, no memleak at all. You testcase is wrong / inaccurate.
                      The problem with your testcase is that your eventloop is not (yet) running and that you also call it in an loop without a chance for the eventloop to do it's work. Since the internals of QLineSeries is cleaned up with a deferred delete it is not cleaned up until the eventloop is called (and after app.exec()). That's also the reason I thought the dtor is not called at all.

                      Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                      Visit the Qt Academy at https://academy.qt.io/catalog

                      1 Reply Last reply
                      3
                      • J Offline
                        J Offline
                        JosuGZ
                        wrote on last edited by JosuGZ
                        #25

                        @Christian-Ehrlicher said in Memoy leak using QtCharts:

                        Ok, no memleak at all. You testcase is wrong / inaccurate.
                        The problem with your testcase is that your eventloop is not (yet) running and that you also call it in an loop without a chance for the eventloop to do it's work. Since the internals of QLineSeries is cleaned up with a deferred delete it is not cleaned up until the eventloop is called (and after app.exec()). That's also the reason I thought the dtor is not called at all.

                        It seems to me that there are some memory leaks happening here.

                        This code increases memory usage continuously:

                        aSeries->remove(aSeries->points().size() - 1);
                        aSeries->append(timestamp, mean);

                        Bit this one does not:

                        aSeries->replace(aSeries->points().size() - 1, timestamp, mean);

                        I'm using Qt 5.11.2.

                        JonBJ J.HilkJ 2 Replies Last reply
                        0
                        • J JosuGZ

                          @Christian-Ehrlicher said in Memoy leak using QtCharts:

                          Ok, no memleak at all. You testcase is wrong / inaccurate.
                          The problem with your testcase is that your eventloop is not (yet) running and that you also call it in an loop without a chance for the eventloop to do it's work. Since the internals of QLineSeries is cleaned up with a deferred delete it is not cleaned up until the eventloop is called (and after app.exec()). That's also the reason I thought the dtor is not called at all.

                          It seems to me that there are some memory leaks happening here.

                          This code increases memory usage continuously:

                          aSeries->remove(aSeries->points().size() - 1);
                          aSeries->append(timestamp, mean);

                          Bit this one does not:

                          aSeries->replace(aSeries->points().size() - 1, timestamp, mean);

                          I'm using Qt 5.11.2.

                          JonBJ Online
                          JonBJ Online
                          JonB
                          wrote on last edited by
                          #26

                          @JosuGZ
                          In the last post 4 months ago made by @Christian-Ehrlicher, he explained that memory would only be recovered (and hence [hopefully] not permanently grow) when the OP allowed his code to reach the main event loop. I don't know how replace works, but remove surely will do a deferred delete. So in your example you need to be clear/show us how your code hits the event loop each time after do the remove/append?

                          1 Reply Last reply
                          1
                          • J JosuGZ

                            @Christian-Ehrlicher said in Memoy leak using QtCharts:

                            Ok, no memleak at all. You testcase is wrong / inaccurate.
                            The problem with your testcase is that your eventloop is not (yet) running and that you also call it in an loop without a chance for the eventloop to do it's work. Since the internals of QLineSeries is cleaned up with a deferred delete it is not cleaned up until the eventloop is called (and after app.exec()). That's also the reason I thought the dtor is not called at all.

                            It seems to me that there are some memory leaks happening here.

                            This code increases memory usage continuously:

                            aSeries->remove(aSeries->points().size() - 1);
                            aSeries->append(timestamp, mean);

                            Bit this one does not:

                            aSeries->replace(aSeries->points().size() - 1, timestamp, mean);

                            I'm using Qt 5.11.2.

                            J.HilkJ Offline
                            J.HilkJ Offline
                            J.Hilk
                            Moderators
                            wrote on last edited by
                            #27

                            hi @JosuGZ and welcome

                            if you only monitor the memory your OS gives your application, then that is inaccurate.

                            You have no influence over when the os decides that your freed memory will no longer be reserved for your application.

                            Therefore
                            remove -> append is memory is "freed" and a new allocation happens
                            replace -> new data overwrites old data


                            Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                            Q: What's that?
                            A: It's blue light.
                            Q: What does it do?
                            A: It turns blue.

                            J 1 Reply Last reply
                            0
                            • J.HilkJ J.Hilk

                              hi @JosuGZ and welcome

                              if you only monitor the memory your OS gives your application, then that is inaccurate.

                              You have no influence over when the os decides that your freed memory will no longer be reserved for your application.

                              Therefore
                              remove -> append is memory is "freed" and a new allocation happens
                              replace -> new data overwrites old data

                              J Offline
                              J Offline
                              JosuGZ
                              wrote on last edited by
                              #28

                              @J.Hilk said in Memoy leak using QtCharts:

                              hi @JosuGZ and welcome

                              if you only monitor the memory your OS gives your application, then that is inaccurate.

                              You have no influence over when the os decides that your freed memory will no longer be reserved for your application.

                              Therefore
                              remove -> append is memory is "freed" and a new allocation happens
                              replace -> new data overwrites old data

                              An order of magnitude more RAM needed for a simple app is not an OS problem.

                              Two tests more replacing the offending line, one with small allocations:

                              char *test = (char *)malloc(10);
                              test[5] = 't'; // Touching memory
                              aSeries->replace(aSeries->points().size() - 1, ms, mean);
                              free(test);
                              

                              Another with bigger allocations:

                              char *test = (char *)malloc(10000);
                              test[5000] = 't'; // Touching memory
                              aSeries->replace(aSeries->points().size() - 1, ms, mean);
                              free(test);
                              

                              Both keep memory usage low as expected.

                              Even this keeps the memory constant:

                              QWidget *test = new QWidget;
                              aSeries->replace(aSeries->points().size() - 1, ms, mean);
                              test->deleteLater();
                              

                              Something is happening with this library and I'm not the only one with issues.

                              1 Reply Last reply
                              1
                              • T Offline
                                T Offline
                                thiagohd
                                wrote on last edited by
                                #29

                                Is this fixed in any way? I seem to have the same problem.

                                mrjjM 1 Reply Last reply
                                0
                                • T thiagohd

                                  Is this fixed in any way? I seem to have the same problem.

                                  mrjjM Offline
                                  mrjjM Offline
                                  mrjj
                                  Lifetime Qt Champion
                                  wrote on last edited by
                                  #30

                                  @thiagohd
                                  Hi
                                  I dont think I bug report was ever created or it was further looked at.

                                  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
                                  • Unsolved