使用类的链接列表

时间:2016-02-17 07:16:41

标签: c++ class linked-list

我创建了一个带有函数class VW的链接列表Build,以便将节点添加到列表中。但是,当我运行代码来构建我的链表时,Build函数会引发“访问冲突”错误。 tmp->NextObj(函数中的调用Build)引发了错误。

如果class VW的对象是新创建的并且第一次调用Build,那么if(tmp==NULL)函数中的条件Build应该为真,并且因此,在第一次调用else期间,程序不应进入Build部分。我在这里错过了什么?能帮忙吗?

   class VW
{
    World_Obj *head;
public:
    void Build(...);

};
 void VW::Build(...)
    {
        World_Obj *newObj;
        newObj = new World_Obj;
        newObj->SetData(...);
        newObj->SetNext(NULL);

        World_Obj *tmp;
        tmp = this->head;

        if (tmp == NULL)
            this->head = newObj;
        else
        {
            while (tmp->NextObj() != NULL)
            {
                tmp = tmp->NextObj();
            }
            tmp->SetNext(newObj);
        }
    }

int main()
{
    VW *g_w;    
    g_w = new VW;

          /* Reading arguments from input file*/

    g_w->Build(...);

}

2 个答案:

答案 0 :(得分:1)

问题是VW类中缺少的构造函数,

VW(){ head=NULL;}

全部谢谢!

答案 1 :(得分:0)

这是一个问题:

tmp = this->head;

...

while (tmp->NextObj() != NULL)
{
    tmp = tmp->NextObj();
}
tmp->SetNext(newObj);

...

delete tmp;

当循环结束时和tmp->SetNext(newObj)之后,tmp将指向列表中倒数第二个节点。然后通过删除它迅速销毁。

这意味着您的列表现在将包含一个不再存在的节点,尝试取消引用它将导致未定义的行为,并且很可能是崩溃。

解决方案只是不删除tmp