我遇到了一个小问题。我试图浏览一个结构,找到一个不符合我要求的对象,并将其删除。
但是在执行方法后我得到了“程序停止工作”。你能帮忙吗?
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; }
};
答案 0 :(得分:4)
在其他情况下,您将移动到链接列表中的下一个项目两次(一次通过d = m->sek;
,一次通过d = d->sek
)。当您到达链接列表的末尾时,这可能会导致出现问题(如果m->sek
为NULL
,则d->sek
将尝试取消引用NULL
)。