I added a couple lines of code to an app and suddenly it started chewing 
through memory at an unbelievable rate.  I watched it get up to 12 GB at which 
point it hit my virtual memory limit in Windows and Windows promptly 
blue-screened and died (thank-you Microsoft!).  The changes I made are the two 
commented lines in this code:

       for (int i = 0; i < culture.items.size(); ++i) {
           const CultureItem& it = culture.items[i]; // added this
           qDebug() << it.points.size(); // and this
           CultureGraphicsItem* item = new CultureGraphicsItem(group);
           item->setCulture(culture, i, _coordSys);
       }

The culture class has an items member which is a QList<CultureItem> and a CultureItem 
has a QList<QPointF> of points so all I wanted was to print out the number of points 
each culture item has.  I was stumped by this until I found that if I just replace the 
culture.items[i] with culture.items.at(i), the memory problem goes away.  So it seems like 
even though I'm getting a const reference using operator [] on the QList, it's actually 
making a deep copy of the data as if I was using the non-const version.

I tested this on Windows using Qt 5.4.0 and VisualStudio 2010 and also on a Mac 
and get the same problem.  Could it be something about my CultureItem class?  
Frankly I'm pretty baffled by this so any ideas?

Here is the CultureItem class definition in case that helps:

class CultureItem {
public:
   CultureItem();

   enum CultureType { PolyLine, Text, Contour };
   CultureType type;

   // shared attributes
   QString color;

   // PolyLine attributes
   int lineWidth;
   int fillPattern;
   bool smooth;
   bool closed;
   QString unknown1;
   QList<QPointF> points;

   // Text attributes
   float x;
   float y;
   float height;
   int justification;
   QString text;

   bool operator==(const CultureItem& rhs) const;
   bool operator!=(const CultureItem& rhs) const;
};

--
Brad

_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest

Reply via email to