读书人

C++动态分配有关问题

发布时间: 2013-03-20 15:25:24 作者: rapoo

C++动态分配问题

#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处出错,显示堆错误。这个错误出在哪?
那个大侠改改 c++ 动态分配 new
[解决办法]
m_data = new char(m_nLen+1); 小心了,这个表示分配一个字节char,其值为m_nLen+1,改成
m_data = new char[m_nLen+1]; 就对了

读书人网 >C++

热点推荐