首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

new ,delete 疑问,该如何处理

2012-03-21 
new ,delete 疑问C/C++ code//为什么使用delete 出现错误?template typename TvoidLinklistT::Insert(

new ,delete 疑问

C/C++ code
//为什么使用delete 出现错误?template <typename T>    void    Linklist<T>::Insert(int i,T x)    {        if(i<0||i>length+1) //抛出异常            throw Overflow();        if(length==0)//由于第一个节点不同于其它节点的插入        {//可以直接把 pt节点连接在first(头接点)的后面            Node<T> *pt=new Node<T>;            pt->data=x;            first->next=pt;            pt->next=NULL;//最后pt要指向空    //        delete pt;  //为什么收回空间会出现错误?        }        else        {            Node<T> *p=first;            for(int j=0;j<i-1&&p;j++)                p=p->next;//找到要插入的位置            Node<T> * newdata=new Node<T>;            newdata->data=x;//一般插入节点            newdata->next=p->next;            p->next=newdata;//            delete newdata;//出现错误        }        length++;    }    template <typename T>        void Linklist<T>::Delete(int i)    {        if(i<0||i>length)//抛出异常            throw Overflow();        else        {            Node<T> *p=first->next;            for(int j=0;j<i-2;j++)                p=p->next;//找到要删除节点位置之前的节点            Node<T> *q=new Node<T>;            q=p->next;//删除节点                p->next=q->next;            delete q;//为什么这没有出现错误呢?        }        length--;    }


[解决办法]
给出完整测试程序
[解决办法]
Node<T> *pt=new Node<T>;
pt->data=x;
first->next=pt;
pt->next=NULL;//最后pt要指向空
// delete pt; //为什么收回空间会出现错误?

这一段不是矛盾吗? 你把申请的新节点空间放在 first->next 上,这个时候,pt 和 first->next 都指向同一位置,然后你又马上删除 delete pt;,等于也就是删除了 first->next 。那你后面用到first-〉next 数据的时候肯定出错。

后面的这段:
for(int j=0;j<i-2;j++)
p=p->next;//找到要删除节点位置之前的节点
Node<T> *q=new Node<T>;
q=p->next;//删除节点
p->next=q->next;
delete q;//为什么这没有出现错误呢?

你好像写错了。你再看看吧。如果 Node<T> *q=new Node<T>; q=p->next;那么你前面用 new 干什么? 

[解决办法]
up
[解决办法]
同意3楼的,根本无需delete。

热点排行