作者csihcs (非天夜翔)
看板C_and_CPP
标题Re: [问题] 二维阵列记忆体配置及回收
时间Thu Oct 29 11:08:47 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 来存字串
: 写起来也比较简单
将你说的问题点删除後,
以这样试的结果,
仍然有问题唷。
以上纯属个人想法,
有错请大大指正 m(_@_)m
void test(atdf_header test) {}
int main(int argc, char *argv[]) {
atdf_header testB;
test(testB);
test(testB);
system("pause");
return EXIT_SUCCESS;
}
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];
/****** MIR dynamic memory allocation ******/
REC_MIR=new char*[MIR_SIZE];
for(int i=0;i<MIR_SIZE;i++)
REC_MIR[i] = new char[STRLENGTH];
/****** PIR dynamic memory allocation ******/
REC_PIR=new char*[PIR_SIZE];
for(int i=0;i<PIR_SIZE;i++)
REC_PIR[i] = new char[STRLENGTH];
}
atdf_header::~atdf_header() {
/********* FAR free memory*********/
for(int i=0;i<FAR_SIZE;i++)
delete [] REC_FAR[i];
delete [] REC_FAR;
/********* MIR free memory*********/
for(int i=0;i<MIR_SIZE;i++)
delete[] REC_MIR[i];
delete[] REC_MIR;
/********* PIR free memory*********/
for(int i=0;i<PIR_SIZE;i++)
delete[] REC_PIR[i];
delete[] REC_PIR;
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 211.74.9.2
※ 编辑: csihcs 来自: 211.74.9.2 (10/29 11:09)
1F:推 holymars:原本的程式码并没有呼叫copy ctor 所以错误不在这里@@ 10/29 11:13
2F:→ holymars:的确没有定义适当的copy ctor会引起你说的问题 但是原po 10/29 11:14
3F:→ holymars:的问题不在这啊XD 10/29 11:14
4F:→ csihcs:了解,多谢指正 ^_^ 10/29 11:23