帮忙看下这个程序,运行时报内存错误!谢谢

simonqsm 2008-08-27 05:15:40
#include<string.h>
#include<iostream.h>
class Person{
private :
char *name;
public :
Person(){
name=new char[256];
}
Person(Person &p){
name=p.name;
}
~Person(){
delete[] name;
}
void SetName(const char* name1){
if(strlen(name1)+1<256) strcpy(name,name1);
}
void PrintName(){
cout<<name<<endl;
}
};
int main(){
Person p1;
p1.SetName("John");
p1.PrintName();
Person p2(p1);
p2.SetName("Alice");
p2.PrintName();
p1.PrintName();
}
...全文
108 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
kojie_chen 2008-08-27
  • 打赏
  • 举报
回复
原来是这样的啊
wangdeqie 2008-08-27
  • 打赏
  • 举报
回复

//这么写
#include <string.h>
#include <iostream.h>
class Person
{
private :
char *name;
public :
Person()
{
name=new char[256];
}
Person(Person &p)
{
name=new char[256];
strcpy(name,p.name);
}
~Person()
{
if (name!=NULL)
delete[] name;
}
void SetName(const char* name1)
{
if(strlen(name1)+1 <256) strcpy(name,name1);
}
void PrintName()
{
cout <<name <<endl;
}
};
int main()
{
Person p1;
p1.SetName("John");
p1.PrintName();
Person p2(p1);
p2.SetName("Alice");
p2.PrintName();
p1.PrintName();
}
Giegie 2008-08-27
  • 打赏
  • 举报
回复
每次析构时,重复delete一个指针,下次再delete就有问题了

Person(Person &p){
if(this != &p){
name = new [strlen(p) + 1];
strcpy(name, p.name);
}

}
有问题

一楼的,注意是strlen,不是sizeof
K行天下 2008-08-27
  • 打赏
  • 举报
回复
Person(Person &p){
name=p.name;
}
错了,字符串的拷贝要使用strcpy函数
ttkk_2007 2008-08-27
  • 打赏
  • 举报
回复
void SetName(const char* name1){
if(strlen(name1)+1 <256) strcpy(name,name1);
}
===================
这个也错了,strlen(name1)永远等于4
======================================
收回这句话
ttkk_2007 2008-08-27
  • 打赏
  • 举报
回复

Person(Person &p){
if(this != &p){
name = new [strlen(p) + 1];
strcpy(name, p.name);
}

}
//改改
Person(Person &p){
if(this != &p){
name = new char[strlen(p.name) + 1];
strcpy(name, p.name);
}

}

baihacker 2008-08-27
  • 打赏
  • 举报
回复
Person(Person &p){ 
name=new char[256];
strcpy(name, p.name);
}
ttkk_2007 2008-08-27
  • 打赏
  • 举报
回复
Person(Person &p){
name=p.name;
}
===============
Person(Person &p){
if(this != &p){
name = new [strlen(p) + 1];
strcpy(name, p.name);
}

}

void SetName(const char* name1){
if(strlen(name1)+1 <256) strcpy(name,name1);
}
===================
这个也错了,strlen(name1)永远等于4

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧