EXE中釋放DLL中分配的記憶體

2022-06-13 15:54:11 字數 366 閱讀 6932

在dll中分配的記憶體,如果到其呼叫者中釋放,可能會出現crash的情況,其原因在於:

在dll中的code generation如果是採用了mt(靜態載入libcrtd.lib)在該庫中維護了乙個allocator的物件對記憶體分配進行管理,當exe中呼叫free等函式對記憶體進行釋放時,他自己也維護了乙個allocator物件(這個物件與dll中得物件不是同乙個物件),所以在free時找不到已經分配的記憶體,會crash.

在dll中的code generation如果是採用了md(動態載入msvcrtd.dll),那麼allocator物件維護在msvcrtd.dll中,當在exe中呼叫時,如果也採用md,那麼他也是使用msvcrtd中維護的物件,所以在呼叫free時不會crash.

C vector中的記憶體分配與釋放

c vector中resize與reserve的比較 因此,接下來記錄vector是如何進行記憶體的分配與釋放的 c primer 為了支援快速的隨機訪問,vector容器的元素以連續方式存放,每乙個元素都緊挨著前乙個元素儲存 vector的乙個特點 記憶體空間只會增長,不會減小 設想一下,當vec...

c 跨動態庫DLL的記憶體分配與釋放問題

先說結論 1 如果兩個dll 或者exe呼叫dll 的crt鏈結均為md,則可以跨動態庫分配和釋放,如果乙個是mt,另外乙個是md則會有問題。2 利用虛函式的動態繫結技術,動態繫結分配釋放記憶體的new和delete等,可以解決這個問題,例如shared ptr。但如果shared ptr包裝是ve...

C中動態記憶體管理 堆中分配記憶體

堆區 標頭檔案 include1 malloc 函式會向堆中申請一片連續的可用記憶體空間 2 若申請成功 返回指向這片記憶體空間的指標 若失敗 則會返回null,所以我們在用malloc 函式開闢動態記憶體之後,一定要判斷函式返回值是否為null.3 返回值的型別為void 型,malloc 函式並...