析构函数出问题了,哪位大侠能不能帮我看看是什么问题啊?

chenghaimingdei 2011-06-13 06:08:51
#pragma once
class mystring
{
char *m_data;
public:
mystring(const char *str=NULL);
mystring(const mystring &other);
~mystring(void);
mystring &operator=(const mystring &other);
void print();
};

#include "StdAfx.h"
#include "mystring.h"
#include <string.h>
#include <iostream>
using namespace std;
mystring::mystring(const char *str)
{
m_data=new char(strlen(str)+1);
strcpy(m_data,str);
}
mystring::mystring(const mystring &other)
{
m_data=new char(strlen(other.m_data)+1);
strcpy(m_data,other.m_data);
}

mystring::~mystring(void)
{
delete []m_data;
cout<<"wie "<<endl;
}
mystring& mystring::operator=(const mystring& other)
{
if(this == &other)
return *this;
int len = strlen(other.m_data);
m_data = new char[len+1];
strcpy(m_data,other.m_data);
return *this;
}
void mystring::print()
{
cout<<m_data<<endl;
}

#include "stdafx.h"
#include "mystring.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
mystring a("gaoyupeng");
mystring b(a);
b.print();
cout<<endl;
mystring c("c++");
b=c;
b.print();
return 0;
}
...全文
50 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
delphiwcdj 2011-06-13
  • 打赏
  • 举报
回复
delphiwcdj 2011-06-13
  • 打赏
  • 举报
回复
()只分配了一个对象 []分配一组对象
ryfdizuo 2011-06-13
  • 打赏
  • 举报
回复
问题很多,总结一下:
1,char* p = new char(5); // 这是初始化
char* p = new char[5]; //申请5个char
2,在赋值操作符中需要释放之前m_data指向的内存。
ryfdizuo 2011-06-13
  • 打赏
  • 举报
回复
#include <iostream>
#include <string>

using namespace std;

class mystring
{
char *m_data;
public:
mystring(const char *str=NULL);
mystring(const mystring &other);
~mystring(void);
mystring &operator=(const mystring &other);
void print();
};

mystring::mystring(const char *str)
: m_data (0)
{
//m_data=new char(strlen(str)+1);
m_data=new char[strlen(str)+1];
strcpy(m_data,str);
}
mystring::mystring(const mystring &other)
: m_data(0) //必须的
{
if (m_data)
{
delete [] m_data;
m_data = 0;
}
//m_data=new char(strlen(other.m_data)+1);
m_data=new char[strlen(other.m_data)+1];
strcpy(m_data,other.m_data);
}

// 这里这么写
mystring::~mystring(void)
{
if (m_data)
delete []m_data;

m_data = 0;
cout<<"wie "<<endl;
}
mystring& mystring::operator=(const mystring& other)
{
if(this == &other)
return *this;

// 需要先释放
if (m_data)
{
delete [] m_data;
m_data = 0;
}

int len = strlen(other.m_data);
m_data = new char[len+1];
strcpy(m_data,other.m_data);
return *this;
}
void mystring::print()
{
cout<<m_data<<endl;
}

#include <iostream>
using namespace std;
int main()
{
mystring a("gaoyupeng");
mystring b(a);
b.print();
cout<<endl;
mystring c("c++");
b=c;
b.print();

system("PAUSE");

return 0;
}
谁学逆向工程 2011-06-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 supermegaboy 的回复:]
不是析构函数引起的问题,是构造函数:

把m_data=new char(strlen(str)+1);改为m_data=new char[strlen(str)+1];

把m_data=new char(strlen(other.m_data)+1);改为m_data=new char[strlen(other.m_data)+1];
[/Quote]
new char 后面是元素个数,其实就是字符数组的个数
飞天御剑流 2011-06-13
  • 打赏
  • 举报
回复
不是析构函数引起的问题,是构造函数:

把m_data=new char(strlen(str)+1);改为m_data=new char[strlen(str)+1];

把m_data=new char(strlen(other.m_data)+1);改为m_data=new char[strlen(other.m_data)+1];

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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