狼牙演员表黑社会夫人:请教一个关于C++里面delete的问题!

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/28 14:43:47
我编写了一个C++程序,在构造函数我调用了new操作,在析构函数调用delete时出现了问题,vc编译器提示如下:
debug error!

program:......heap.exe(路径我省略了)
DAMAGE:after Normal block(#41) at 0x004300a0

(Please Retry to debug the application)

下面是我的构造函数源程序:
HString::HString(char* ch)
{
int i=0;
char *ch2,*ch3;

ch3=ch;
while(*ch!='\0')
{
ch++;
i++;
}
m_ch=new char[i];
ch2=m_ch;
ch=ch3;
for(int j=0;j<i;j++,m_ch++,ch++)
{
*m_ch=*ch;
}
*m_ch='\0';
m_ch=ch2;
m_len=i;
}
其中m_ch和m_len是HString的私有成员变量。
析构函数如下:
HString::~HString()
{
delete [] m_ch;
}
请问为什么会出现这个问题,我调试了好多遍都不行!

申请的内存单元个数是不是少一个?
函数实现好像没必要这么麻烦
#inlude <string.h>
HString::HString(char* ch)

int n=strlen(ch)+1;
m_ch=new char[n];
strcpy(m_ch,ch);
m_ch[n]='\n';
}

delete只能删除 new申请的内存的初址,你把保存new申请的内存的初址变量m_ch 给改了一定会出错。
你调用了m_ch++之后m_ch已经不是原来的值了。