| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1041 人关注过本帖
标题:[求助]我用delete回收内存为何出错啊?》
只看楼主 加入收藏
zsh0435
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2005-5-21
收藏
 问题点数:0 回复次数:4 
[求助]我用delete回收内存为何出错啊?》

#include<iostream> #include<string> using namespace std;

class Person { char *name,*addr,*sex; int age; public: Person(char *name1,char *addr1,char *sex1,int age); ~Person(); print();

}; Person::Person(char *name1,char *addr1,char *sex1,int age) { name=new char(strlen(name1)+1); strcpy(name,name1); addr=new char(strlen(addr1)+1); strcpy(addr,addr1); sex=new char(strlen(sex1)+1); strcpy(sex,sex1); this->age=age; } Person::~Person(){delete name;delete addr;delete sex;} Person::print() { cout<<"姓名:"<<name<<"\n地址:"<<addr<<"\n性别:"<<sex<<"\n年龄:"<<age<<endl; }

class Student:public Person { int math,english; public: Student(char *name1,char *addr1,char *sex1,int age,int math,int english); _print();

}; Student::Student(char *name1,char *addr1,char *sex1,int age,int math,int english):Person(name1,addr1,sex1,age) { this->math=math; this->english=english; } Student::_print() { print(); cout<<"\n数学分数:"<<math<<"\n英语分数:"<<english<<endl; }

void main() { Student s1("张书豪","吉林通化","男",23,98,90); s1._print(); }

搜索更多相关主题的帖子: 内存 delete 
2005-05-31 09:39
Antigloss
Rank: 1
等 级:新手上路
帖 子:109
专家分:0
注 册:2004-12-30
收藏
得分:0 

name=new char(strlen(name1)+1); -------> name=new char[strlen(name1)+1];

...........

delete name; --------------> delete [] name;

...........

2005-05-31 11:45
hu_sir
Rank: 1
等 级:新手上路
帖 子:208
专家分:0
注 册:2004-4-29
收藏
得分:0 
name=new char(strlen(name1)+1);   应为: name=new char[strlen(name1)+1];

delete 可以改为delete[],也可以不改,vc6支持。
2005-05-31 13:21
shan183
Rank: 1
等 级:新手上路
帖 子:60
专家分:0
注 册:2005-5-30
收藏
得分:0 
二楼的兄弟说的对!
首先,name=new char(strlen(name1)+1);   应改为---&gt; name=new char[strlen(name1)+1];
其次,语句name=new char[strlen(name1)+1]为strlen(name1)+1个char元素分配了足够的内存,但是只有一个地址指针char *name,该指针变量存储了动态数组的起始地址,但同时也是动态数组第一个元素的地址,delete [ ] name就可以告诉编译器name是一个数组的起始地址,然后释放该数组的所占全部内存,即strlen(name1)+1个char元素所占内存,如果用delete  name,只是释放了动态数组的第一个元素所占的内存,虽然VC++6.0仍然支持delete  name,但是实际效果是不一样。
其他的delete语句类似。
2005-05-31 16:06
hu_sir
Rank: 1
等 级:新手上路
帖 子:208
专家分:0
注 册:2004-4-29
收藏
得分:0 
谢谢楼上的兄弟


长见识了。呵呵
2005-06-02 06:59
快速回复:[求助]我用delete回收内存为何出错啊?》
数据加载中...
 
   



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

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