>假设我们有一个List类,其中包含一个名为front的数据成员,它是一个Node指针。下面是一个成员函数,用于显示列表(调用对象(的成员。
它有一个错误。识别并描述几个错误 的话。然后更正错误。
void display ()
{
Node *temp= new Node;
temp=front;
while (temp!=NULL)
{
cout<<temp->data<<"t";
temp=temp->next;
}
}
这是我测试中的问题之一,我在上面给定的代码中找不到任何错误。我什至在编译器中运行了这段代码,它工作正常。
谁能说出错误在哪里?
Node *temp = new Node; // a pointer, called temp, allocated to a new block
//of memory of size Node
temp = front // the pointer to the block of memory was just overwritten, and now you
//don't have a pointer to the block of memory you just allocated
首先,您不需要在这里调用新。只需声明指针并同时分配它。
其次,由于您确实调用了new,因此您刚刚创建了内存泄漏,也就是说,您分配了现在无法释放的内存(直到程序关闭(。
第三,您应该使用访问器方法访问前端。
myList.GetFront() //this should return a pointer to the front of the list
为什么?好吧,如果您不小心做了以下操作会发生什么:
front = front->next;
您刚刚丢失了指向列表前面的指针,其他所有使用 front 的方法也是如此。