在VS2013平台下如何快速解决c++代码内存泄漏问题
在學(xué)習(xí)FPS3000人臉關(guān)鍵點(diǎn)定位算法時(shí),發(fā)現(xiàn)github上的源碼,存在大量的內(nèi)存泄漏問題,在訓(xùn)練的時(shí)發(fā)現(xiàn)內(nèi)存一直在增長,測試的時(shí)候也存在內(nèi)存無法徹底釋放的問題。
一直以為是存放模型參數(shù)vector<class>結(jié)構(gòu)的問題,?采用以下方法手動(dòng)釋放,仍然無法解決問題。
?
經(jīng)過仔細(xì)檢查發(fā)現(xiàn),有好幾個(gè)類沒有析構(gòu)函數(shù),于是就添加了CascadeRegressor::~CascadeRegressor();Regressor::~Regressor();RandomForest::~RandomForest();Node::~Node();由于class類不支持手動(dòng)釋放,只能在析構(gòu)函數(shù)里自動(dòng)釋放內(nèi)存。而且還發(fā)現(xiàn)有很多new()和#define Malloc(type,n) (type *)malloc((n)*sizeof(type))手動(dòng)方式分配的內(nèi)存沒有手動(dòng)釋放。
?
那我是怎么發(fā)現(xiàn)的呢?方法如下:
一、在VS2013的DeBug模式下在代碼中添加如下代碼:
?
?
二、然后編譯執(zhí)行程序,如果代碼中存在內(nèi)存泄漏,則在程序終止時(shí),輸出端口看到如下內(nèi)容:
?
?
從以上log中可以看到3558059的地方存在內(nèi)存泄漏,那我們可以把main()函數(shù)中的這個(gè)函數(shù)去掉注釋,
?
?
?
然后重新編譯并執(zhí)行程序,代碼就會(huì)run到內(nèi)存泄漏的地方就停下來。
此法對(duì)于查找內(nèi)存泄漏非常方便。
總結(jié)
以上是生活随笔為你收集整理的在VS2013平台下如何快速解决c++代码内存泄漏问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java 使用 POI 操作 Excel
- 下一篇: vscode gcc debug dbg