Re: [問題] 二維陣列記憶體配置及回收
※ 引述《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)
推
10/29 11:13, , 1F
10/29 11:13, 1F
→
10/29 11:14, , 2F
10/29 11:14, 2F
→
10/29 11:14, , 3F
10/29 11:14, 3F
→
10/29 11:23, , 4F
10/29 11:23, 4F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 6 篇):