Re: [問題] 二維陣列記憶體配置及回收

看板C_and_CPP作者 (非天夜翔)時間15年前 (2009/10/29 03:08), 編輯推噓1(103)
留言4則, 2人參與, 最新討論串3/6 (看更多)
※ 引述《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
原本的程式碼並沒有呼叫copy ctor 所以錯誤不在這裡@@
10/29 11:13, 1F

10/29 11:14, , 2F
的確沒有定義適當的copy ctor會引起你說的問題 但是原po
10/29 11:14, 2F

10/29 11:14, , 3F
的問題不在這啊XD
10/29 11:14, 3F

10/29 11:23, , 4F
了解,多謝指正 ^_^
10/29 11:23, 4F
文章代碼(AID): #1AwGT2vc (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1AwGT2vc (C_and_CPP)