作者kyokb (傻傻)
看板C_and_CPP
标题Re: [问题] 二维阵列记忆体配置及回收
时间Thu Oct 29 11:25:19 2009
※ 引述《littleshan (我要加入剑道社!)》之铭言:
: ※ 引述《kyokb (傻傻)》之铭言:
: : atdf_header::atdf_header()
: : {
: : /****** FAR dynamic memory allocation ******/
: : REC_FAR=new char*[FAR_SIZE];
: : for(int i=0;i<FAR_SIZE;i++)
: : REC_FAR[i] = new char[STRLENGTH];
: 上面这行让 REC_FAR[i] 指向一块 new 得到的记忆体空间
: : for(int i=0;i<FAR_SIZE;i++)
: : *(REC_FAR+i)="";
: 然後这行让 REC_FAR[i] 指向另一块空字串
: 本来由 new 得到的记忆体就 leak 了
: : atdf_header::~atdf_header()
: : {
: : /********* FAR free memory*********/
: : for(int i=0;i<FAR_SIZE;i++)
: : delete [] REC_FAR[i];
: 这边你 delete 掉的并不是 new 得到的记忆体
: 而是空字串
: 因此造成错误
: 所以你的问题出在
: 你用等号只会复制字串的位址 而不是复制字串的内容
: 在 C++ 中建议改用 string 来存字串
: 写起来也比较简单
感谢大大~我把那行改strcpy(*(REC_FAR+i),""); 动作就ok罗
我会降用是因我常常把字串宣告写成
char *pt;
pt= "hello";
所以才会把*(REC_FAR+i)整个字串指标当作pt降用! 这点以後会多注意 感谢您^___^
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.210.112.66