首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 链表问题,分配了这么多空间,程序退出时要手工删除空间吗? [已结帖,结帖人:BeerGates]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • BeerGates
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2008-08-08 17:17:15 楼主
    new xxxx;

    一直这样,退出的时候是不是每个一节点都要用。delete删除呢?
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • babyvox1999
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-08 17:21:431楼 得分:5
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • BeerGates
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-08 17:25:352楼 得分:0
    while(p!=NULL)
    {
    delete p;
    p = p->next;
    }

    这样删除吗?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xianyuxiaoqiang
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-08 17:38:343楼 得分:5
    引用 2 楼 BeerGates 的回复:
    while(p!=NULL)
    {
    delete p;
    p = p->next;
    }

    这样删除吗?

    改成这样:
    C/C++ code
    void my_delete(xxx *p){//xxx改为你具体的类型 if(p->next!=NULL)delete(p->next); delete p; } void main(){ .... if(p!=NULL)mydelete(p); }

    你原来那样是删不光的。因为第一次delete之后p已经是个悬空指针了。不能再使用。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xianyuxiaoqiang
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-08 17:39:544楼 得分:5
    C/C++ code
    void my_delete(xxx *p){//xxx改为你具体的类型 if(p->next!=NULL)delete(p->next); delete p; } void main(){ .... if(p!=NULL)my_delete(p); }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wfwsm
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-08 17:40:305楼 得分:5
    假如是程序退出的话 你可以不进行释放
    系统会自动回收

    不过最好清理掉.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • BeerGates
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-08 17:49:396楼 得分:0
    引用 3 楼 xianyuxiaoqiang 的回复:
    引用 2 楼 BeerGates 的回复:
    while(p!=NULL)
    {
    delete p;
    p = p->next;
    }

    这样删除吗?

    改成这样:

    C/C++ code
    void my_delete(xxx *p){//xxx改为你具体的类型
        if(p->next!=NULL)delete(p->next);
        delete p;
    }
    void main(){
        ....
        if(p!=NULL)mydelete(p);
    }


    你原来那样是删不光的。因为第一次delete之后p已经是个悬空指针了。不能再使用。


    我重新为它赋值了啊?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xianyuxiaoqiang
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-08 17:54:447楼 得分:0
    我意思是delete p;后面那个p->next会出错。因为p已经不指向next了。
    用我的函数试试吧。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • BeerGates
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-08 17:59:408楼 得分:0
    你的是怎么搞的?能写详细一点吗?看上去好像是只删除两个节点?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • matrixdwy
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-08 18:18:149楼 得分:0
    while(p) {
      oldp = p;
      p = p->next;
      delete oldp;
    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • chenhjcs
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-08 18:54:3010楼 得分:0
    引用 6 楼 BeerGates 的回复:
    引用 3 楼 xianyuxiaoqiang 的回复:
    引用 2 楼 BeerGates 的回复:
    while(p!=NULL)
    {
    delete p;
    p = p->next;
    }

    这样删除吗?

    改成这样:

    C/C++ code
    void my_delete(xxx *p){//xxx改为你具体的类型
    if(p->next!=NULL)delete(p->next);
    delete p;
    }
    void main(){
    ....
    if(p!=NULL)mydelete(p);
    }


    你原来那样是删不光的。因为第一次delete之后p已经是个悬空指针了。不能再使用。


    我重新为它赋值了…

    这个讲的挺好的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • IanFang
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-08 19:45:0111楼 得分:0
    引用 2 楼 BeerGates 的回复:
    while(p!=NULL)
    {
    delete p;
    p = p->next;
    }

    这样删除吗?


    这是典型的错误代码。原因在于执行p = p -> next,p所指之内存已失效。

    如果结点中没放有关进程间通信同步独占内核对象。。。等方面的东西就不要在折腾了,程序都要退出了,进程结束时操作系统自会收回一切。如果你感到良心不安,那就释放吧。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • iidioter
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-08 19:50:3812楼 得分:0
    飘来漂去........
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • BeerGates
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-09 09:04:2613楼 得分:0
    引用 11 楼 IanFang 的回复:
    引用 2 楼 BeerGates 的回复:
    while(p!=NULL)
    {
    delete p;
    p = p->next;
    }

    这样删除吗?


    这是典型的错误代码。原因在于执行p = p -> next,p所指之内存已失效。

    如果结点中没放有关进程间通信同步独占内核对象。。。等方面的东西就不要在折腾了,程序都要退出了,进程结束时操作系统自会收回一切。如果你感到良心不安,那就释放吧。


    不懂,不好意思

    那等程序结束自己释放没事的吧。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yjh1023
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-09 09:51:2014楼 得分:0
    引用 9 楼 matrixdwy 的回复:
    while(p) {
      oldp = p;
      p = p->next;
      delete oldp;
    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • weixinhua022
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-09 10:39:5215楼 得分:0
    引用 9 楼 matrixdwy 的回复:
    while(p) {
      oldp = p;
      p = p->next;
      delete oldp;
    }


    我觉得这应这样吧。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • deerwin1986
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-09 11:23:3716楼 得分:0
    像LZ那样打会出事的 编译器会报错 因为指针域已经没有内容了 或者说指向的是不可知的地方
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • guzhilei1986
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-09 11:34:3917楼 得分:0
    引用 15 楼 weixinhua022 的回复:
    引用 9 楼 matrixdwy 的回复:
    while(p) {
    oldp = p;
    p = p->next;
    delete oldp;
    }


    我觉得这应这样吧。

    赞同
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kingstarer
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-09 11:48:4018楼 得分:0
    如果程序退出,你就可以不用管
    因为windows会自动回收

    但是这不是好编程习惯
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ykx_yeer
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-09 12:05:2919楼 得分:0
    当然要删除 否则分配了没释放 内存会溢出
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hugh327
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-18 23:57:5220楼 得分:0
    引用 17 楼 guzhilei1986 的回复:
    引用 15 楼 weixinhua022 的回复:
    引用 9 楼 matrixdwy 的回复:
    while(p) {
    oldp = p;
    p = p->next;
    delete oldp;
    }


    我觉得这应这样吧。

    赞同

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • runtospring
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-19 23:45:2421楼 得分:0
    谢谢,学习了
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved