線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1541
推到 Plurk!
推到 Facebook!

回傳的指標記憶體如何清除?

答題得分者是:鈴鐺
tomex.ou
一般會員


發表:8
回覆:54
積分:22
註冊:2005-05-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-08-11 09:50:51 IP:211.78.xxx.xxx 未訂閱
我寫了一個Class(名稱:Convert), 裏頭有個靜態method專門回傳一個char指標 而它指定一個存在的記憶體, 每呼叫一次各指向不同的記憶體。    
 
void ToCharArray(AnsiString s)
{
  char* c = new char[strlen(s) 1];
  strcpy(c, s.c_str());
  return c;
}
因此我每呼叫一次,它的記憶體都存在: char* c1 = Convert::ToCharArray("test1"); char* c2 = Convert::ToCharArray("test2"); char* c3 = Convert::ToCharArray("test3"); 由於在外部使用,user不可能知道要delete c1,c2,c3 那也不直覺。 我知道有new記憶體就永遠存在,想用array又事先不曉得長度 請問我想怎麼做,才能達到很直覺使用,又不會浪費記憶體呢? -- Level: A newbie of C Book: The Complete Reference C
------
A fan of C#.NET
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-08-11 12:06:57 IP:59.104.xxx.xxx 未訂閱
引言:
 
void ToCharArray(AnsiString s)
{
  char* c = new char[strlen(s) 1];
  strcpy(c, s.c_str());
  return c;
}
因此我每呼叫一次,它的記憶體都存在: char* c1 = Convert::ToCharArray("test1"); char* c2 = Convert::ToCharArray("test2"); char* c3 = Convert::ToCharArray("test3"); delete [] c1; delete [] c2; delete [] c3;
另。你這個函數跟 .c_str(); 有什麼不同????
鈴鐺
初階會員


發表:33
回覆:81
積分:35
註冊:2002-03-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-08-11 12:41:16 IP:202.145.xxx.xxx 未訂閱
看起來和 c_str() 很像, 不過我實務上發現, c_str() 只能在當時用一下, 隔幾行程式碼後, 那個傳回的指標就被 compiler 自動 free 掉, (可以開 code guard 看看). 我想到這題解法要用 class, 每次 new 的指標記錄在自己的 link list 裡, 最後脫離時再運用 class deconstuctor free 掉. 不過我建議較好的做法是在此函數的說明處, 請 user 自己 free 掉. 因為像標準函數 strdup 也是請 user 自行 free.
tomex.ou
一般會員


發表:8
回覆:54
積分:22
註冊:2005-05-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-08-11 13:50:49 IP:211.78.xxx.xxx 未訂閱
引言: 看起來和 c_str() 很像, 不過我實務上發現, c_str() 只能在當時用一下, 隔幾行程式碼後, 那個傳回的指標就被 compiler 自動 free 掉, (可以開 code guard 看看).
嗯,這正是我創造這個method的動機 就是解決掉c_str()暫時性記憶空間的特性! 看來要實作類似GC回收機制,但目前我就先用說明 請user自行delete掉吧! 謝謝回覆者們。 -- Level: A newbie of C Book: The Complete Reference C
------
A fan of C#.NET
系統時間:2024-06-28 19:05:31
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!