在 MFC 專案的 Debug 版本中遇到 _free_dbg(p, _NORMAL_BLOCK) 斷言失敗,通常是 CString 記憶體管理出錯。Release 版本可能不顯示錯誤,但隱患依然存在。
GetBuffer 後未配對 ReleaseBufferGetBuffer 取得內部緩衝區指標進行直接操作,必須呼叫 ReleaseBuffer 歸還控制權,否則參考計數與長度資訊不同步,導致解構時雙重釋放或釋放無效指標。CString 物件CString 在程式結束時,MFC 記憶體追蹤機制可能尚未完全關閉,導致誤判。將變數改為 static 或調整生命週期可緩解。GetBuffer 呼叫是否有對應 ReleaseBuffer_CRTDBG_MAP_ALLOC 並配合 _CrtDumpMemoryLeaks 定位洩漏點std::wstring + 轉換函式,減少 MFC 專用類別依賴作者:true比鄰