我创建了一个带有函数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(...);
}
答案 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
。