从结构C++中移除对象
我遇到了一个小问题。我试图查看一个结构,找到一个不符合我要求的对象,然后删除它 但是我得到一个程序在执行该方法后停止工作。。你们能帮忙吗从结构C++中移除对象,c++,class,struct,containers,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;
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;
}
}
}
在else情况下,您将通过d=m->sek;,两次移动到链接列表中的下一项;,一次通过d=d->sek。如果m->sek为NULL,当您到达链接列表的末尾时,这可能会导致一个问题,那么d->sek将尝试取消对NULL的引用。发布“myStruct”的代码至少这些我们不知道的东西,那么我们应该如何解释它们的功能以及它们的值?myStruct,p,sekYes,但是d=d->sek是这样的,所以循环可以运行。是吗?@曼塔斯:这就是你为什么把它放在那里的原因是的。但是您应该在每次迭代中只移动到下一个节点一次。一个快速修复方法是将d=d->sek移动到if块中,并将for循环保留为myStruct*d=p;d!=NULL@曼塔斯:是时候拿出你的调试器了
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; }
};