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

看板C_and_CPP (C/C++)作者 (傻傻)時間16年前 (2009/11/09 17:46), 編輯推噓2(203)
留言5則, 3人參與, 最新討論串5/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 來存字串 : 寫起來也比較簡單 在請教各位一個問題,我把class atdf_header宣告成全域變數提供給多個函式使用時 在解構的時候也出像類似問題耶,這該如何解決? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.210.112.66

11/09 18:16, , 1F
你會在看醫生時說: "我跟我哥一樣身體不太舒服耶" 嗎?
11/09 18:16, 1F

11/09 20:32, , 2F
樓上害小弟我笑了, 雖然我也常常想推這種話XDDD
11/09 20:32, 2F

11/10 09:05, , 3F
sorry,我沒描述清楚!問題是如果宣告一個全域的class
11/10 09:05, 3F

11/10 09:06, , 4F
在程式關閉時會在delete [] REC_FAR[i];這裡出現問題
11/10 09:06, 4F

11/10 09:13, , 5F
這是否代表我的class只能在用ex:main{atdf_header test;}
11/10 09:13, 5F
文章代碼(AID): #1Az-Jtvz (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1Az-Jtvz (C_and_CPP)