[Qt-interest] memory problem

Farid Derradji farid.derradji at ITWM.fraunhofer.de
Tue Mar 24 12:19:25 CET 2009


Hello Sujan,

> // In the header file:
> 
> QList <QTableWidget *> item;
> 
> QList <Geometry *>  geoMetry;
> 
>  int count;

First of all, Member Variable count is completely unnecessary. Hence you
should eliminate it.

> TableWidget::TableWidget()
> 
> {
> 
>                 count = 0;
> 
> }

Consequence would be: TableWidget::TableWidget() {}     <--- !!!!!!!!!


> TableWidget::~TableWidget()
> 
> {
> 
>                 If(count != 0)
> 
>                 {
> 
>                                 delete item[count];
> 
>                                 delete geoMetry[count]; 
> 
>                 }
> 
> }

Here the error occurs !!! QList is zero-based ! This means the indexing
is from 0 to count () - 1!

The proper code would look like this:

TableWidget::~TableWidget()
{
  // delete all items -----------------------------------------------
  for (int i = 0; i < item.count (); i++)
  {
    delete item[i];
  }

  item.clear ();

  // delete all geoMetry elements -----------------------------------
  for (int i = 0; i < geoMetry.count (); i++)
  {
    delete geoMetry[i];
  }

  geoMetry.clear ();
}


> TableWidget::fileNameUpdate(QString filename, Geometry *geometry)
> 
> {
> 
>                 Item[count] = new QTableWidgetItem(filename,0);
> 
>                 setItem(count,0,item[count]);
> 
>                 geoMetry[count] = new Geometry;
> 
>                 geoMetry = geometry;
> 
>                 count ++;
> 
>  }

Here the code changes to:

TableWidget::fileNameUpdate(QString filename, Geometry *geometry)
{
  QTableWidgetItem *item = new QTableWidgetItem(filename,0);

  Item.append (item);

  setItem (Item.size () - 1, 0, Item.last ());


  geoMetry.append (geometry);
}



Have a try with this code.


Regards
Farid



More information about the Qt-interest-old mailing list