在Windows Mobile 5.0的裝置上進行開發,最怕見到這個所謂的GWES.EXE Error。因為程式出現該錯誤,程式幾乎不能正常運行,而且對於開發人員來說,系統給出的錯誤報表,沒有幾個會看懂的,即不知道程式中的哪個地方出現了問題;而且一旦出現這個錯誤,即使隨後的程式仍能運行,也會經常跳出那個錯誤報表,一個字煩。而在Windows Mobile 5.0以前的系統上,很少會看到這個錯誤資訊。
(BTW在開發基於Windows Mobile 5.0的應用程式的時候,應先檢查下,裝置上的"錯誤報表"是否關閉,如果關閉了,就不會跳出以上的錯誤報表資訊,但是一旦開啟,程式啟動並執行時候就會出現問題,比如彈出那個錯誤資訊。檢查的方法:(PPC)開始——〉設定——〉系統——〉錯誤報表——〉啟動錯誤報表)
下面是我在開發的過程中,會出現GWES.EXE Error的幾個方面,來個拋磚引玉:
1、一個字串的記憶體空間不是通過mallo/new分配的,如可能是複製另一個字串的,但是在程式中的某個地方,卻用free/delete將其回收。
2、如果是動態申請的空間,如果沒有回收,在做Hopper Test的會出現問題;建立的資源如字型、畫刷等,沒有刪除,會產生記憶體的泄漏,長時間運行程式,也會產生GWES.EXE Error。
3、CFont BoldFont;
BoldFont.CreateFont(0, 0, 0, 0,FW_SEMIBOLD,
false, false, false, DEFAULT_CHARSET,
OUT_DEFAULT_PRECIS, CLIP_CHARACTER_PRECIS,
DEFAULT_QUALITY, DEFAULT_PITCH|FF_DONTCARE,
_T("黑體"));
CFont *pOldFont;
pOldFont = pDC->SelectObject(&BoldFont);
// do Something
pDC->SelectObject(pOldFont);
BoldFont.DeleteObject();
// 之後沒有再對預設的字型進行修改
pDC->SelectObject(pOldFont); //
就是因為重複了這個,一運行程式,馬上出現GWES.EXE Error。
……(待補充)
目前,想到就這些,歡迎補充!
可見,這種錯誤都是粗心造成的,只要認真審查下代碼,就會避免出現這種錯誤。