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

nested try...catch block

尚未結案
yhchu
一般會員


發表:2
回覆:70
積分:24
註冊:2004-01-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-11 11:06:54 IP:220.130.xxx.xxx 未訂閱
各位,最近遇到一個奇怪的問題如下:    
try
{
  ...
  try
  {
    idTCPClient->Connect(TimeOut);
  }
  catch (const Exception& e)
  {
    return;
  }
  ...
}
catch (...)
{
  ...
}
這段 code 是在 worker thread 裡執行的,程式使用許多 thread 同時執行。但是執行時發現程式有很嚴重的 memory leak 問題,使用 AQtime 4 抓漏的結果,發現沒有釋放掉的記憶體是在 Connect 那一行產生的 Exception object! 後來我把 code 改成
try
{
  ...
  IdTCPClient->Connect(TimeOut);
  if (!IdTCPClient->Connected()) return;
  ...
}
catch (...)
{
  ...
}
就沒有上述的 memory leak 問題發生了!但是我找了一些 C Exception 處理的資料看,還是搞不懂為什麼會發生這樣的問題。不知道有沒有大大能幫忙解惑,謝謝!
justdo
高階會員


發表:2
回覆:359
積分:222
註冊:2004-08-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-05-11 19:28:21 IP:221.169.xxx.xxx 未訂閱
先確定 idTCPClient->Connect(TimeOut); 失敗的時候是否會傳回一個exception 假若不會的話(我猜應該是不會..)他根本就不會被catch、進而離開這個函式 因此會繼續執行接下去的程式碼
yhchu
一般會員


發表:2
回覆:70
積分:24
註冊:2004-01-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-15 12:40:24 IP:61.66.xxx.xxx 未訂閱
引言: 先確定 idTCPClient->Connect(TimeOut); 失敗的時候是否會傳回一個exception 假若不會的話(我猜應該是不會..)他根本就不會被catch、進而離開這個函式 因此會繼續執行接下去的程式碼
Connect 在連接失敗時確實會產生 exception,EIdConnectTimeout 或 EIdSocketError 之類的,兩種程式寫法也確實都有抓到 exception,不過我的問題是,為何會有 memory leak 的情形出現?
系統時間:2024-05-18 20:59:45
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!