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

2022-07-23 07:24:12 字數 341 閱讀 3761

先說結論:

1、如果兩個dll(或者exe呼叫dll)的crt鏈結均為md,則可以跨動態庫分配和釋放,如果乙個是mt,另外乙個是md則會有問題。

2、利用虛函式的動態繫結技術,動態繫結分配釋放記憶體的new和delete等,可以解決這個問題,例如shared_ptr。但如果shared_ptr包裝是vector等型別,在呼叫和被呼叫中都涉及到vector的修改的話,仍然會有問題,因為兩個地方都會有釋放和分配。

似乎最好的辦法還是用原始指標加陣列長度的方式傳遞。

參見下面兩個文章。

1、跨dll的記憶體分配釋放問題

2、曉說智慧型指標shared_ptr為何可以實現跨模組分配和釋放記憶體

C與C 動態記憶體分配

1 c語言動態記憶體分配 要實現動態記憶體的分配,除了利用含指標成員的結構體之外,還需利用c語言提供的幾個標準庫函式。使用時應包含標頭檔案 alloc.h 或 malloc.h 或 stdlib.h 1.malloc 函式原型為void malloc unsigned int size 在記憶體的動...

C語言靜態記憶體分配與動態記憶體分配

c語言中,記憶體主要分為5個區,分別為棧區 堆區 全域性 靜態儲存區 常量儲存區 區。其中 區存放源程式的二進位制 其餘四個區都儲存程序執行過程中需要的儲存的變數。變數的記憶體分配有兩種 靜態與動態。靜態記憶體分配在編譯時就對變數分配空間,而動態記憶體分配直到程式執行時再進行分配。使用靜態記憶體分配...

記憶體的動態分配與靜態分配

記憶體的靜態分配和動態分配的區別主要是兩個 一是時間不同。靜態分配發生在程式編譯和連線的時候。動態分配則發生在程式調入和執行的時候。二是空間不同。堆都是動態分配的,沒有靜態分配的堆。棧有2種分配方式 靜態分配和動態分配。靜態分配是編譯器完成的,比如區域性變數的分配。動態分配由函式malloc進行分配...