Re: [問題] DLL問題
※ 引述《photon3108 (John)》之銘言:
: ※ 引述《pakker (找尋蔚藍天空)》之銘言:
: : class A
: : {
: : private:
: : int money;
: : public:
: : int getmoney();
: : }
: : DLLEXPORT A* getClassA()
: : {
: : return new A;
: : }
: : DLLEXPORT void Free(void *memory)
: : {
: : delete memory;
: : }
: : DLL 內 new/malloc 的東西, 只能從 DLL 中去 delete/free.
: : (也有例外, 看 link 的 library)
: : 詳情請洽 MSDN, 或者看一看相關的 source code
: 為什麼 "DLL 內 new/malloc 的東西, 只能從 DLL 中去 delete/free."?
: 我試了一下在 DLL 中 malloc,在使用 DLL 的程式中,得到這個 memory
: block ,再 free,好像沒有問題,會潛在什麼問題嗎?
: 文中提到的例外,又是什麼呢?
: 謝謝。
我發表一下淺見@@
有錯請指正
這可能跟malloc/free版本有關
假使今天dll使用a版的malloc/free,而外部程式使用b版的
就可能會因為Heap資訊及處理方式不一致使得這個操作發生錯誤
所以穩定的做法是以HeapFree來釋放
假使該配置記憶體的變數是一個全域變數且修飾為共享的話
則有可能會因為外部的釋放使得其他使用該配置區塊的程式不正常運作。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.39.201.42
討論串 (同標題文章)