从结构C ++中删除对象

时间:2014-03-10 15:48:19

标签: c++ class struct containers

我遇到了一个小问题。我试图浏览一个结构,找到一个不符合我要求的对象,并将其删除。

但是在执行方法后我得到了“程序停止工作”。你能帮忙吗?

void myStruct::ObRemove(int n)
{

for (myStruct *d = p; d != NULL; d = d->sek){
    if (d->m < n){
        ;
    }
    else{
        myStruct *m=d;
        d = m->sek;
        delete m;

    }
  }
}

m是类的对象,这个结构是一个包含结构。如果你需要任何额外的代码,请告诉我,我在这里等。

这是结构类(注意:名称与我试图用英语制作的名称不相似,但是重写将采用,所以我将它粘贴在我的lang中。)

 struct Mazgas
{
private:
Muziejus m;
Mazgas *sek;
Mazgas *p;
Mazgas *d;
public:
Mazgas() : p(NULL), d(NULL) {}
~Mazgas() { Naikinti(); }
void Naikinti();
void Deti(Muziejus m);
void Imti(Muziejus &m)
{
    m = d->m;
};
void Rikiuoti();
void Salinti(int n);
void Pradzia(){ d = p; }
void Sekantis() { if (d) d = d->sek; }
bool Yra() { return d != NULL; }
};

1 个答案:

答案 0 :(得分:4)

在其他情况下,您将移动到链接列表中的下一个项目两次(一次通过d = m->sek;,一次通过d = d->sek)。当您到达链接列表的末尾时,这可能会导致出现问题(如果m->sekNULL,则d->sek将尝试取消引用NULL)。