最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++?內存泄漏調試方式

 更新時間:2022年04月29日 09:06:31   作者:決戰(zhàn)北京城  
這篇文章主要介紹了C++?內存泄漏調試方式,C++和其他高級語言不同,需要自行管理內存,項目大調用多,下文我們就來看看C++?內存泄漏調試方式分享,需要的小伙伴可以參考一下

C++和其他高級語言不同,需要自行管理內存,項目大\調用多,容易內存泄漏.內存申請釋放使用malloc/freenew delete兩種方式.

當內存報錯彈出一個陌生的地址,我一臉懵逼,不清楚是哪個地方出的錯,特別是程序退出的時候報錯更不好定位.可以使用第三方工具來定位解決,也可以自己想辦法解決.

我在做神經(jīng)網(wǎng)絡訓練的時候碰到一個的BUG,發(fā)送完訓練圖片之后直接提示使用了非法內存.

HEAP[Test.exe]: HEAP: Free Heap block 0000015E950E4A60 modified at 0000015E950E4AA0 after it was freed.

代碼迭代了多次,部分功能沒有測試,也不清楚哪里出的問題.

聯(lián)想到內存的申請釋放方式,申請和釋放總是配對的,申請的大小也是預先知道的.在內存申請申請釋放的時候加上內存地址打印,當內存泄漏報錯的時候就可以定位出錯內存地址在哪個范圍.我加入了一個內存打印函數(shù),把內存地址范圍和時間都打印出來.

void DebugHeap(CString name, void * ptr,int size)
{
?? ?long Time = GetCurrentTime();
?? ?TRACE("========>heap name:%s,address [%p:%p],time:%d (ms)\n", name,ptr,(char *)ptr + size,Time);
}

在程序中申請\釋放部分加入DebugHeap

static Neural * mThis;
static FileInfo mFileInfo;
Neural *Neural:: GetInstance(MainDlg * parent,DlgCommand * cmd)
{
?? ?if (mThis == NULL)
?? ?{
?? ??? ?mThis = new Neural(parent);
?? ??? ?mCmd = cmd;
?? ?}
?? ?return mThis;
}
?
void Neural:: ReleaseInstance()
{
?? ?if (mThis != NULL)
?? ??? ?delete mThis;
}
?
Neural::Neural(MainDlg * parent)
{
?? ?mFileInfo.mRcv = (unsigned char *)malloc(1024);
?? ?DebugHeap("flag1:alloc", mFileInfo.mRcv, 1024);
}
?
Neural::~Neural(void)
{
?? ?bWork = FALSE;
?? ?DebugHeap("flag1:free ", mFileInfo.mRcv, 1024);
?? ?free(mFileInfo.mRcv);
}

程序運行中的日志:

==> ?ThreadRecvProc Start
==> ?ThreadInterrupt Start
MainDlg::OnInitDialog()
========>heap name:flag1:alloc,address [0000015E95077CD0:0000015E950780D0],time:7870921 (ms)
“Test.exe”(Win32): 已加載“C:\Windows\System32\clbcatq.dll”。無法查找或打開 PDB 文件。
“Test.exe”(Win32): 已加載“C:\Windows\System32\edputil.dll”。無法查找或打開 PDB 文件。
....
線程 0x2a10 已退出,返回值為 0 (0x0)。
線程 0x2ae4 已退出,返回值為 0 (0x0)。
“Test.exe”(Win32): 已加載“C:\Windows\System32\mswsock.dll”。無法查找或打開 PDB 文件。
連接服務器成功!
線程 0x16c8 已退出,返回值為 96 (0x60)。
線程 0xa0c 已退出,返回值為 0 (0x0)。
“Test.exe”(Win32): 已加載“C:\Windows\System32\msctfuimanager.dll”。無法查找或打開 PDB 文件。
....
========>heap name:flag1:alloc,address [0000015E951577D0:0000015E95157BD0],time:7885500 (ms)
Ending:43707
========>heap name:flag1:free ,address [0000015E951577D0:0000015E95157BD0],time:7885609 (ms)
線程 0x2f20 已退出,返回值為 0 (0x0)。
========>heap name:flag1:alloc,address [0000015E950E4AA0:0000015E950E4EA0],time:7887265 (ms)
analyse:3, D:\數(shù)據(jù)\FSSD\V5\target.csv
========>heap name:flag1:free ,address [0000015E950E4AA0:0000015E950E4EA0],time:7887296 (ms)
線程 0x2a00 已退出,返回值為 0 (0x0)。
線程 0xe84 已退出,返回值為 0 (0x0)。
HEAP[Test.exe]: HEAP: Free Heap block 0000015E950E4A60 modified at 0000015E950E4AA0 after it was freed
Test.exe 已觸發(fā)了一個斷點。
  • 第一次申請 [0000015E95077CD0:0000015E950780D0]  釋放失敗
  • 第二次申請[0000015E951577D0:0000015E95157BD0]   釋放成功
  • 第三次申請[0000015E950E4AA0:0000015E950E4EA0]  釋放成功

從報錯的意思看是重復釋放內存.0000015E950E4AA0 地址被重復釋放,這個地址剛好是第三次申請的地址.

看現(xiàn)象是第一次申請的地址被改動了,查看這部分代碼分析原因.

按照我預想在構造函數(shù)申請內存,析構函數(shù)釋放內存,是能配對.代碼里加入單例模式并且使用了一個全局變量mFileInfo,隨著構造函數(shù)調用會不斷改變.我預想是這個類只能單例使用,由于歷史原因,部分代碼并沒有使用單例模式.單例中的申請的地址位置被改動了,所以沒辦法正確釋放.統(tǒng)一使用單例模式,這個問題解決了.

C++出現(xiàn)內存錯誤時候,把申請/釋放的地址打印出來能更快更準確的定位到問題.

到此這篇關于C++ 內存泄漏調試方式的文章就介紹到這了,更多相關C++ 內存泄漏內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 深度解析三個常見的C語言內存函數(shù)

    深度解析三個常見的C語言內存函數(shù)

    這篇文章主要深度解析了三個常見的C語言內存函數(shù)memcpy,memmove,memcmp,所以本文將對memcpy,memmove,memcmp 三個函數(shù)進行詳解和模擬實現(xiàn),需要的朋友可以參考下
    2023-07-07
  • C++實現(xiàn)停車場管理系統(tǒng)

    C++實現(xiàn)停車場管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C++實現(xiàn)停車場管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C++實現(xiàn)訪問者模式的基礎介紹

    C++實現(xiàn)訪問者模式的基礎介紹

    訪問者模式表示一個作用于某對象結構中各元素的操作,它使我們可以在不改變各元素的類的前提下定義作用于這些元素的新操作。對C++訪問者模式相關知識感興趣的朋友一起看看吧
    2021-09-09
  • C++詳細講解圖的遍歷

    C++詳細講解圖的遍歷

    圖的遍歷是指,從給定圖中任意指定的頂點(稱為初始點)出發(fā),按照某種搜索方法沿著圖的邊訪問圖中的所有頂點,使每個頂點僅被訪問一次,這個過程稱為圖的遍歷
    2022-05-05
  • 淺析C++的引用與const指針與各種傳遞方式

    淺析C++的引用與const指針與各種傳遞方式

    這篇文章主要介紹了淺析C++的引用與const指針與各種傳遞方式的相關資料,需要的朋友可以參考下
    2017-08-08
  • C語言的常量和字符串

    C語言的常量和字符串

    這篇文章主要為大家介紹了C語言常量和字符串,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • C語言排序算法之插入排序

    C語言排序算法之插入排序

    這篇文章主要為大家詳細介紹了C語言排序算法之插入排序,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C語言的模板與泛型編程你了解嗎

    C語言的模板與泛型編程你了解嗎

    這篇文章主要為大家詳細介紹了C語言的模板與泛型編程,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • OpenCV實現(xiàn)圖像距離變換

    OpenCV實現(xiàn)圖像距離變換

    這篇文章主要為大家詳細介紹了OpenCV實現(xiàn)圖像距離變換,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • C語言版掃雷小游戲

    C語言版掃雷小游戲

    這篇文章主要為大家詳細介紹了C語言版的掃雷小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08

最新評論

田阳县| 长岭县| 海兴县| 莱西市| 重庆市| 分宜县| 东丰县| 准格尔旗| 龙岩市| 兴安县| 贺州市| 阳朔县| 镇平县| 汽车| 大渡口区| 松滋市| 马关县| 南宁市| 泰兴市| 洛隆县| 黑水县| 买车| 陈巴尔虎旗| 白河县| 焦作市| 兴义市| 额济纳旗| 水城县| 汾阳市| 界首市| 札达县| 阳高县| 博客| 白山市| 顺平县| 阿鲁科尔沁旗| 四子王旗| 桐庐县| 任丘市| 岑巩县| 太原市|