台灣最大程式設計社群網站
線上人數
834
 
會員總數:239326
討論主題:185670
歡迎您免費加入會員
討論區列表 >> VB.NET >> 想請問 Marshal.FreeHGlobal() 為什麼無法用兩次 卻可以讀寫?
[ 變換順序 ]  
[我要回覆]
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
想請問 Marshal.FreeHGlobal() 為什麼無法用兩次 卻可以讀寫?
價值 : 60 QP  點閱數:136 回應數:0

樓主

ford
門外漢
0 5
41 2
發送站內信

我將 w 宣告成 IntPtr 並用Marshal.AllocHGlobal(12)配置後

使用 Marshal.WriteByte(w, i, 1) 將w內的 Unmanaged 記憶體全部寫入1

之後馬上Marshal.FreeHGlobal(w) 釋放掉 還能用 Marshal.ReadByte做讀取

可是不是已經釋放掉w了嗎? 裡面的值幾乎沒變?大部分還是1

接下來 竟然還可以用 Marshal.WriteByte(w, i, 2)與 把w內的記憶體Unmanaged 記憶體全部寫入為2 並且可以讀取...

但是再次用Marshal.FreeHGlobal(w) 是錯誤 這可以理解 釋放過了 當然可以不能在釋放

但為什麼w卻可以讀寫 並且裡面的Unmanaged 記憶體 沒什麼變...?

FreeHGlobal 上msdn的解釋 說釋放掉AllocHGlobal配置的記憶體

那他原本配置的記憶體和我用 Marshal.WriteByte(w, i, 1) 寫入的記憶體是 位置嗎?


我需要用什麼東西 讀取到w才能知道他 他確實被釋放 並寫入的東西 已被清除









搜尋相關Tags的文章: [ Marshal.FreeHGlobal() ] ,
本篇文章發表於2017-03-05 22:34
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
目前尚無任何回覆
[ 變換順序 ]   

回覆
如要回應,請先登入.