C++內(nèi)存檢測函數(shù)_CrtSetBreakAlloc()
來源:程序員人生 發(fā)布時間:2015-08-26 08:20:42 閱讀次數(shù):5302次
在關(guān)閉C++的程序后,在VS編譯器的 Output窗口后
出現(xiàn)以下情況:
<span style="font-size:18px;">f:ddvctoolsvc7libsshipatlmfcsrcmfcstrcore.cpp(156) : {930} normal block at 0x0075E3F8, 22 bytes long.
Data: < w > 84 CF DF 77 02 00 00 00 02 00 00 00 01 00 00 00
{928} normal block at 0x0075E328, 60 bytes long.
Data: < wd u ` u > 98 CF DF 77 64 02 00 00 08 E4 75 00 60 E4 75 00
{926} normal block at 0x0075E278, 16 bytes long.
Data: < > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{925} normal block at 0x0075EF18, 16 bytes long.
Data: < > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span>
出現(xiàn)這類情況說明你的程序出現(xiàn)了內(nèi)存泄漏,單靠這些字符我們只能知道出錯的地址是哪里,可是具體在哪里出錯我們卻沒法判斷。
微軟提供了
long _CrtSetBreakAlloc(
long lBreakAlloc
);
參數(shù):lBreakAlloc 分配定單數(shù),可以設(shè)置斷點(diǎn)。
返回值:返回放置斷點(diǎn)設(shè)置之前的對象分配定單號。
_CrtSetBreakAlloc 允許利用程序通過中斷履行內(nèi)存泄漏檢測到特定點(diǎn)內(nèi)存分配和跟蹤回要求的原點(diǎn)。 函數(shù)使用的對象分配定單數(shù)量分配內(nèi)存塊時在堆中分配。
例子:
BOOL TMApp::InitInstance()
{
_CrtSetBreakAlloc(928);//928為出現(xiàn)泄漏的內(nèi)存地址
...
}
這樣當(dāng)運(yùn)行到928這塊地址值程序就會進(jìn)入DeBug斷點(diǎn)模式,我們就能夠根據(jù) Call Stack 找到內(nèi)存泄漏在代碼中的位置了。
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈