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

C++?內(nèi)存泄漏調(diào)試方式

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

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

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

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

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

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

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

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);
}

程序運(yùn)行中的日志:

==> ?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 文件。
連接服務(wù)器成功!
線程 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]  釋放成功

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

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

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

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

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

相關(guān)文章

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

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

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

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

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

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

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

    C++詳細(xì)講解圖的遍歷

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

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

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

    C語言的常量和字符串

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

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

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

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

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

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

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

    C語言版掃雷小游戲

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

最新評論

贡觉县| 丹江口市| 涟源市| 西平县| 巨野县| 抚州市| 大安市| 万源市| 永丰县| 榆林市| 吉林省| 吉隆县| 扬州市| 申扎县| 达州市| 威信县| 额尔古纳市| 石柱| 宁津县| 彩票| 邯郸市| 深泽县| 龙岩市| 密山市| 甘南县| 漠河县| 峨山| 夏河县| 宿松县| 新巴尔虎左旗| 巫山县| 深圳市| 海林市| 大埔区| 中山市| 紫金县| 岑巩县| 井冈山市| 静安区| 黄骅市| 大竹县|