dll中使用到容器的全域性變數在mfc中報記憶體洩漏

2021-08-11 08:30:51 字數 532 閱讀 4377

這幾天發現乙個蛋疼的問題,在vs2015上,dll中使用到容器的全域性變數在mfc中報記憶體洩漏。

這是怎麼出現的呢,我加入了opengl的依賴後就出現了。是不是很神奇?而且只針對那些使用到容器的全域性變數。

例如

char tmp[111]; //不會報洩漏。

//報洩漏

那到底是什麼原因呢?

我猜是由於opengl庫的加入擾亂了原來程序解除安裝時的模組釋放順序(這不代表出錯),在mfc主程式退出時檢測記憶體洩漏的時刻,dll裡面的容器全域性變數還沒析構導致誤報,可能在mfc主程式檢測完才會析構。另外,opengl能有這麼大「能耐」可能是因為他是系統自帶庫且全域性容器變數特殊處理有關。

基於這猜測網上找一下別人會不會出現這問題。找到一些類似的。

不是我的問題就好。

對了在vs2015上檢測記憶體洩漏有自帶的工具,很方便,下次專門寫個文章介紹。

在Unity中使用全域性變數

建立乙個指令碼,輸入下面的 指令碼不需要新增到任何物體上,globle變數可以跨場景全域性呼叫。using system.collections using system.collections.generic using unityengine public class globle和以前的許多語...

教你在PHP中使用全域性變數

即使開發乙個新的大型php 程式,你也不可避免的要使用到全域性 資料,因為有些資料是需要用到你的 的不同部分的。一些常見的全域性資料有 程式設定類 資料庫 連線類 使用者資料等等。有很多方法 能夠使這些資料成為全域性資料,其中最常用的就是使用 global 關鍵字申明,稍後在文章中我們會具體的講解到...

在PHP中使用全域性變數 一

摘要 本文演示了如何恰當的在 php中使用全域性資料。主要談及到使用 global 關鍵字,函式引數,單件和註冊器模式四種實現全域性資料的方式。簡介 即使開發乙個新的大型 php程式,你也不可避免的要使用到全域性資料,因為有些資料是需要用到你的 的不同部分的。一些常見的全域性資料有 程式設定類 資料...