VS呼叫dll出現記憶體錯誤

2021-09-23 21:27:22 字數 452 閱讀 7096

描述:

出現了記憶體錯誤,向dll裡傳遞了乙個vector,dll向vector放了一點資料,程式退出的時候有記憶體錯誤。

解答:vector的本質就是乙個變長陣列,資料儲存是在堆上的,在dll中存入資料,很可能就是在dll中申請的儲存,在主程式裡面釋放的儲存。如果你的程式

採用靜態鏈結的方式,每乙個可執行模組都會建立自己的crt堆,在模組內部進行new和delete操作的時候,是在crt堆上進行的,這樣不會出錯,但是如果在dll模組中申請儲存,但是在主程式模組釋放儲存,vector不知道如何正確釋放dll中分配的記憶體或者釋放儲存的行為是錯誤的。

可以修改鏈結方式為動態連線,也就是dll crt的方式,這種方式下crt堆只會建立乙份,也就是主可行性模組載入的時候建立的那乙份,在同乙個模組申請釋放儲存不會出錯,或者採用靜態鏈結的方式,不要在主程式和dll之間傳遞vector,或者先給vector預留足夠的空間作為靜態儲存使用。

matlab呼叫VS生成的DLL

vs配置管理器是debug版本,將程式生成動態鏈結庫,在matlab呼叫時,彈出assert failed對話方塊,不知道為何會彈出錯誤,一開始以為是記憶體洩露,使用visual leak detector工具對記憶體進行了洩露檢測,發現有記憶體洩露,以為是記憶體洩露造成的,將記憶體洩露進行修復,結...

Qt呼叫VS生成的dll

預備知識 1 如果在沒有導入庫檔案 lib 而只有標頭檔案 h 與動態鏈結庫 dll 時,我們才需要顯示呼叫,如果這三個檔案都全的話,我們就可以使用簡單方便的隱式呼叫。2 通常windows下程式顯示呼叫dll的步驟分為三步 三個函式 loadlibrary getprocadress freeli...

VS建立DLL並用C 呼叫

c 呼叫 dll,一定要將 dll放在 c 工程的配置管理器目錄下,如工程為 release 目錄就在 release下 建立.def 建立新建項,字尾改為 def 為了讓c 能匯出這些函式 標頭檔案包含目錄,格式如下 projectdir commonfun common config vxwor...