C++链表问题,当运行到清除链表时,运行错误,错误如图:谢谢各位指导一下
删除链表的代码是://清除链表的全部数据voidlist::Clear(){Node*Temp_head=Head;if(Temp_head==0)return;do{N...
删除链表的代码是:
//清除链表的全部数据
void list::Clear()
{
Node *Temp_head=Head;
if (Temp_head==0) return;
do
{
Node *TEMP_NODE=Temp_head;
Temp_head=Temp_head->next;
delete TEMP_NODE;
}
while (Temp_head!=0);
}
//node是节点类
class Node
{
//声明list类为本类的友元类
friend class list;
private:
int Data; //节点数据
Node *previous; //前趋指针
Node *next; //后继指针
}; 展开
//清除链表的全部数据
void list::Clear()
{
Node *Temp_head=Head;
if (Temp_head==0) return;
do
{
Node *TEMP_NODE=Temp_head;
Temp_head=Temp_head->next;
delete TEMP_NODE;
}
while (Temp_head!=0);
}
//node是节点类
class Node
{
//声明list类为本类的友元类
friend class list;
private:
int Data; //节点数据
Node *previous; //前趋指针
Node *next; //后继指针
}; 展开
展开全部
你的当前代码没有问题,不知道你建表时的代码是什么样子
按你的程序,你建立的是个双向链表,但不知道是不是循环链表?即便不是循环链表,也不知道你的表尾是不是赋值为NULL(0)了
另,不知道你的Head是哪里定义的,在哪里进行的赋值,且其值是不是有效的NODE指针值?
因此,如果你这段代表出错,有可能是以上两个地方的问题造成的。
按你的程序,你建立的是个双向链表,但不知道是不是循环链表?即便不是循环链表,也不知道你的表尾是不是赋值为NULL(0)了
另,不知道你的Head是哪里定义的,在哪里进行的赋值,且其值是不是有效的NODE指针值?
因此,如果你这段代表出错,有可能是以上两个地方的问题造成的。
追答
有点问题,终于看出来了
for( int i=1;i<=10;++i) //注意这里是分号,不是逗号,10+i会造成死循环,因此改成10
第二:
你的析构函数中会做Clear()操作
因此,你不应该再调用 list1.Clear()了
这样会造成重复释放内存,故会出错,先去掉这句!!
展开全部
析构函数中的 delete[] next; 注释掉。一般的程序都是在哪分配的内存,在哪释放,你的类内部没有为 Node<T>* next; 分配内存
追问
我的类怎么写才能够为Node * next;分配内存?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
感觉你这个写的很诡异 我也不知道哪错了 你的 Node 只是双向链表的一个节点 你到底是想自己写个双向链表 还是直接用底层的链表呢...
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询