C++动态分配问题

haozi596 2013-03-18 03:09:28
#include <iostream>
using namespace std;

class MyString
{
public:
MyString(const char *str);
~MyString();

friend ostream& operator<<(ostream& os,const MyString& obj);
private:
char *m_data;
int m_nLen;
};
MyString::MyString(const char *str){
m_nLen = strlen(str);
m_data = new char(m_nLen+1);
for (unsigned short i=0;i<m_nLen;i++)
m_data[i]=str[i];
m_data[m_nLen]=0;
}
MyString::~MyString(){
delete[] m_data;
m_data = NULL;
m_nLen = 0;
}
ostream& operator<<(ostream& os,const MyString& obj){
for (unsigned short i = 0; i<obj.m_nLen; i++)
os << obj.m_data[i];
return os;
}
int main(void)
{
MyString str1("hello world!");
cout << str1 << endl;
return 0;
}

很简单的一个程序。这段代码编译没问题,运行以后在析构的delete处出错,显示堆错误。这个错误出在哪?
那个大侠改改
...全文
85 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
haozi596 2013-03-18
  • 打赏
  • 举报
回复
引用 2 楼 falcomavin 的回复:
m_data = new char(m_nLen+1); 小心了,这个表示分配一个字节char,其值为m_nLen+1,改成 m_data = new char[m_nLen+1]; 就对了
果然···· 谢谢了
黑娃 2013-03-18
  • 打赏
  • 举报
回复
m_data = new char(m_nLen+1); 小心了,这个表示分配一个字节char,其值为m_nLen+1,改成 m_data = new char[m_nLen+1]; 就对了
haozi596 2013-03-18
  • 打赏
  • 举报
回复

调试运行出现这样一个错误。

64,654

社区成员

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

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