鏈榪戝啓浜嗙偣C++鐨勪唬鐮?鍏朵腑涔熷嚭鐜拌繃寰堝濂囨殑閿欒,heap corruption detected灝辨槸鍏朵腑涔嬩竴,鑰屼笖榪欑閿欒寰堝鏄撳嚭鐜?涓鑸嚭鐜拌閿欒,鍦╠ebug涓兘鏈夊ぇ鑷村涓嬬殑閿欒淇℃伅:
heap corruption detected:
after normal block(#xxx) at 0x xxxxxxxx
crt detected that the application wrote to menory after end of heap buffer
榪欐槸鍏稿瀷鐨勫唴瀛樻孩鍑洪敊璇?甯稿湪鍐呭瓨鐨刣elete澶勫彂鐢?鑰屼笖涓鑸湪debug鐗堟湰涓彲鑳藉嚭鐜?release鐗堟湰涓彲鑳藉茍涓嶆姤閿?
鍑虹幇榪欎釜閿欒鐨勫師鍥犱竴鑸兘鏄搷浣渘ew鐢寵鐨勫唴瀛樻孩鍑?鍥犱負鍦╟++涓?濡傛灉鐢╪ew鍒嗛厤涓孌靛唴瀛?鎿嶄綔鐨勬椂鍊欐敼鍙樹簡璇ラ儴鍒嗙殑澶у皬,鍦╠elete鏃跺氨浼氬嚭閿?姣斿璇村涓嬮儴鍒?
char* p=new char[5];
strcpy(p,"aaaaa");
delete[] p;
榪欐浠g爜灝變細鍑洪敊,鍥犱負鐢寵浜嗕竴涓猻ize涓?鐨勫唴瀛?浣嗘槸strcpy榪囧幓浜嗕竴涓猻ize涓?鐨勫瓧絎︿覆,鍥犳鐮村潖浜嗚繖涓寚閽?榪愯debug鐗堟湰鐨勬椂鍊欏氨浼氬嚭鐜板厛鍓嶇殑閿欒,浣嗘槸鍦╮elease鐗堟湰涓?婧㈠嚭涓涓瓧鑺傜殑鍐呭瓨寰堟湁鍙兘鏄病鏈夐敊璇殑,鐒跺悗娼滃湪鐨勯殣鎮f槸鑲畾瀛樺湪鐨?鍥犳,鎴戜滑鍦╠ebug閬囧埌榪欐牱鐨勯敊璇椂鍊欎竴瀹氳浠旂粏媯鏌ュnew鍑虹殑鎸囬拡鐨勬搷浣?
鎴戠殑鐜鏄? XP SP2 . VS2003
鏈榪戝湪涓涓」鐩腑,紼嬪簭閫鍑哄悗閮藉嚭鐜板唴瀛樻硠婕?
Detected memory leaks! Dumping objects -> {98500} normal block at 0x05785AD0, 152 bytes long. Data: << N N x 7 > 3C AC 4E 10 00 00 00 00 BC A4 4E 10 78 B6 37 00 Object dump complete.
鑰屼笖姣忔閫鍑洪兘鏄竴鏍風殑.娉勬紡鐨勫唴瀛樺潡閮芥槸98500.
瑙e喅鏂規硶:
1. 鍦ㄧ▼搴忓紑濮嬪惎鍔ㄧ殑鍦版柟(瓚沖鍓嶇殑鍦版柟,鍙鍦ㄦ硠婕忕殑鍐呭瓨鍒嗛厤鐨勫墠闈?浣跨敤浠g爜:
_CrtSetBreakAlloc(98500); //98500涓轟笂闈㈠唴瀛樻硠婕忕殑鍧楀彿.
2. 鐒跺悗debug榪愯,紼嬪簭鑷姩鏂偣鍦?鍐呭瓨鍧?8500"鍒嗛厤鐨勪綅緗?
/* break into debugger at specific memory allocation */
if (_crtBreakAlloc != -1L && lRequest == _crtBreakAlloc)
_CrtDbgBreak();
3 .鎴戜滑宸茬粡鎵懼埌浜嗘硠婕忕殑閭e潡鍐呭瓨鍒嗛厤鐨勫簳灞傛搷浣滅殑鍦版柟浜?濂芥嫍鍙?).
榪欎釜鏃跺欐垜浠埄鐢?"璋冭瘯" –> "閫鍑? ,蹇嵎閿負:"Shift + F11" .
璺沖嚭褰撳墠鍑芥暟..鐒跺悗涓鐩村線"涓?璺?杈硅煩杈規煡鐪嬭皟鐢ㄦ爤.鐩村埌鐪嬪埌浜嗚嚜宸卞啓鐨勪唬鐮?渚嬪鎴戠殑
std::ifstream* origStream = new std::ifstream();
4 .榪欎釜鏃跺欐垜宸茬粡鍙互鍒ゆ柇 origStream 鍒嗛厤浜嗗唴瀛?浣嗘槸娌℃湁鍚堢悊閲婃斁.澶勭悊鍚庡啀嬈¤繍琛屽氨娌℃湁鍑虹幇鍐呭瓨娉勬紡浜?
5.鏈鍚?璁板緱鎶奯CrtSetBreakAlloc(98500); 榪欏彞璇濆垹闄ゆ帀,涓嶇劧姣忔閮芥柇鐐?宀備笉鏄儲姝?.
----------------------------------------------------------------------------------------------------------
鍐欏湪鍚庨潰:
鍏充簬鍐呭瓨娉勬紡媯嫻?鏈変竴涓猇isual Leak Detector ,鎸夌収瀹冪殑浠嬬粛鐨勭‘寰堜笉閿?鍙互鐩存帴鍏蜂綋鍒頒唬鐮佽鎸囧嚭鍐呭瓨娉勬紡,浣嗘槸涓漢浣跨敤浜嗕竴涓?鍙戠幇debug鐨勯熷害澶參浜?涓嶇煡閬撴槸涓嶆槸鎴戜釜浜虹▼搴忕殑闂.......鍍忎笂闈㈢殑娉勬紡,鎴戠敤CrtSetBreakAlloc榪欑綆鍗曠殑鏂規硶灝辮凍澶熶簡....
By: 媧簹浼?/p> 杞嚜錛?a >http://www.cnblogs.com/G_Weber/archive/2009/04/15/1436362.html