Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从结构C++中移除对象_C++_Class_Struct_Containers - Fatal编程技术网

从结构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; }
};