看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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