Re: [問題] HeapFree()出現中斷

看板C_and_CPP作者 (風月)時間14年前 (2011/01/12 06:16), 編輯推噓0(005)
留言5則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《wawi (兄弟霸業)》之銘言: : 開發平台(Platform): (Ex: VC++, Gcc, Linux, ...) : VC++ : 問題(Question): : 程式執行至某個HeapFree()出現中斷 : 預期的正確結果(Expected Output): : 在中斷之前結果都對的,理應直接結束程式,但卻在最後的HeapFree中斷 : http://tinyurl.com/4ncrcsm : 因研究藍芽,目前找到這份程式碼 : 試著執行時卻發生問題 : 這份程式主要是用socket概念去做藍芽傳輸 : server mode時接到client端的資料時完全正確 : 但在最後(函式RunServerMode最後的) : if ( NULL != lptstrThisComputerName ) : { : HeapFree(GetProcessHeap(), 0, lptstrThisComputerName); : lptstrThisComputerName = NULL; : } : 我個人認為是memory上的問題,但在HeapFree之前有些檢查過是否為NULL : 所以目前想不透是為什麼 : 中斷出現的訊息為: : Windows 已觸發 test.exe 內的中斷點。 : 可能是因為堆積損毀,表示 test.exe 內有錯誤或其載入的任何 DLL 內有錯誤。 : 也有可能是因為 test.exe 取得焦點時使用者按下 F12。 : 輸出視窗或許有較多的診斷資料。 : google到的也都是說free memory之前先檢查是否!NULL : ps. 如果電腦沒藍芽裝置的話,該程式也不能跑 請使用GetLastError這個函數來取得錯誤狀況的資訊, 然後,請檢查GetProcessHeap()這個函數的回傳值, 如果GetProcessHeap函數的回傳值不等於NULL時, 請檢查lptsrtThisComputerName的配置空間是不是由HeapAlloc和HeapReAlloc這二個函數 所配置出來的... ps.請善用Debugger工具和MSDN... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.62.64.95

01/12 15:27, , 1F
這做過了...對不起沒打出來GetLastError是10038(但有關嗎?)
01/12 15:27, 1F

01/12 15:28, , 2F
然後HeapFree回傳0 也檢查了原本確是用HeapAlloc的
01/12 15:28, 2F

01/12 15:28, , 3F
10038是說An operation was attempted on something that is
01/12 15:28, 3F

01/12 15:29, , 4F
not a socket. 似乎是無關!?
01/12 15:29, 4F

01/12 15:34, , 5F
請在有問題的程式區段下中斷點去追踪...
01/12 15:34, 5F
文章代碼(AID): #1DBKSpgc (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1DBKSpgc (C_and_CPP)