| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 727 人关注过本帖
标题:什么时候需要用delete,已经没有使用产生什么后果,
只看楼主 加入收藏
未未来
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:182
专家分:157
注 册:2012-11-6
结帖率:94.87%
收藏
已结贴  问题点数:2 回复次数:5 
什么时候需要用delete,已经没有使用产生什么后果,
main.cpp
程序代码:
#include<iostream>
#include"student.hpp"
using namespace std;
int main(){

student *head,*stu;
long del_num;
cout<<"input records:"<<endl;
head=creat();
print(head);
cout<<endl<<"input the deleted number:";
cin>>del_num;
head=del(head,del_num);
print(head);
cout<<endl<<"input the insert number:";
stu=new student;
cin>>stu->num>>stu->score;
while(stu->num!=0){
    head=insert(head,stu);
stu=new student;
cin>>stu->num>>stu->score;
}
    print(head);
return 0;    
}


student.hpp
程序代码:
#include<iostream>
using namespace std;
struct student{
long num;
float score;
student  *next;
    
};
int n;
student *creat(){
    student *head;
    student *p1,*p2;
    n=0;
    p1=p2=new student;
    cin>>p1->num>>p1->score;
    head=NULL;
    while(p1->num!=0){
        n=n+1;
        if(n==1)head=p1;
        else p2->next=p1;
        p2=p1;
        p1=new student;
        cin>>p1->num>>p1->score;
    }
    p2->next=NULL;
    return (head);
}
void print(student *head)
{
    student *p;
    cout<<endl<<"Now,These"<<n<<"records are:"<<endl;
    p=head;
    if(head!=NULL)
    do{
        cout<<p->num<<" "<<p->score<<endl;
        p=p->next;
    }while(p!=NULL);
}

 student * del(student *head,long num)

 {
     student *p1,*p2;
     if(head==NULL)
     {
         cout<<"list null"<<endl;return (head);
         
     }
     p1=head;
     while(num!=p1->num&&p1->num!=NULL)
     {
         p2=p1;
         p1=p1->next;
     }
     
     if(num==p1->num){
         if(p1==head)head=p1->next;
         else p2->next=p1->next;
         cout<<"delete:"<<num<<endl;
         n=n-1;
     }
     
     
     
     
     else 
     cout<<"cannot find"<<num;
    
     return (head);
     

 }

 

 

 

 student *insert(student *head,student *stud)

 {
     student *p0,*p1,*p2;
     p1=head;
     p0=stud;
     if(head==NULL){
         head=p0;
         p0->next=NULL;
     }
     else{
     while((p0->num>p1->num)&&(p1->next!=NULL)){
         p2=p1;
         p1=p1->next;
     }    
     if(p0->num<=p1->num)
     {
         if(head==p1)head=p0;
         else p2->next=p0;
         p0->next=p1;
     }
     else{
         p1->next=p0;
         p0->next=NULL;
     }
         
         
         
         n=n+1;
         return (head);
         
         
         
         
         
     }

 }


在mian程序里需要在最后加上 delete head;
                             delete stu;吗
自我感觉需要,但是程序运行并没有出错,已经教材书上也没有这样做
所以不解了,求解释
2013-06-26 22:17
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:1 
我都没看到main,你main在哪?

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-06-27 06:07
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:0 
至于什么时候需要用delete
自己new出来的东西需要delete

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-06-27 06:09
司马冷泪
Rank: 2
来 自:江苏
等 级:论坛游民
帖 子:8
专家分:16
注 册:2013-6-27
收藏
得分:1 
分配内存空间,需要销毁,不然会内存泄漏

此刻打吨,你将做梦;而此刻学习,你将圆梦。
2013-06-27 12:51
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:1 
在Windows(NT内核)下写的C/C++不需要,只是不规范而已,写.net的C++/CLI程序用gcnew分配内存根本就不存在对应的delete指令。

授人以渔,不授人以鱼。
2013-06-27 19:31
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
内存泄漏,在系统内存没有耗尽前是没感觉到后果的,正如仓库还有空余的空间,就仍然可以储存货物一样。内存泄漏是后患,一直霸占住内存资源,程序多运行一次,就多占一份,反复运行,反复占用。如果操作系统不强制没收这些垃圾,它自己就感觉紧张,所以Windows是主动打扫的,就算你的程序释放,在程序结束后Windows就把它曾经用过的内存都回收了,就像这个程序从来没运行过一样,因此能够保证不怕内存泄漏,但别的操作系统并不保证这一点(同样是微软的DOS/Windows98等旧系统,就没有这种功能),具体要看操作系统的说明。

编程要看运行平台,这是必须要注意的,其实只要固定了平台,不需太在意移植性,也不可能保证有绝对的可移植性,转移平台不修改代码,那是很少能够做到的。

授人以渔,不授人以鱼。
2013-06-27 20:11
快速回复:什么时候需要用delete,已经没有使用产生什么后果,
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020403 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved