Re: [問題] DLL問題
※ 引述《sunneo (艾斯寇德)》之銘言:
: ※ 引述《photon3108 (John)》之銘言:
: : 為什麼 "DLL 內 new/malloc 的東西, 只能從 DLL 中去 delete/free."?
: : 我試了一下在 DLL 中 malloc,在使用 DLL 的程式中,得到這個 memory
: : block ,再 free,好像沒有問題,會潛在什麼問題嗎?
: : 文中提到的例外,又是什麼呢?
: : 謝謝。
: 我發表一下淺見@@
: 有錯請指正
: 這可能跟malloc/free版本有關
: 假使今天dll使用a版的malloc/free,而外部程式使用b版的
: 就可能會因為Heap資訊及處理方式不一致使得這個操作發生錯誤
: 所以穩定的做法是以HeapFree來釋放
但同樣的問題不只會發生在 malloc/free 上
也會發生在其它 standard C function 上
只要 DLL 與 client code 連結到不同的 C runtime
運作起來就很可能發生異常
所以穩定的作法應該不是用 HeapFree
而是要求 DLL 與 client code 連結相同版本的 C runtime
: 假使該配置記憶體的變數是一個全域變數且修飾為共享的話
: 則有可能會因為外部的釋放使得其他使用該配置區塊的程式不正常運作。
看不懂這邊
所謂的共享是指 shared memory?
但 shared memory 本來就不應該用 free 來釋放
其它使用該配置區塊的「程式」是指其它的 process?
還是指同一個 process 底下的不同 function?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.121.114.95
討論串 (同標題文章)