Segfault迭代QList

时间:2011-08-21 14:44:54

标签: qt

我创建了两个类 - 一个叫做circle:

class circle
{
public:
    circle();
    QString name ;
    int id ;
};

和另一个使用此类的类:

class soso
{
public:
    soso();
    QList<circle*> lis;
    void go();
};

在soso的构造函数中,我添加了两个圆圈:

soso::soso()
{
    circle* c1 = new circle();
    circle* c2= new circle();
    c1->id=1;
    c1->name="yamen";
    c2->id=2;
    c2->name="hasan";
    lis.append(c1);
    lis.append(c2);
}

在主窗口中我调用了go方法,包含在这里

void soso::go()
{

  QFile file("database.txt");
  if(!file.open(QIODevice::WriteOnly))
    throw " cannot open file ! ";
  QDataStream out(&file);
  int i=0;
  QList<circle*>::iterator it1 =lis.begin();

  for(i=0;it1!=lis.end();it1++);
  {
    out<<(*it1)->id;    //   segmentation error here
    out<<(*it1)->name;
  }
}

但我收到了分段错误。我做错了什么?

1 个答案:

答案 0 :(得分:5)

你的for循环后你有一个分号!这些真的很难被注意到。

for(i=0;it1!=lis.end();it1++);

这很有效。只是改变它看起来更像标准使用迭代器:

  QList<circle*>::iterator it1;

  for(it1 = lis.begin();it1!=lis.end();it1++)
  {
    out<<(*it1)->id;
    out<<(*it1)->name;
  }