锘??xml version="1.0" encoding="utf-8" standalone="yes"?>久久精品国产99,欧美激情免费在线,国产女人水真多18毛片18精品视频http://m.shnenglu.com/Macaulish/category/6380.html鐢ㄦ渶鍒濈殑蹇冨共姘歌繙鐨勪簨錛? qq:396577215 e_mail:fengmin_18@hotmail.comzh-cnTue, 20 May 2008 00:55:10 GMTTue, 20 May 2008 00:55:10 GMT60C++涓笁涓慨楗扮鐨勬繁灞傚墫鏋?/title><link>http://m.shnenglu.com/Macaulish/articles/46215.html</link><dc:creator>fengmin</dc:creator><author>fengmin</author><pubDate>Thu, 03 Apr 2008 14:31:00 GMT</pubDate><guid>http://m.shnenglu.com/Macaulish/articles/46215.html</guid><wfw:comment>http://m.shnenglu.com/Macaulish/comments/46215.html</wfw:comment><comments>http://m.shnenglu.com/Macaulish/articles/46215.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/Macaulish/comments/commentRss/46215.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/Macaulish/services/trackbacks/46215.html</trackback:ping><description><![CDATA[static 鏄痗++涓緢甯哥敤鐨勪慨楗扮錛屽畠琚敤鏉ユ帶鍒跺彉閲忕殑瀛樺偍鏂瑰紡鍜屽彲瑙佹э紝涓嬮潰鎴戝皢浠?static 淇グ絎︾殑浜х敓鍘熷洜銆佷綔鐢ㄨ皥璧鳳紝鍏ㄩ潰鍒嗘瀽static 淇グ絎︾殑瀹炶川銆? <p>銆銆<strong>static 鐨勪袱澶т綔鐢? </strong></p> <p>銆銆涓銆佹帶鍒跺瓨鍌ㄦ柟寮忥細 </p> <p>銆銆static琚紩鍏ヤ互鍛婄煡緙栬瘧鍣紝灝嗗彉閲忓瓨鍌ㄥ湪紼嬪簭鐨勯潤鎬佸瓨鍌ㄥ尯鑰岄潪鏍堜笂絀洪棿銆?</p> <p>銆銆1銆佸紩鍑哄師鍥狅細鍑芥暟鍐呴儴瀹氫箟鐨勫彉閲忥紝鍦ㄧ▼搴忔墽琛屽埌瀹冪殑瀹氫箟澶勬椂錛岀紪璇戝櫒涓哄畠鍦ㄦ爤涓婂垎閰嶇┖闂達紝澶у鐭ラ亾錛屽嚱鏁板湪鏍堜笂鍒嗛厤鐨勭┖闂村湪姝ゅ嚱鏁版墽琛岀粨鏉熸椂浼氶噴鏀炬帀錛岃繖鏍峰氨浜х敓浜嗕竴涓棶棰? 濡傛灉鎯沖皢鍑芥暟涓鍙橀噺鐨勫間繚瀛樿嚦涓嬩竴嬈¤皟鐢ㄦ椂錛屽浣曞疄鐜幫紵 </p> <p>銆銆鏈瀹規槗鎯沖埌鐨勬柟娉曟槸瀹氫箟涓涓叏灞鐨勫彉閲忥紝浣嗗畾涔変負涓涓叏灞鍙橀噺鏈夎澶氱己鐐癸紝鏈鏄庢樉鐨勭己鐐規槸鐮村潖浜嗘鍙橀噺鐨勮闂寖鍥達紙浣垮緱鍦ㄦ鍑芥暟涓畾涔夌殑鍙橀噺錛屼笉浠呬粎鍙楁鍑芥暟鎺у埗錛夈?</p> <p>銆銆2銆?瑙e喅鏂規錛氬洜姝++ 涓紩鍏ヤ簡static錛岀敤瀹冩潵淇グ鍙橀噺錛屽畠鑳藉鎸囩ず緙栬瘧鍣ㄥ皢姝ゅ彉閲忓湪紼嬪簭鐨勯潤鎬佸瓨鍌ㄥ尯鍒嗛厤絀洪棿淇濆瓨錛岃繖鏍峰嵆瀹炵幇浜嗙洰鐨勶紝鍙堜嬌寰楁鍙橀噺鐨勫瓨鍙栬寖鍥翠笉鍙樸?</p> <p>銆銆浜屻佹帶鍒跺彲瑙佹т笌榪炴帴綾誨瀷 : </p> <p>銆銆static榪樻湁涓涓綔鐢紝瀹冧細鎶婂彉閲忕殑鍙鑼冨洿闄愬埗鍦ㄧ紪璇戝崟鍏冧腑錛屼嬌瀹冩垚涓轟竴涓唴閮ㄨ繛鎺ワ紝榪欐椂錛屽畠鐨勫弽涔夎瘝涓?#8221;extern”. </p> <p>銆銆static浣滅敤鍒嗘瀽鎬葷粨錛歴tatic鎬繪槸浣垮緱鍙橀噺鎴栧璞$殑瀛樺偍褰㈠紡鍙樻垚闈欐佸瓨鍌紝榪炴帴鏂瑰紡鍙樻垚鍐呴儴榪炴帴錛屽浜庡眬閮ㄥ彉閲忥紙宸茬粡鏄唴閮ㄨ繛鎺ヤ簡錛夛紝瀹冧粎鏀瑰彉鍏跺瓨鍌ㄦ柟寮忥紱瀵逛簬鍏ㄥ眬鍙橀噺錛堝凡緇忔槸闈欐佸瓨鍌ㄤ簡錛夛紝瀹冧粎鏀瑰彉鍏惰繛鎺ョ被鍨嬨?</p> <p>銆<strong>銆綾諱腑鐨剆tatic鎴愬憳錛?</strong></p> <p>銆銆涓銆佸嚭鐜板師鍥犲強浣滅敤錛?</p> <p>銆銆1銆侀渶瑕佸湪涓涓被鐨勫悇涓璞¢棿浜や簰錛屽嵆闇瑕佷竴涓暟鎹璞′負鏁翠釜綾昏岄潪鏌愪釜瀵硅薄鏈嶅姟銆?</p> <p>銆銆2銆佸悓鏃跺張鍔涙眰涓嶇牬鍧忕被鐨勫皝瑁呮?鍗寵姹傛鎴愬憳闅愯棌鍦ㄧ被鐨勫唴閮紝瀵瑰涓嶅彲瑙併?</p> <p>銆銆綾葷殑static鎴愬憳婊¤凍浜嗕笂榪扮殑瑕佹眰錛屽洜涓哄畠鍏鋒湁濡備笅鐗瑰緛錛氭湁鐙珛鐨勫瓨鍌ㄥ尯錛屽睘浜庢暣涓被銆?</p> <p>銆銆浜屻佹敞鎰忥細 </p> <p>銆銆1銆佸浜庨潤鎬佺殑鏁版嵁鎴愬憳錛岃繛鎺ュ櫒浼氫繚璇佸畠鎷ユ湁涓涓崟涓鐨勫閮ㄥ畾涔夈傞潤鎬佹暟鎹垚鍛樻寜瀹氫箟鍑虹幇鐨勫厛鍚庨『搴忎緷嬈″垵濮嬪寲錛屾敞鎰忛潤鎬佹垚鍛樺祵濂楁椂錛岃淇濊瘉鎵宓屽鐨勬垚鍛樺凡緇忓垵濮嬪寲浜嗐傛秷闄ゆ椂鐨勯『搴忔槸鍒濆鍖栫殑鍙嶉『搴忋?</p> <p>銆銆2銆佺被鐨勯潤鎬佹垚鍛樺嚱鏁版槸灞炰簬鏁翠釜綾昏岄潪綾葷殑瀵硅薄錛屾墍浠ュ畠娌℃湁this鎸囬拡錛岃繖灝卞鑷翠簡瀹冧粎鑳借闂被鐨勯潤鎬佹暟鎹拰闈欐佹垚鍛樺嚱鏁般?</p> <p>銆銆const 鏄痗++涓父鐢ㄧ殑綾誨瀷淇グ絎︼紝浣嗘垜鍦ㄥ伐浣滀腑鍙戠幇錛岃澶氫漢浣跨敤瀹冧粎浠呮槸鎯沖綋鐒跺皵錛岃繖鏍?鏈夋椂涔熶細鐢ㄥ錛屼絾鍦ㄦ煇浜涘井濡欑殑鍦哄悎錛屽彲灝辨病閭d箞騫歌繍浜嗭紝絀跺叾瀹炶川鍘熺敱錛屽ぇ澶氬洜涓烘病鏈夋悶娓呮湰婧愩傛晠鍦ㄦ湰綃囦腑鎴戝皢瀵筩onst榪涜杈ㄦ瀽銆傛函鍏舵湰婧愶紝絀跺叾瀹炶川錛屽笇鏈涜兘瀵瑰ぇ瀹剁悊瑙onst鏈夋墍甯姪錛屾牴鎹濈淮鐨勬壙鎺ュ叧緋伙紝鍒嗕負濡備笅鍑犱釜閮ㄥ垎榪涜闃愯堪銆?</p> <p>銆銆<strong>c++涓負浠涔堜細寮曞叆const </strong></p> <p>銆銆c++鐨勬彁鍑鴻呭綋鍒濇槸鍩轟簬浠涔堟牱鐨勭洰鐨勫紩鍏ワ紙鎴栬呰淇濈暀錛塩onst鍏抽敭瀛楀憿錛燂紝榪欐槸涓涓湁瓚e張鏈夌泭鐨勮瘽棰橈紝瀵圭悊瑙onst寰堟湁甯姪銆?</p> <p>銆銆1錛?澶у鐭ラ亾錛宑++鏈変竴涓被鍨嬩弗鏍肩殑緙栬瘧緋葷粺錛岃繖浣垮緱c++紼嬪簭鐨勯敊璇湪緙栬瘧闃舵鍗沖彲鍙戠幇璁稿錛屼粠鑰屼嬌寰楀嚭閿欑巼澶т負鍑忓皯錛屽洜姝わ紝涔熸垚涓轟簡c++涓巆鐩告瘮錛屾湁鐫紿佸嚭浼樼偣鐨勪竴涓柟闈€?</p> <p>銆銆2錛?c涓緢甯歌鐨勯澶勭悊鎸囦護 #define variablename variablevalue 鍙互寰堟柟渚垮湴榪涜鍊兼浛浠o紝榪欑鍊兼浛浠h嚦灝戝湪涓変釜鏂歸潰浼樼偣紿佸嚭錛?</p> <p>銆銆涓鏄伩鍏嶄簡鎰忎箟妯$硦鐨勬暟瀛楀嚭鐜幫紝浣垮緱紼嬪簭璇箟嫻佺晠娓呮櫚錛屽涓嬩緥錛?<br>銆銆#define user_num_max 107 榪欐牱灝遍伩鍏嶄簡鐩存帴浣跨敤107甯︽潵鐨勫洶鎯戙?</p> <p>銆銆浜屾槸鍙互寰堟柟渚垮湴榪涜鍙傛暟鐨勮皟鏁翠笌淇敼錛屽涓婁緥錛屽綋浜烘暟鐢?07鍙樹負201鏃訛紝榪涙敼鍔ㄦ澶勫嵆鍙紝 </p> <p>銆銆涓夋槸鎻愰珮浜嗙▼搴忕殑鎵ц鏁堢巼錛岀敱浜庝嬌鐢ㄤ簡棰勭紪璇戝櫒榪涜鍊兼浛浠o紝騫朵笉闇瑕佷負榪欎簺甯擱噺鍒嗛厤瀛樺偍絀洪棿錛屾墍浠ユ墽琛岀殑鏁堢巼杈冮珮銆?</p> <p>銆銆閴翠簬浠ヤ笂鐨勪紭鐐癸紝榪欑棰勫畾涔夋寚浠ょ殑浣跨敤鍦ㄧ▼搴忎腑闅忓鍙銆?</p> <p>銆銆3錛?璇村埌榪欓噷錛屽ぇ瀹跺彲鑳戒細榪鋒儜涓婅堪鐨?鐐廣?鐐逛笌const鏈変粈涔堝叧緋誨憿?,濂斤紝璇鋒帴鐫鍚戜笅鐪嬶細 </p> <p>銆銆棰勫鐞嗚鍙ヨ櫧鐒舵湁浠ヤ笂鐨勮澶氫紭鐐癸紝浣嗗畠鏈変釜姣旇緝鑷村懡鐨勭己鐐癸紝鍗籌紝棰勫鐞嗚鍙ヤ粎浠呭彧鏄畝鍗曞兼浛浠o紝緙轟箯綾誨瀷鐨勬嫻嬫満鍒躲傝繖鏍烽澶勭悊璇彞灝變笉鑳戒韓鍙梒++涓ユ牸綾誨瀷媯鏌ョ殑濂藉錛屼粠鑰屽彲鑳芥垚涓哄紩鍙戜竴緋誨垪閿欒鐨勯殣鎮c?</p> <p>銆銆4錛庡ソ浜嗭紝絎竴闃舵緇撹鍑烘潵浜嗭細 </p> <p>銆銆緇撹錛?const 鎺ㄥ嚭鐨勫垵濮嬬洰鐨勶紝姝f槸涓轟簡鍙栦唬棰勭紪璇戞寚浠わ紝娑堥櫎瀹冪殑緙虹偣錛屽悓鏃剁戶鎵垮畠鐨勪紭鐐廣?</p> <p>銆銆鐜板湪瀹冪殑褰㈠紡鍙樻垚浜嗭細 </p> <p>const datatype variablename = variablevalue ; </p> <p>銆銆<strong>涓轟粈涔坈onst鑳藉緢濂藉湴鍙栦唬棰勫畾涔夎鍙ワ紵 </strong></p> <p>銆銆const 鍒板簳鏈変粈涔堝ぇ紲為氾紝浣垮畠鍙互鎸噦涓鎸ュ彇浠i瀹氫箟璇彞鍛紵 </p> <p>銆銆1錛?棣栧厛錛屼互const 淇グ鐨勫父閲忓鹼紝鍏鋒湁涓嶅彲鍙樻э紝榪欐槸瀹冭兘鍙栦唬棰勫畾涔夎鍙ョ殑鍩虹銆?</p> <p>銆銆2錛?絎簩錛屽緢鏄庢樉錛屽畠涔熷悓鏍峰彲浠ラ伩鍏嶆剰涔夋ā緋婄殑鏁板瓧鍑虹幇錛屽悓鏍峰彲浠ュ緢鏂逛究鍦拌繘琛屽弬鏁扮殑璋冩暣鍜屼慨鏀廣?</p> <p>銆銆3錛?絎笁錛宑++鐨勭紪璇戝櫒閫氬父涓嶄負鏅歝onst甯擱噺鍒嗛厤瀛樺偍絀洪棿錛岃屾槸灝嗗畠浠繚瀛樺湪絎﹀彿琛ㄤ腑錛岃繖浣垮緱瀹冩垚涓轟竴涓紪璇戞湡闂寸殑甯擱噺錛屾病鏈変簡瀛樺偍涓庤鍐呭瓨鐨勬搷浣滐紝浣垮緱瀹冪殑鏁堢巼涔熷緢楂橈紝鍚屾椂錛岃繖涔熸槸瀹冨彇浠i瀹氫箟璇彞鐨勯噸瑕佸熀紜銆傝繖閲岋紝鎴戣鎻愪竴涓嬶紝涓轟粈涔堣榪欎竴鐐規槸涔熸槸瀹冭兘鍙栦唬棰勫畾涔夎鍙ョ殑鍩虹錛岃繖鏄洜涓猴紝緙栬瘧鍣ㄤ笉浼氬幓璇誨瓨鍌ㄧ殑鍐呭錛屽鏋滅紪璇戝櫒涓篶onst鍒嗛厤浜嗗瓨鍌ㄧ┖闂達紝瀹冨氨涓嶈兘澶熸垚涓轟竴涓紪璇戞湡闂寸殑甯擱噺浜嗐?</p> <p>銆銆4錛?鏈鍚庯紝const瀹氫箟涔熷儚涓涓櫘閫氱殑鍙橀噺瀹氫箟涓鏍鳳紝瀹冧細鐢辯紪璇戝櫒瀵瑰畠榪涜綾誨瀷鐨勬嫻嬶紝娑堥櫎浜嗛瀹氫箟璇彞鐨勯殣鎮c?</p> <p>銆銆<strong>const 浣跨敤鎯呭喌鍒嗙被璇︽瀽 </strong></p> <p>銆銆1.const 鐢ㄤ簬鎸囬拡鐨勪袱縐嶆儏鍐靛垎鏋愶細 </p> <p>銆銆int const *a; 銆file://a鍙彉錛?a涓嶅彲鍙?<br>銆銆int *const a; 銆file://a涓嶅彲鍙橈紝*a鍙彉 </p> <p>銆銆鍒嗘瀽錛歝onst 鏄竴涓乏緇撳悎鐨勭被鍨嬩慨楗扮錛屽畠涓庡叾宸︿晶鐨勭被鍨嬩慨楗扮鍜屼負涓涓被鍨嬩慨楗扮錛屾墍浠ワ紝int const 闄愬畾 *a,涓嶉檺瀹歛銆俰nt *const 闄愬畾a,涓嶉檺瀹?a銆?</p> <p>銆銆2.const 闄愬畾鍑芥暟鐨勪紶閫掑煎弬鏁幫細 </p> <p>銆銆void fun(const int var); </p> <p>銆銆鍒嗘瀽錛氫笂榪板啓娉曢檺瀹氬弬鏁板湪鍑芥暟浣撲腑涓嶅彲琚敼鍙樸傜敱鍊間紶閫掔殑鐗圭偣鍙煡錛寁ar鍦ㄥ嚱鏁頒綋涓殑鏀瑰彉涓嶄細褰卞搷鍒板嚱鏁板閮ㄣ傛墍浠ワ紝姝ら檺瀹氫笌鍑芥暟鐨勪嬌鐢ㄨ呮棤鍏籌紝浠呬笌鍑芥暟鐨勭紪鍐欒呮湁鍏熾?</p> <p>銆銆緇撹錛氭渶濂藉湪鍑芥暟鐨勫唴閮ㄨ繘琛岄檺瀹氾紝瀵瑰閮ㄨ皟鐢ㄨ呭睆钄斤紝浠ュ厤寮曡搗鍥版儜銆傚鍙敼鍐欏涓嬶細 </p> <p>銆銆void fun(int var){ <br>銆銆const int & varalias = var; </p> <p>銆銆varalias .... </p> <p>銆銆..... </p> <p>銆銆} </p> <p>銆銆3.const 闄愬畾鍑芥暟鐨勫煎瀷榪斿洖鍊鹼細 </p> <p>銆銆const int fun1(); </p> <p>銆銆const myclass fun2(); </p> <p>銆銆鍒嗘瀽:涓婅堪鍐欐硶闄愬畾鍑芥暟鐨勮繑鍥炲間笉鍙鏇存柊錛屽綋鍑芥暟榪斿洖鍐呴儴鐨勭被鍨嬫椂錛堝fun1錛夛紝宸茬粡鏄竴涓暟鍊鹼紝褰撶劧涓嶅彲琚祴鍊兼洿鏂幫紝鎵浠ワ紝姝ゆ椂const鏃犳剰涔夛紝鏈濂藉幓鎺夛紝浠ュ厤鍥版儜銆傚綋鍑芥暟榪斿洖鑷畾涔夌殑綾誨瀷鏃訛紙濡俧un2錛夛紝榪欎釜綾誨瀷浠嶇劧鍖呭惈鍙互琚祴鍊肩殑鍙橀噺鎴愬憳錛屾墍浠ワ紝姝ゆ椂鏈夋剰涔夈?</p> <p>銆銆4. 浼犻掍笌榪斿洖鍦板潃錛?姝ょ鎯呭喌鏈涓哄父瑙侊紝鐢卞湴鍧鍙橀噺鐨勭壒鐐瑰彲鐭ワ紝閫傚綋浣跨敤const錛屾剰涔夋槶鐒躲?</p> <p>銆銆5.銆const 闄愬畾綾葷殑鎴愬憳鍑芥暟錛?</p> <p>銆銆class classname { </p> <p>銆銆public: </p> <p>銆銆int fun() const; </p> <p>銆銆..... </p> <p>銆銆} </p> <p>銆銆娉ㄦ剰錛氶噰鐢ㄦ縐峜onst 鍚庣疆鐨勫艦寮忔槸涓縐嶈瀹氾紝浜︿負浜嗕笉寮曡搗娣鋒穯銆傚湪姝ゅ嚱鏁扮殑澹版槑涓拰瀹氫箟涓潎瑕佷嬌鐢╟onst,鍥犱負const宸茬粡鎴愪負綾誨瀷淇℃伅鐨勪竴閮ㄥ垎銆?</p> <p>銆銆鑾峰緱鑳藉姏錛氬彲浠ユ搷浣滃父閲忓璞°?</p> <p>銆銆澶卞幓鑳藉姏錛氫笉鑳戒慨鏀圭被鐨勬暟鎹垚鍛橈紝涓嶈兘鍦ㄥ嚱鏁頒腑璋冪敤鍏朵粬涓嶆槸const鐨勫嚱鏁般?</p> <p>銆銆鍦ㄦ湰鏂囦腑錛宑onst鏂歸潰鐨勭煡璇嗘垜璁茬殑涓嶅錛屽洜涓烘垜涓嶆兂鎶婂畠鍙樻垚涓鏈琧++鐨勬暀縐戜功銆傛垜鍙槸鎯寵緇嗗湴闃愯堪瀹冪殑瀹炶川鍜岀敤澶? 鎴戜細灝介噺璇寸殑寰堣緇嗭紝鍥犱負鎴戝笇鏈涘湪涓縐嶅緢杞繪澗闅忔剰鐨勬皵姘涗腑璇村嚭鑷繁鐨勬煇浜涙兂娉曪紝姣曠珶錛岀紪紼嬩篃鏄交鏉撅紝蹇箰浜虹敓鐨勪竴閮ㄥ垎銆傛湁鏃跺欙紝浣犱細鎯婂徆榪欏叾涓殑涓栫晫鍘熸潵鏄姝ょ殑綺劇編銆?<br>銆銆鍦ㄥ墠闈㈣皥浜哻onst鍚庯紝鐜板湪鍐嶆潵璋堜竴涓媔nline榪欎釜鍏抽敭瀛楋紝涔嬫墍浠ユ妸榪欎釜闂鏀懼湪榪欎釜浣嶇疆,鏄洜涓篿nline榪欎釜鍏抽敭瀛楃殑寮曞叆鍘熷洜鍜宑onst鍗佸垎鐩鎬技錛屼笅闈㈠垎涓哄涓嬪嚑涓儴鍒嗚繘琛岄槓榪般?</p> <p>銆銆c++涓紩鍏nline鍏抽敭瀛楃殑鍘熷洜: </p> <p>銆銆inline 鍏抽敭瀛楃敤鏉ュ畾涔変竴涓被鐨勫唴鑱斿嚱鏁幫紝寮曞叆瀹冪殑涓昏鍘熷洜鏄敤瀹冩浛浠涓〃杈懼紡褰㈠紡鐨勫畯瀹氫箟銆?</p> <p>銆銆琛ㄨ揪寮忓艦寮忕殑瀹忓畾涔変竴渚嬶細 </p> <p>銆銆銆#define expressionname(var1,var2) (var1+var2)*(var1-var2) </p> <p>銆銆涓轟粈涔堣鍙栦唬榪欑褰㈠紡鍛紝涓斿惉鎴戦亾鏉ワ細 </p> <p>銆銆1錛?棣栧厛璋堜竴涓嬪湪c涓嬌鐢ㄨ繖縐嶅艦寮忓畯瀹氫箟鐨勫師鍥狅紝c璇█鏄竴涓晥鐜囧緢楂樼殑璇█錛岃繖縐嶅畯瀹氫箟鍦ㄥ艦寮忓強浣跨敤涓婂儚涓涓嚱鏁幫紝浣嗗畠浣跨敤棰勫鐞嗗櫒瀹炵幇錛屾病鏈変簡鍙傛暟鍘嬫爤錛屼唬鐮佺敓鎴愮瓑涓緋誨垪鐨勬搷浣?鍥犳錛屾晥鐜囧緢楂橈紝榪欐槸瀹冨湪c涓浣跨敤鐨勪竴涓富瑕佸師鍥犮?</p> <p>銆銆2錛?榪欑瀹忓畾涔夊湪褰㈠紡涓婄被浼間簬涓涓嚱鏁幫紝浣嗗湪浣跨敤瀹冩椂錛屼粎浠呭彧鏄仛棰勫鐞嗗櫒絎﹀彿琛ㄤ腑鐨勭畝鍗曟浛鎹紝鍥犳瀹冧笉鑳借繘琛屽弬鏁版湁鏁堟х殑媯嫻嬶紝涔熷氨涓嶈兘浜彈c++緙栬瘧鍣ㄤ弗鏍肩被鍨嬫鏌ョ殑濂藉錛屽彟澶栧畠鐨勮繑鍥炲間篃涓嶈兘琚己鍒惰漿鎹負鍙漿鎹㈢殑鍚堥傜殑綾誨瀷錛岃繖鏍鳳紝瀹冪殑浣跨敤灝卞瓨鍦ㄧ潃涓緋誨垪鐨勯殣鎮e拰灞闄愭с?</p> <p>銆銆3錛?鍦╟++涓紩鍏ヤ簡綾誨強綾葷殑璁塊棶鎺у埗錛岃繖鏍鳳紝濡傛灉涓涓搷浣滄垨鑰呰涓涓〃杈懼紡娑夊強鍒扮被鐨勪繚鎶ゆ垚鍛樻垨縐佹湁鎴愬憳錛屼綘灝變笉鍙兘浣跨敤榪欑瀹忓畾涔夋潵瀹炵幇(鍥犱負鏃犳硶灝唗his鎸囬拡鏀懼湪鍚堥傜殑浣嶇疆)銆?</p> <p>銆銆4錛?inline 鎺ㄥ嚭鐨勭洰鐨勶紝涔熸鏄負浜嗗彇浠h繖縐嶈〃杈懼紡褰㈠紡鐨勫畯瀹氫箟錛屽畠娑堥櫎浜嗗畠鐨勭己鐐癸紝鍚屾椂鍙堝緢濂藉湴緇ф壙浜嗗畠鐨勪紭鐐廣?</p> <p>銆銆涓轟粈涔坕nline鑳藉緢濂藉湴鍙栦唬琛ㄨ揪寮忓艦寮忕殑棰勫畾涔夊憿錛?</p> <p>銆銆瀵瑰簲浜庝笂闈㈢殑1-3鐐癸紝闃愯堪濡備笅錛?</p> <p>銆銆1錛?inline 瀹氫箟鐨勭被鐨勫唴鑱斿嚱鏁幫紝鍑芥暟鐨勪唬鐮佽鏀懼叆絎﹀彿琛ㄤ腑錛屽湪浣跨敤鏃剁洿鎺ヨ繘琛屾浛鎹紝錛堝儚瀹忎竴鏍峰睍寮錛夛紝娌℃湁浜嗚皟鐢ㄧ殑寮閿錛屾晥鐜囦篃寰堥珮銆?</p> <p>銆銆2錛?寰堟槑鏄撅紝綾葷殑鍐呰仈鍑芥暟涔熸槸涓涓湡姝g殑鍑芥暟錛岀紪璇戝櫒鍦ㄨ皟鐢ㄤ竴涓唴鑱斿嚱鏁版椂錛屼細棣栧厛媯鏌ュ畠鐨勫弬鏁扮殑綾誨瀷錛屼繚璇佽皟鐢ㄦ紜傜劧鍚庤繘琛屼竴緋誨垪鐨勭浉鍏蟲鏌ワ紝灝卞儚瀵瑰緟浠諱綍涓涓湡姝g殑鍑芥暟涓鏍楓傝繖鏍峰氨娑堥櫎浜嗗畠鐨勯殣鎮e拰灞闄愭с?</p> <p>銆銆3錛?inline 鍙互浣滀負鏌愪釜綾葷殑鎴愬憳鍑芥暟錛屽綋鐒跺氨鍙互鍦ㄥ叾涓嬌鐢ㄦ墍鍦ㄧ被鐨勪繚鎶ゆ垚鍛樺強縐佹湁鎴愬憳銆?<br>鍦ㄤ綍鏃朵嬌鐢╥nline鍑芥暟錛?</p> <p>銆銆棣栧厛錛屼綘鍙互浣跨敤inline鍑芥暟瀹屽叏鍙栦唬琛ㄨ揪寮忓艦寮忕殑瀹忓畾涔夈?</p> <p>銆銆鍙﹀瑕佹敞鎰忥紝鍐呰仈鍑芥暟涓鑸彧浼氱敤鍦ㄥ嚱鏁板唴瀹歸潪甯哥畝鍗曠殑鏃跺欙紝榪欐槸鍥犱負錛屽唴鑱斿嚱鏁扮殑浠g爜浼氬湪浠諱綍璋冪敤瀹冪殑鍦版柟灞曞紑錛屽鏋滃嚱鏁板お澶嶆潅錛屼唬鐮佽啫鑳甯︽潵鐨勬伓鏋滃緢鍙兘浼氬ぇ浜庢晥鐜囩殑鎻愰珮甯︽潵鐨勭泭澶勩?鍐呰仈鍑芥暟鏈閲嶈鐨勪嬌鐢ㄥ湴鏂規槸鐢ㄤ簬綾葷殑瀛樺彇鍑芥暟銆?</p> <p>銆銆濡備綍浣跨敤綾葷殑inline鍑芥暟錛?</p> <p>銆銆綆鍗曟彁涓涓媔nline 鐨勪嬌鐢ㄥ惂錛?</p> <p>銆銆1.鍦ㄧ被涓畾涔夎繖縐嶅嚱鏁幫細 </p> <p>銆銆class classname{ </p> <p>銆銆..... </p> <p>銆銆.... </p> <p>銆銆getwidth(){return m_lpicwidth;}; // 濡傛灉鍦ㄧ被涓洿鎺ュ畾涔夛紝鍙互涓嶄嬌鐢╥nline淇グ </p> <p>銆銆.... </p> <p>銆銆.... </p> <p>銆銆} </p> <p>銆銆2.鍦ㄧ被涓0鏄庯紝鍦ㄧ被澶栧畾涔? </p> <p>銆銆class classname{ </p> <p>銆銆..... </p> <p>銆銆.... </p> <p>銆銆getwidth(); // 濡傛灉鍦ㄧ被涓洿鎺ュ畾涔夛紝鍙互涓嶄嬌鐢╥nline淇グ </p> <p>銆銆.... </p> <p>銆銆.... </p> <p>銆銆} </p> <p>銆銆inline getwidth(){ </p> <p>銆銆return m_lpicwidth; </p> <p>銆銆} </p> <p>銆銆鍦ㄦ湰鏂囦腑錛岃皥浜嗕竴縐嶇壒孌婄殑鍑芥暟錛岀被鐨刬nline鍑芥暟錛屽畠鐨勬簮璧峰拰鐗圭偣鍦ㄦ煇縐嶈娉曚笂涓巆onst寰堢被浼鹼紝鍙互涓巆onst鎼厤璧鋒潵鐪嬨?/p> <img src ="http://m.shnenglu.com/Macaulish/aggbug/46215.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/Macaulish/" target="_blank">fengmin</a> 2008-04-03 22:31 <a href="http://m.shnenglu.com/Macaulish/articles/46215.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>嫻呰皥鍐呭瓨娉勬紡(杞澆)http://m.shnenglu.com/Macaulish/articles/46214.htmlfengminfengminThu, 03 Apr 2008 14:28:00 GMThttp://m.shnenglu.com/Macaulish/articles/46214.htmlhttp://m.shnenglu.com/Macaulish/comments/46214.htmlhttp://m.shnenglu.com/Macaulish/articles/46214.html#Feedback0http://m.shnenglu.com/Macaulish/comments/commentRss/46214.htmlhttp://m.shnenglu.com/Macaulish/services/trackbacks/46214.html
鍐呭瓨娉勬紡鐨勫畾涔?
銆銆涓鑸垜浠父璇寸殑鍐呭瓨娉勬紡鏄寚鍫嗗唴瀛樼殑娉勬紡銆傚爢鍐呭瓨鏄寚紼嬪簭浠庡爢涓垎閰嶇殑錛屽ぇ灝忎換鎰忕殑錛堝唴瀛樺潡鐨勫ぇ灝忓彲浠ュ湪紼嬪簭榪愯鏈熷喅瀹氾級錛屼嬌鐢ㄥ畬鍚庡繀欏繪樉紺洪噴鏀劇殑鍐呭瓨銆傚簲鐢ㄧ▼搴忎竴鑸嬌鐢╩alloc錛宺ealloc錛宯ew絳夊嚱鏁頒粠鍫嗕腑鍒嗛厤鍒頒竴鍧楀唴瀛橈紝浣跨敤瀹屽悗錛岀▼搴忓繀欏昏礋璐g浉搴旂殑璋冪敤free鎴杁elete閲婃斁璇ュ唴瀛樺潡錛屽惁鍒欙紝榪欏潡鍐呭瓨灝變笉鑳借鍐嶆浣跨敤錛屾垜浠氨璇磋繖鍧楀唴瀛樻硠婕忎簡銆備互涓嬭繖孌靛皬紼嬪簭婕旂ず浜嗗爢鍐呭瓨鍙戠敓娉勬紡鐨勬儏褰細

void MyFunction(int nSize)
{
char* p= new char[nSize];
if( !GetStringFrom( p, nSize ) ){
MessageBox(“Error”);
return;
}
…//using the string pointed by p;
delete p;
}


銆銆褰撳嚱鏁癎etStringFrom()榪斿洖闆剁殑鏃跺欙紝鎸囬拡p鎸囧悜鐨勫唴瀛樺氨涓嶄細琚噴鏀俱傝繖鏄竴縐嶅父瑙佺殑鍙戠敓鍐呭瓨娉勬紡鐨勬儏褰€傜▼搴忓湪鍏ュ彛澶勫垎閰嶅唴瀛橈紝鍦ㄥ嚭鍙e閲婃斁鍐呭瓨錛屼絾鏄痗鍑芥暟鍙互鍦ㄤ換浣曞湴鏂歸鍑猴紝鎵浠ヤ竴鏃︽湁鏌愪釜鍑哄彛澶勬病鏈夐噴鏀懼簲璇ラ噴鏀劇殑鍐呭瓨錛屽氨浼氬彂鐢熷唴瀛樻硠婕忋?
騫夸箟鐨勮錛屽唴瀛樻硠婕忎笉浠呬粎鍖呭惈鍫嗗唴瀛樼殑娉勬紡錛岃繕鍖呭惈緋葷粺璧勬簮鐨勬硠婕?resource leak)錛屾瘮濡傛牳蹇冩丠ANDLE錛孏DI Object錛孲OCKET錛孖nterface絳夛紝浠庢牴鏈笂璇磋繖浜涚敱鎿嶄綔緋葷粺鍒嗛厤鐨勫璞′篃娑堣楀唴瀛橈紝濡傛灉榪欎簺瀵硅薄鍙戠敓娉勬紡鏈緇堜篃浼氬鑷村唴瀛樼殑娉勬紡銆傝屼笖錛屾煇浜涘璞℃秷鑰楃殑鏄牳蹇冩佸唴瀛橈紝榪欎簺瀵硅薄涓ラ噸娉勬紡鏃朵細瀵艱嚧鏁翠釜鎿嶄綔緋葷粺涓嶇ǔ瀹氥傛墍浠ョ浉姣斾箣涓嬶紝緋葷粺璧勬簮鐨勬硠婕忔瘮鍫嗗唴瀛樼殑娉勬紡鏇翠負涓ラ噸銆?
銆銆GDI Object鐨勬硠婕忔槸涓縐嶅父瑙佺殑璧勬簮娉勬紡錛?

void CMyView::OnPaint( CDC* pDC )
{
CBitmap bmp;
CBitmap* pOldBmp;
bmp.LoadBitmap(IDB_MYBMP);
pOldBmp = pDC->SelectObject( &bmp );

if( Something() ){
return;
}
pDC->SelectObject( pOldBmp );
return;
}

銆銆褰撳嚱鏁癝omething()榪斿洖闈為浂鐨勬椂鍊欙紝紼嬪簭鍦ㄩ鍑哄墠娌℃湁鎶妏OldBmp閫夊洖pDC涓紝榪欎細瀵艱嚧pOldBmp鎸囧悜鐨凥BITMAP瀵硅薄鍙戠敓娉勬紡銆傝繖涓▼搴忓鏋滈暱鏃墮棿鐨勮繍琛岋紝鍙兘浼氬鑷存暣涓郴緇熻姳灞忋傝繖縐嶉棶棰樺湪Win9x涓嬫瘮杈冨鏄撴毚闇插嚭鏉ワ紝鍥犱負Win9x鐨凣DI鍫嗘瘮Win2k鎴朜T鐨勮灝忓緢澶氥?
鍐呭瓨娉勬紡鐨勫彂鐢熸柟寮忥細
銆銆浠ュ彂鐢熺殑鏂瑰紡鏉ュ垎綾伙紝鍐呭瓨娉勬紡鍙互鍒嗕負4綾伙細
銆銆1. 甯稿彂鎬у唴瀛樻硠婕忋傚彂鐢熷唴瀛樻硠婕忕殑浠g爜浼氳澶氭鎵ц鍒幫紝姣忔琚墽琛岀殑鏃跺欓兘浼氬鑷翠竴鍧楀唴瀛樻硠婕忋傛瘮濡備緥浜岋紝濡傛灉Something()鍑芥暟涓鐩磋繑鍥濼rue錛岄偅涔坧OldBmp鎸囧悜鐨凥BITMAP瀵硅薄鎬繪槸鍙戠敓娉勬紡銆?
銆銆2. 鍋跺彂鎬у唴瀛樻硠婕忋傚彂鐢熷唴瀛樻硠婕忕殑浠g爜鍙湁鍦ㄦ煇浜涚壒瀹氱幆澧冩垨鎿嶄綔榪囩▼涓嬫墠浼氬彂鐢熴傛瘮濡備緥浜岋紝濡傛灉Something()鍑芥暟鍙湁鍦ㄧ壒瀹氱幆澧冧笅鎵嶈繑鍥濼rue錛岄偅涔坧OldBmp鎸囧悜鐨凥BITMAP瀵硅薄騫朵笉鎬繪槸鍙戠敓娉勬紡銆傚父鍙戞у拰鍋跺彂鎬ф槸鐩稿鐨勩傚浜庣壒瀹氱殑鐜錛屽伓鍙戞х殑涔熻灝卞彉鎴愪簡甯稿彂鎬х殑銆傛墍浠ユ祴璇曠幆澧冨拰嫻嬭瘯鏂規硶瀵規嫻嬪唴瀛樻硠婕忚嚦鍏抽噸瑕併?
銆銆3. 涓嬈℃у唴瀛樻硠婕忋傚彂鐢熷唴瀛樻硠婕忕殑浠g爜鍙細琚墽琛屼竴嬈★紝鎴栬呯敱浜庣畻娉曚笂鐨勭己闄鳳紝瀵艱嚧鎬諱細鏈変竴鍧椾粎涓斾竴鍧楀唴瀛樺彂鐢熸硠婕忋傛瘮濡傦紝鍦ㄧ被鐨勬瀯閫犲嚱鏁頒腑鍒嗛厤鍐呭瓨錛屽湪鏋愭瀯鍑芥暟涓嵈娌℃湁閲婃斁璇ュ唴瀛橈紝浣嗘槸鍥犱負榪欎釜綾繪槸涓涓猄ingleton錛屾墍浠ュ唴瀛樻硠婕忓彧浼氬彂鐢熶竴嬈°傚彟涓涓緥瀛愶細

char* g_lpszFileName = NULL;
void SetFileName( const char* lpcszFileName )
{
if( g_lpszFileName ){
free( g_lpszFileName );
}
g_lpszFileName = strdup( lpcszFileName );
}


銆銆濡傛灉紼嬪簭鍦ㄧ粨鏉熺殑鏃跺欐病鏈夐噴鏀緂_lpszFileName鎸囧悜鐨勫瓧絎︿覆錛岄偅涔堬紝鍗充嬌澶氭璋冪敤SetFileName()錛屾諱細鏈変竴鍧楀唴瀛橈紝鑰屼笖浠呮湁涓鍧楀唴瀛樺彂鐢熸硠婕忋?
銆銆4. 闅愬紡鍐呭瓨娉勬紡銆傜▼搴忓湪榪愯榪囩▼涓笉鍋滅殑鍒嗛厤鍐呭瓨錛屼絾鏄洿鍒扮粨鏉熺殑鏃跺欐墠閲婃斁鍐呭瓨銆備弗鏍肩殑璇磋繖閲屽茍娌℃湁鍙戠敓鍐呭瓨娉勬紡錛屽洜涓烘渶緇堢▼搴忛噴鏀句簡鎵鏈夌敵璇風殑鍐呭瓨銆備絾鏄浜庝竴涓湇鍔″櫒紼嬪簭錛岄渶瑕佽繍琛屽嚑澶╋紝鍑犲懆鐢氳嚦鍑犱釜鏈堬紝涓嶅強鏃墮噴鏀懼唴瀛樹篃鍙兘瀵艱嚧鏈緇堣楀敖緋葷粺鐨勬墍鏈夊唴瀛樸傛墍浠ワ紝鎴戜滑縐拌繖綾誨唴瀛樻硠婕忎負闅愬紡鍐呭瓨娉勬紡銆備婦涓涓緥瀛愶細

class Connection
{
public:
Connection( SOCKET s);
~Connection();

private:
SOCKET _socket;

};
class ConnectionManager
{
public:
ConnectionManager(){
}
~ConnectionManager(){
list<Connection>::iterator it;
for( it = _connlist.begin(); it != _connlist.end(); ++it ){
delete 錛?it錛?
}
_connlist.clear();
}
void OnClientConnected( SOCKET s ){
Connection* p = new Connection(s);
_connlist.push_back(p);
}
void OnClientDisconnected( Connection* pconn ){
_connlist.remove( pconn );
delete pconn;
}
private:
list<Connection*> _connlist;
};


銆銆鍋囪鍦–lient浠嶴erver绔柇寮鍚庯紝Server騫舵病鏈夊懠鍙玂nClientDisconnected()鍑芥暟錛岄偅涔堜唬琛ㄩ偅嬈¤繛鎺ョ殑Connection瀵硅薄灝變笉浼氳鍙婃椂鐨勫垹闄わ紙鍦⊿erver紼嬪簭閫鍑虹殑鏃跺欙紝鎵鏈塁onnection瀵硅薄浼氬湪ConnectionManager鐨勬瀽鏋勫嚱鏁伴噷琚垹闄わ級銆傚綋涓嶆柇鐨勬湁榪炴帴寤虹珛銆佹柇寮鏃墮殣寮忓唴瀛樻硠婕忓氨鍙戠敓浜嗐?
銆銆浠庣敤鎴蜂嬌鐢ㄧ▼搴忕殑瑙掑害鏉ョ湅錛屽唴瀛樻硠婕忔湰韜笉浼氫駭鐢熶粈涔堝嵄瀹籌紝浣滀負涓鑸殑鐢ㄦ埛錛屾牴鏈劅瑙変笉鍒板唴瀛樻硠婕忕殑瀛樺湪銆傜湡姝f湁鍗卞鐨勬槸鍐呭瓨娉勬紡鐨勫爢縐紝榪欎細鏈緇堟秷鑰楀敖緋葷粺鎵鏈夌殑鍐呭瓨銆備粠榪欎釜瑙掑害鏉ヨ錛屼竴嬈℃у唴瀛樻硠婕忓茍娌℃湁浠涔堝嵄瀹籌紝鍥犱負瀹冧笉浼氬爢縐紝鑰岄殣寮忓唴瀛樻硠婕忓嵄瀹蟲у垯闈炲父澶э紝鍥犱負杈冧箣浜庡父鍙戞у拰鍋跺彂鎬у唴瀛樻硠婕忓畠鏇撮毦琚嫻嬪埌銆?/p> 媯嫻嬪唴瀛樻硠婕忥細

銆銆媯嫻嬪唴瀛樻硠婕忕殑鍏抽敭鏄鑳芥埅鑾蜂綇瀵瑰垎閰嶅唴瀛樺拰閲婃斁鍐呭瓨鐨勫嚱鏁扮殑璋冪敤銆傛埅鑾蜂綇榪欎袱涓嚱鏁幫紝鎴戜滑灝辮兘璺熻釜姣忎竴鍧楀唴瀛樼殑鐢熷懡鍛ㄦ湡錛屾瘮濡傦紝姣忓綋鎴愬姛鐨勫垎閰嶄竴鍧楀唴瀛樺悗錛屽氨鎶婂畠鐨勬寚閽堝姞鍏ヤ竴涓叏灞鐨刲ist涓紱姣忓綋閲婃斁涓鍧楀唴瀛橈紝鍐嶆妸瀹冪殑鎸囬拡浠巐ist涓垹闄ゃ傝繖鏍鳳紝褰撶▼搴忕粨鏉熺殑鏃跺欙紝list涓墿浣欑殑鎸囬拡灝辨槸鎸囧悜閭d簺娌℃湁琚噴鏀劇殑鍐呭瓨銆傝繖閲屽彧鏄畝鍗曠殑鎻忚堪浜嗘嫻嬪唴瀛樻硠婕忕殑鍩烘湰鍘熺悊錛岃緇嗙殑綆楁硶鍙互鍙傝Steve Maguire鐨?lt;<Writing Solid Code>>銆?
銆銆濡傛灉瑕佹嫻嬪爢鍐呭瓨鐨勬硠婕忥紝閭d箞闇瑕佹埅鑾蜂綇malloc/realloc/free鍜宯ew/delete灝卞彲浠ヤ簡錛堝叾瀹瀗ew/delete鏈緇堜篃鏄敤malloc/free鐨勶紝鎵浠ュ彧瑕佹埅鑾峰墠闈竴緇勫嵆鍙級銆傚浜庡叾浠栫殑娉勬紡錛屽彲浠ラ噰鐢ㄧ被浼肩殑鏂規硶錛屾埅鑾蜂綇鐩稿簲鐨勫垎閰嶅拰閲婃斁鍑芥暟銆傛瘮濡傦紝瑕佹嫻婤STR鐨勬硠婕忥紝灝遍渶瑕佹埅鑾稴ysAllocString/SysFreeString錛涜媯嫻婬MENU鐨勬硠婕忥紝灝遍渶瑕佹埅鑾稢reateMenu/ DestroyMenu銆傦紙鏈夌殑璧勬簮鐨勫垎閰嶅嚱鏁版湁澶氫釜錛岄噴鏀懼嚱鏁板彧鏈変竴涓紝姣斿錛孲ysAllocStringLen涔熷彲浠ョ敤鏉ュ垎閰岯STR錛岃繖鏃跺氨闇瑕佹埅鑾峰涓垎閰嶅嚱鏁幫級
銆銆鍦╓indows騫沖彴涓嬶紝媯嫻嬪唴瀛樻硠婕忕殑宸ュ叿甯哥敤鐨勪竴鑸湁涓夌錛孧S C-Runtime Library鍐呭緩鐨勬嫻嬪姛鑳斤紱澶栨寕寮忕殑媯嫻嬪伐鍏鳳紝璇稿錛孭urify錛孊oundsChecker絳夛紱鍒╃敤Windows NT鑷甫鐨凱erformance Monitor銆傝繖涓夌宸ュ叿鍚勬湁浼樼己鐐癸紝MS C-Runtime Library铏界劧鍔熻兘涓婅緝涔嬪鎸傚紡鐨勫伐鍏瘋寮憋紝浣嗘槸瀹冩槸鍏嶈垂鐨勶紱Performance Monitor铏界劧鏃犳硶鏍囩ず鍑哄彂鐢熼棶棰樼殑浠g爜錛屼絾鏄畠鑳芥嫻嬪嚭闅愬紡鐨勫唴瀛樻硠婕忕殑瀛樺湪錛岃繖鏄叾浠栦袱綾誨伐鍏鋒棤鑳戒負鍔涚殑鍦版柟銆?
銆銆浠ヤ笅鎴戜滑璇︾粏璁ㄨ榪欎笁縐嶆嫻嬪伐鍏鳳細


VC涓嬪唴瀛樻硠婕忕殑媯嫻嬫柟娉?

銆銆鐢∕FC寮鍙戠殑搴旂敤紼嬪簭錛屽湪DEBUG鐗堟ā寮忎笅緙栬瘧鍚庯紝閮戒細鑷姩鍔犲叆鍐呭瓨娉勬紡鐨勬嫻嬩唬鐮併傚湪紼嬪簭緇撴潫鍚庯紝濡傛灉鍙戠敓浜嗗唴瀛樻硠婕忥紝鍦―ebug紿楀彛涓細鏄劇ず鍑烘墍鏈夊彂鐢熸硠婕忕殑鍐呭瓨鍧楃殑淇℃伅錛屼互涓嬩袱琛屾樉紺轟簡涓鍧楄娉勬紡鐨勫唴瀛樺潡鐨勪俊鎭細
E:\TestMemLeak\TestDlg.cpp(70) : {59} normal block at 0x00881710, 200 bytes long.
Data: <abcdefghijklmnop> 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70
銆銆絎竴琛屾樉紺鴻鍐呭瓨鍧楃敱TestDlg.cpp鏂囦歡錛岀70琛屼唬鐮佸垎閰嶏紝鍦板潃鍦?x00881710錛屽ぇ灝忎負200瀛楄妭錛寋59}鏄寚璋冪敤鍐呭瓨鍒嗛厤鍑芥暟鐨凴equest Order錛屽叧浜庡畠鐨勮緇嗕俊鎭彲浠ュ弬瑙丮SDN涓璤CrtSetBreakAlloc()鐨勫府鍔┿傜浜岃鏄劇ず璇ュ唴瀛樺潡鍓?6涓瓧鑺傜殑鍐呭錛屽皷鎷彿鍐呮槸浠SCII鏂瑰紡鏄劇ず錛屾帴鐫鐨勬槸浠?6榪涘埗鏂瑰紡鏄劇ず銆?
銆銆涓鑸ぇ瀹墮兘璇互涓鴻繖浜涘唴瀛樻硠婕忕殑媯嫻嬪姛鑳芥槸鐢盡FC鎻愪緵鐨勶紝鍏跺疄涓嶇劧銆侻FC鍙槸灝佽鍜屽埄鐢ㄤ簡MS C-Runtime Library鐨凞ebug Function銆傞潪MFC紼嬪簭涔熷彲浠ュ埄鐢∕S C-Runtime Library鐨凞ebug Function鍔犲叆鍐呭瓨娉勬紡鐨勬嫻嬪姛鑳姐侻S C-Runtime Library鍦ㄥ疄鐜癿alloc/free錛宻trdup絳夊嚱鏁版椂宸茬粡鍐呭緩浜嗗唴瀛樻硠婕忕殑媯嫻嬪姛鑳姐?
銆銆娉ㄦ剰瑙傚療涓涓嬬敱MFC Application Wizard鐢熸垚鐨勯」鐩紝鍦ㄦ瘡涓涓猚pp鏂囦歡鐨勫ご閮ㄩ兘鏈夎繖鏍蜂竴孌靛畯瀹氫箟錛?
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
銆銆鏈変簡榪欐牱鐨勫畾涔夛紝鍦ㄧ紪璇慏EBUG鐗堟椂錛屽嚭鐜板湪榪欎釜cpp鏂囦歡涓殑鎵鏈塶ew閮借鏇挎崲鎴怐EBUG_NEW浜嗐傞偅涔圖EBUG_NEW鏄粈涔堝憿錛烡EBUG_NEW涔熸槸涓涓畯錛屼互涓嬫憳鑷猘fx.h錛?632琛?
#define DEBUG_NEW new(THIS_FILE, __LINE__)
鎵浠ュ鏋滄湁榪欐牱涓琛屼唬鐮侊細
char* p = new char[200];
緇忚繃瀹忔浛鎹㈠氨鍙樻垚浜嗭細
char* p = new( THIS_FILE, __LINE__)char[200];
鏍規嵁C++鐨勬爣鍑嗭紝瀵逛簬浠ヤ笂鐨刵ew鐨勪嬌鐢ㄦ柟娉曪紝緙栬瘧鍣ㄤ細鍘繪壘榪欐牱瀹氫箟鐨刼perator new錛?
void* operator new(size_t, LPCSTR, int)
鎴戜滑鍦╝fxmem.cpp 63琛屾壘鍒頒簡涓涓繖鏍風殑operator new 鐨勫疄鐜?/p>
void* AFX_CDECL operator new(size_t nSize, LPCSTR lpszFileName, int nLine)
{
return ::operator new(nSize, _NORMAL_BLOCK, lpszFileName, nLine);
}
void* __cdecl operator new(size_t nSize, int nType, LPCSTR lpszFileName, int nLine)
{

pResult = _malloc_dbg(nSize, nType, lpszFileName, nLine);
if (pResult != NULL)
return pResult;

}


銆銆絎簩涓猳perator new鍑芥暟姣旇緝闀匡紝涓轟簡綆鍗曟湡闂達紝鎴戝彧鎽樺綍浜嗛儴鍒嗐傚緢鏄劇劧鏈鍚庣殑鍐呭瓨鍒嗛厤榪樻槸閫氳繃_malloc_dbg鍑芥暟瀹炵幇鐨勶紝榪欎釜鍑芥暟灞炰簬MS C-Runtime Library 鐨凞ebug Function銆傝繖涓嚱鏁頒笉浣嗚姹備紶鍏ュ唴瀛樼殑澶у皬錛屽彟澶栬繕鏈夋枃浠跺悕鍜岃鍙蜂袱涓弬鏁般傛枃浠跺悕鍜岃鍙峰氨鏄敤鏉ヨ褰曟嬈″垎閰嶆槸鐢卞摢涓孌典唬鐮侀犳垚鐨勩傚鏋滆繖鍧楀唴瀛樺湪紼嬪簭緇撴潫涔嬪墠娌℃湁琚噴鏀撅紝閭d箞榪欎簺淇℃伅灝變細杈撳嚭鍒癉ebug紿楀彛閲屻?
銆銆榪欓噷欏轟究鎻愪竴涓婽HIS_FILE錛宊_FILE鍜宊_LINE__銆俖_FILE__鍜宊_LINE__閮芥槸緙栬瘧鍣ㄥ畾涔夌殑瀹忋傚綋紕板埌__FILE__鏃訛紝緙栬瘧鍣ㄤ細鎶奯_FILE__鏇挎崲鎴愪竴涓瓧絎︿覆錛岃繖涓瓧絎︿覆灝辨槸褰撳墠鍦ㄧ紪璇戠殑鏂囦歡鐨勮礬寰勫悕銆傚綋紕板埌__LINE__鏃訛紝緙栬瘧鍣ㄤ細鎶奯_LINE__鏇挎崲鎴愪竴涓暟瀛楋紝榪欎釜鏁板瓧灝辨槸褰撳墠榪欒浠g爜鐨勮鍙楓傚湪DEBUG_NEW鐨勫畾涔変腑娌℃湁鐩存帴浣跨敤__FILE__錛岃屾槸鐢ㄤ簡THIS_FILE錛屽叾鐩殑鏄負浜嗗噺灝忕洰鏍囨枃浠剁殑澶у皬銆傚亣璁懼湪鏌愪釜cpp鏂囦歡涓湁100澶勪嬌鐢ㄤ簡new錛屽鏋滅洿鎺ヤ嬌鐢╛_FILE__錛岄偅緙栬瘧鍣ㄤ細浜х敓100涓父閲忓瓧絎︿覆錛岃繖100涓瓧絎︿覆閮芥槸榪欎釜cpp鏂囦歡鐨勮礬寰勫悕錛屾樉鐒跺崄鍒嗗啑浣欍傚鏋滀嬌鐢═HIS_FILE錛岀紪璇戝櫒鍙細浜х敓涓涓父閲忓瓧絎︿覆錛岄偅100澶刵ew鐨勮皟鐢ㄤ嬌鐢ㄧ殑閮芥槸鎸囧悜甯擱噺瀛楃涓茬殑鎸囬拡銆?
銆銆鍐嶆瑙傚療涓涓嬬敱MFC Application Wizard鐢熸垚鐨勯」鐩紝鎴戜滑浼氬彂鐜板湪cpp鏂囦歡涓彧瀵筺ew鍋氫簡鏄犲皠錛屽鏋滀綘鍦ㄧ▼搴忎腑鐩存帴浣跨敤malloc鍑芥暟鍒嗛厤鍐呭瓨錛岃皟鐢╩alloc鐨勬枃浠跺悕鍜岃鍙鋒槸涓嶄細琚褰曚笅鏉ョ殑銆傚鏋滆繖鍧楀唴瀛樺彂鐢熶簡娉勬紡錛孧S C-Runtime Library浠嶇劧鑳芥嫻嬪埌錛屼絾鏄綋杈撳嚭榪欏潡鍐呭瓨鍧楃殑淇℃伅錛屼笉浼氬寘鍚垎閰嶅畠鐨勭殑鏂囦歡鍚嶅拰琛屽彿銆?
瑕佸湪闈濵FC紼嬪簭涓墦寮鍐呭瓨娉勬紡鐨勬嫻嬪姛鑳介潪甯稿鏄擄紝浣犲彧瑕佸湪紼嬪簭鐨勫叆鍙e鍔犲叆浠ヤ笅鍑犺浠g爜錛?

int tmpFlag = _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG );
tmpFlag |= _CRTDBG_LEAK_CHECK_DF;
_CrtSetDbgFlag( tmpFlag );


銆銆榪欐牱錛屽湪紼嬪簭緇撴潫鐨勬椂鍊欙紝涔熷氨鏄痺inmain錛宮ain鎴杁llmain鍑芥暟榪斿洖涔嬪悗錛屽鏋滆繕鏈夊唴瀛樺潡娌℃湁閲婃斁錛屽畠浠殑淇℃伅浼氳鎵撳嵃鍒癉ebug紿楀彛閲屻?
濡傛灉浣犺瘯鐫鍒涘緩浜嗕竴涓潪MFC搴旂敤紼嬪簭錛岃屼笖鍦ㄧ▼搴忕殑鍏ュ彛澶勫姞鍏ヤ簡浠ヤ笂浠g爜錛屽茍涓旀晠鎰忓湪紼嬪簭涓笉閲婃斁鏌愪簺鍐呭瓨鍧楋紝浣犱細鍦―ebug紿楀彛閲岀湅鍒頒互涓嬬殑淇℃伅錛?
{47} normal block at 0x00C91C90, 200 bytes long.
Data: < > 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
銆銆鍐呭瓨娉勬紡鐨勭‘媯嫻嬪埌浜嗭紝浣嗘槸鍜屼笂闈FC紼嬪簭鐨勪緥瀛愮浉姣旓紝緙哄皯浜嗘枃浠跺悕鍜岃鍙楓傚浜庝竴涓瘮杈冨ぇ鐨勭▼搴忥紝娌℃湁榪欎簺淇℃伅錛岃В鍐抽棶棰樺皢鍙樺緱鍗佸垎鍥伴毦銆?
銆銆涓轟簡鑳藉鐭ラ亾娉勬紡鐨勫唴瀛樺潡鏄湪鍝噷鍒嗛厤鐨勶紝浣犻渶瑕佸疄鐜扮被浼糓FC鐨勬槧灝勫姛鑳斤紝鎶妌ew錛宮aolloc絳夊嚱鏁版槧灝勫埌_malloc_dbg鍑芥暟涓娿傝繖閲屾垜涓嶅啀璧樿堪錛屼綘鍙互鍙傝僊FC鐨勬簮浠g爜銆?
銆銆鐢變簬Debug Function瀹炵幇鍦∕S C-RuntimeLibrary涓紝鎵浠ュ畠鍙兘媯嫻嬪埌鍫嗗唴瀛樼殑娉勬紡錛岃屼笖鍙檺浜巑alloc錛宺ealloc鎴杝trdup絳夊垎閰嶇殑鍐呭瓨錛岃岄偅浜涚郴緇熻祫婧愶紝姣斿HANDLE錛孏DI Object錛屾垨鏄笉閫氳繃C-Runtime Library鍒嗛厤鐨勫唴瀛橈紝姣斿VARIANT錛孊STR鐨勬硠婕忥紝瀹冩槸鏃犳硶媯嫻嬪埌鐨勶紝榪欐槸榪欑媯嫻嬫硶鐨勪竴涓噸澶х殑灞闄愭с傚彟澶栵紝涓轟簡鑳借褰曞唴瀛樺潡鏄湪鍝噷鍒嗛厤鐨勶紝婧愪唬鐮佸繀欏葷浉搴旂殑閰嶅悎錛岃繖鍦ㄨ皟璇曚竴浜涜佺殑紼嬪簭闈炲父楹葷儲錛屾瘯绔熶慨鏀規簮浠g爜涓嶆槸涓浠剁渷蹇冪殑浜嬶紝榪欐槸榪欑媯嫻嬫硶鐨勫彟涓涓眬闄愭с?
銆銆瀵逛簬寮鍙戜竴涓ぇ鍨嬬殑紼嬪簭錛孧S C-Runtime Library鎻愪緵鐨勬嫻嬪姛鑳芥槸榪滆繙涓嶅鐨勩傛帴涓嬫潵鎴戜滑灝辯湅鐪嬪鎸傚紡鐨勬嫻嬪伐鍏楓傛垜鐢ㄧ殑姣旇緝澶氱殑鏄疊oundsChecker錛屼竴鍒欏洜涓哄畠鐨勫姛鑳芥瘮杈冨叏闈紝鏇撮噸瑕佺殑鏄畠鐨勭ǔ瀹氭с傝繖綾誨伐鍏峰鏋滀笉紼沖畾錛屽弽鑰屼細蹇欓噷娣諱貢銆傚埌搴曟槸鍑鴻嚜榧庨紟澶у悕鐨凬uMega錛屾垜鐢ㄤ笅鏉ュ熀鏈笂娌℃湁浠涔堝ぇ闂銆?/p> 浣跨敤BoundsChecker媯嫻嬪唴瀛樻硠婕忥細

銆銆BoundsChecker閲囩敤涓縐嶈縐頒負Code Injection鐨勬妧鏈紝鏉ユ埅鑾峰鍒嗛厤鍐呭瓨鍜岄噴鏀懼唴瀛樼殑鍑芥暟鐨勮皟鐢ㄣ傜畝鍗曞湴璇達紝褰撲綘鐨勭▼搴忓紑濮嬭繍琛屾椂錛孊oundsChecker鐨凞LL琚嚜鍔ㄨ澆鍏ヨ繘紼嬬殑鍦板潃絀洪棿錛堣繖鍙互閫氳繃system-level鐨凥ook瀹炵幇錛夛紝鐒跺悗瀹冧細淇敼榪涚▼涓鍐呭瓨鍒嗛厤鍜岄噴鏀劇殑鍑芥暟璋冪敤錛岃榪欎簺璋冪敤棣栧厛杞叆瀹冪殑浠g爜錛岀劧鍚庡啀鎵ц鍘熸潵鐨勪唬鐮併侭oundsChecker鍦ㄥ仛榪欎簺鍔ㄤ綔鐨勬椂錛屾棤欏諱慨鏀硅璋冭瘯紼嬪簭鐨勬簮浠g爜鎴栧伐紼嬮厤緗枃浠訛紝榪欎嬌寰椾嬌鐢ㄥ畠闈炲父鐨勭畝渚褲佺洿鎺ャ?
銆銆榪欓噷鎴戜滑浠alloc鍑芥暟涓轟緥錛屾埅鑾峰叾浠栫殑鍑芥暟鏂規硶涓庢綾諱技銆?
銆銆闇瑕佽鎴幏鐨勫嚱鏁板彲鑳藉湪DLL涓紝涔熷彲鑳藉湪紼嬪簭鐨勪唬鐮侀噷銆傛瘮濡傦紝濡傛灉闈欐佽繛緇揅-Runtime Library錛岄偅涔坢alloc鍑芥暟鐨勪唬鐮佷細琚繛緇撳埌紼嬪簭閲屻備負浜嗘埅鑾蜂綇瀵硅繖綾誨嚱鏁扮殑璋冪敤錛孊oundsChecker浼氬姩鎬佷慨鏀硅繖浜涘嚱鏁扮殑鎸囦護銆?
銆銆浠ヤ笅涓ゆ姹囩紪浠g爜錛屼竴孌墊病鏈塀oundsChecker浠嬪叆錛屽彟涓孌靛垯鏈塀oundsChecker鐨勪粙鍏ワ細
126: _CRTIMP void * __cdecl malloc (
127: size_t nSize
128: )
129: {
00403C10 push ebp
00403C11 mov ebp,esp
130: return _nh_malloc_dbg(nSize, _newmode, _NORMAL_BLOCK, NULL, 0);
00403C13 push 0
00403C15 push 0
00403C17 push 1
00403C19 mov eax,[__newmode (0042376c)]
00403C1E push eax
00403C1F mov ecx,dword ptr [nSize]
00403C22 push ecx
00403C23 call _nh_malloc_dbg (00403c80)
00403C28 add esp,14h
131: }


銆銆浠ヤ笅榪欎竴孌典唬鐮佹湁BoundsChecker浠嬪叆錛?/p>
126: _CRTIMP void * __cdecl malloc (
127: size_t nSize
128: )
129: {
00403C10 jmp 01F41EC8
00403C15 push 0
00403C17 push 1
00403C19 mov eax,[__newmode (0042376c)]
00403C1E push eax
00403C1F mov ecx,dword ptr [nSize]
00403C22 push ecx
00403C23 call _nh_malloc_dbg (00403c80)
00403C28 add esp,14h
131: }

銆銆褰揃oundsChecker浠嬪叆鍚庯紝鍑芥暟malloc鐨勫墠涓夋潯姹囩紪鎸囦護琚浛鎹㈡垚涓鏉mp鎸囦護錛屽師鏉ョ殑涓夋潯鎸囦護琚惉鍒板湴鍧01F41EC8澶勪簡銆傚綋紼嬪簭榪涘叆malloc鍚庡厛jmp鍒?1F41EC8錛屾墽琛屽師鏉ョ殑涓夋潯鎸囦護錛岀劧鍚庡氨鏄疊oundsChecker鐨勫ぉ涓嬩簡銆傚ぇ鑷翠笂瀹冧細鍏堣褰曞嚱鏁扮殑榪斿洖鍦板潃錛堝嚱鏁扮殑榪斿洖鍦板潃鍦╯tack涓婏紝鎵浠ュ緢瀹規槗淇敼錛夛紝鐒跺悗鎶婅繑鍥炲湴鍧鎸囧悜灞炰簬BoundsChecker鐨勪唬鐮侊紝鎺ョ潃璺沖埌malloc鍑芥暟鍘熸潵鐨勬寚浠わ紝涔熷氨鏄湪00403c15鐨勫湴鏂廣傚綋malloc鍑芥暟緇撴潫鐨勬椂鍊欙紝鐢變簬榪斿洖鍦板潃琚慨鏀癸紝瀹冧細榪斿洖鍒癇oundsChecker鐨勪唬鐮佷腑錛屾鏃禕oundsChecker浼氳褰曠敱malloc鍒嗛厤鐨勫唴瀛樼殑鎸囬拡錛岀劧鍚庡啀璺寵漿鍒板埌鍘熸潵鐨勮繑鍥炲湴鍧鍘匯?
銆銆濡傛灉鍐呭瓨鍒嗛厤/閲婃斁鍑芥暟鍦―LL涓紝BoundsChecker鍒欓噰鐢ㄥ彟涓縐嶆柟娉曟潵鎴幏瀵硅繖浜涘嚱鏁扮殑璋冪敤銆侭oundsChecker閫氳繃淇敼紼嬪簭鐨凞LL Import Table璁﹖able涓殑鍑芥暟鍦板潃鎸囧悜鑷繁鐨勫湴鍧錛屼互杈懼埌鎴幏鐨勭洰鐨勩傚叧浜庡浣曟嫤鎴猈indows鐨勭郴緇熷嚱鏁幫紝銆婄▼搴忓憳銆嬫潅蹇?002騫?鏈燂紝銆夾PI閽╁瓙鎻瘑錛堜笅錛夈嬶紝瀵逛慨鏀瑰鍏ュ湴鍧琛ㄥ仛浜嗘瑕佺殑鎻忚堪銆傛垜灝變笉鍐嶈禈榪般?
銆銆鎴幏浣忚繖浜涘垎閰嶅拰閲婃斁鍑芥暟錛孊oundsChecker灝辮兘璁板綍琚垎閰嶇殑鍐呭瓨鎴栬祫婧愮殑鐢熷懡鍛ㄦ湡銆傛帴涓嬫潵鐨勯棶棰樻槸濡備綍涓庢簮浠g爜鐩稿叧錛屼篃灝辨槸璇村綋BoundsChecker媯嫻嬪埌鍐呭瓨娉勬紡錛屽畠濡備綍鎶ュ憡榪欏潡鍐呭瓨鍧楁槸鍝浠g爜鍒嗛厤鐨勩傜瓟妗堟槸璋冭瘯淇℃伅錛圖ebug Information錛夈傚綋鎴戜滑緙栬瘧涓涓狣ebug鐗堢殑紼嬪簭鏃訛紝緙栬瘧鍣ㄤ細鎶婃簮浠g爜鍜屼簩榪涘埗浠g爜涔嬮棿鐨勫搴斿叧緋昏褰曚笅鏉ワ紝鏀懼埌涓涓崟鐙殑鏂囦歡閲?.pdb)鎴栬呯洿鎺ヨ繛緇撹繘鐩爣紼嬪簭涓傛湁浜嗚繖浜涗俊鎭紝璋冭瘯鍣ㄦ墠鑳藉畬鎴愭柇鐐硅緗紝鍗曟鎵ц錛屾煡鐪嬪彉閲忕瓑鍔熻兘銆侭oundsChecker鏀寔澶氱璋冭瘯淇℃伅鏍煎紡錛屽畠閫氳繃鐩存帴璇誨彇璋冭瘯淇℃伅灝辮兘寰楀埌鍒嗛厤鏌愬潡鍐呭瓨鐨勬簮浠g爜鍦ㄥ摢涓枃浠訛紝鍝竴琛屼笂銆備嬌鐢–ode Injection鍜孌ebug Information錛屼嬌BoundsChecker涓嶄絾鑳借褰曞懠鍙垎閰嶅嚱鏁扮殑婧愪唬鐮佺殑浣嶇疆錛岃屼笖榪樿兘璁板綍鍒嗛厤鏃剁殑Call Stack錛屼互鍙奀all Stack涓婄殑鍑芥暟鐨勬簮浠g爜浣嶇疆銆傝繖鍦ㄤ嬌鐢ㄥ儚MFC榪欐牱鐨勭被搴撴椂闈炲父鏈夌敤錛屼互涓嬫垜鐢ㄤ竴涓緥瀛愭潵璇存槑錛?

void ShowXItemMenu()
{

CMenu menu;
menu.CreatePopupMenu();
//add menu items.
menu.TrackPropupMenu();

}
void ShowYItemMenu( )
{

CMenu menu;
menu.CreatePopupMenu();
//add menu items.
menu.TrackPropupMenu();
menu.Detach();//this will cause HMENU leak

}
BOOL CMenu::CreatePopupMenu()
{

hMenu = CreatePopupMenu();

}


銆銆褰撹皟鐢⊿howYItemMenu()鏃訛紝鎴戜滑鏁呮剰閫犳垚HMENU鐨勬硠婕忋備絾鏄紝瀵逛簬BoundsChecker鏉ヨ琚硠婕忕殑HMENU鏄湪class CMenu::CreatePopupMenu()涓垎閰嶇殑銆傚亣璁劇殑浣犵殑紼嬪簭鏈夎澶氬湴鏂逛嬌鐢ㄤ簡CMenu鐨凜reatePopupMenu()鍑芥暟錛屽鏋滃彧鏄憡璇変綘娉勬紡鏄敱CMenu::CreatePopupMenu()閫犳垚鐨勶紝浣犱緷鐒舵棤娉曠‘璁ら棶棰樼殑鏍圭粨鍒板簳鍦ㄥ摢閲岋紝鍦⊿howXItemMenu()涓繕鏄湪ShowYItemMenu()涓紝鎴栬呰繕鏈夊叾瀹冪殑鍦版柟涔熶嬌鐢ㄤ簡CreatePopupMenu()錛熸湁浜咰all Stack鐨勪俊鎭紝闂灝卞鏄撲簡銆侭oundsChecker浼氬涓嬫姤鍛婃硠婕忕殑HMENU鐨勪俊鎭細

 

Function
File
Line

CMenu::CreatePopupMenu
E:\8168\vc98\mfc\mfc\include\afxwin1.inl
1009

ShowYItemMenu
E:\testmemleak\mytest.cpp
100

 

銆銆榪欓噷鐪佺暐浜嗗叾浠栫殑鍑芥暟璋冪敤

銆銆濡傛錛屾垜浠緢瀹規槗鎵懼埌鍙戠敓闂鐨勫嚱鏁版槸ShowYItemMenu()銆傚綋浣跨敤MFC涔嬬被鐨勭被搴撶紪紼嬫椂錛屽ぇ閮ㄥ垎鐨凙PI璋冪敤閮借灝佽鍦ㄧ被搴撶殑class閲岋紝鏈変簡Call Stack淇℃伅錛屾垜浠氨鍙互闈炲父瀹規槗鐨勮拷韙埌鐪熸鍙戠敓娉勬紡鐨勪唬鐮併?
銆銆璁板綍Call Stack淇℃伅浼氫嬌紼嬪簭鐨勮繍琛屽彉寰楅潪甯告參錛屽洜姝ら粯璁ゆ儏鍐典笅BoundsChecker涓嶄細璁板綍Call Stack淇℃伅銆傚彲浠ユ寜鐓т互涓嬬殑姝ラ鎵撳紑璁板綍Call Stack淇℃伅鐨勯夐」寮鍏籌細
1. 鎵撳紑鑿滃崟錛欱oundsChecker|Setting…
2. 鍦‥rror Detection欏典腑錛屽湪Error Detection Scheme鐨凩ist涓夋嫨Custom
3. 鍦–ategory鐨凜ombox涓夋嫨Pointer and leak error check
4. 閽╀笂Report Call Stack澶嶉夋
5. 鐐瑰嚮Ok
銆銆鍩轟簬Code Injection錛孊oundsChecker榪樻彁渚涗簡API Parameter鐨勬牎楠屽姛鑳斤紝memory over run絳夊姛鑳姐傝繖浜涘姛鑳藉浜庣▼搴忕殑寮鍙戦兘闈炲父鏈夌泭銆傜敱浜庤繖浜涘唴瀹逛笉灞炰簬鏈枃鐨勪富棰橈紝鎵浠ヤ笉鍦ㄦ璇﹁堪浜嗐?
銆銆灝界BoundsChecker鐨勫姛鑳藉姝ゅ己澶э紝浣嗘槸闈㈠闅愬紡鍐呭瓨娉勬紡浠嶇劧鏄懼緱鑻嶇櫧鏃犲姏銆傛墍浠ユ帴涓嬫潵鎴戜滑鐪嬬湅濡備綍鐢≒erformance Monitor媯嫻嬪唴瀛樻硠婕忋?


浣跨敤Performance Monitor媯嫻嬪唴瀛樻硠婕?/strong>

銆銆NT鐨勫唴鏍稿湪璁捐榪囩▼涓凡緇忓姞鍏ヤ簡緋葷粺鐩戣鍔熻兘錛屾瘮濡侰PU鐨勪嬌鐢ㄧ巼錛屽唴瀛樼殑浣跨敤鎯呭喌錛孖/O鎿嶄綔鐨勯綣佸害絳夐兘浣滀負涓涓釜Counter錛屽簲鐢ㄧ▼搴忓彲浠ラ氳繃璇誨彇榪欎簺Counter浜嗚В鏁翠釜緋葷粺鐨勬垨鑰呮煇涓繘紼嬬殑榪愯鐘跺喌銆侾erformance Monitor灝辨槸榪欐牱涓涓簲鐢ㄧ▼搴忋?
銆銆涓轟簡媯嫻嬪唴瀛樻硠婕忥紝鎴戜滑涓鑸彲浠ョ洃瑙哖rocess瀵硅薄鐨凥andle Count錛孷irutal Bytes 鍜學orking Set涓変釜Counter銆侶andle Count璁板綍浜嗚繘紼嬪綋鍓嶆墦寮鐨凥ANDLE鐨勪釜鏁幫紝鐩戣榪欎釜Counter鏈夊姪浜庢垜浠彂鐜扮▼搴忔槸鍚︽湁Handle娉勬紡錛沄irtual Bytes璁板綍浜嗚榪涚▼褰撳墠鍦ㄨ櫄鍦板潃絀洪棿涓婁嬌鐢ㄧ殑铏氭嫙鍐呭瓨鐨勫ぇ灝忥紝NT鐨勫唴瀛樺垎閰嶉噰鐢ㄤ簡涓ゆ璧扮殑鏂規硶錛岄鍏堬紝鍦ㄨ櫄鍦板潃絀洪棿涓婁繚鐣欎竴孌電┖闂達紝榪欐椂鎿嶄綔緋葷粺騫舵病鏈夊垎閰嶇墿鐞嗗唴瀛橈紝鍙槸淇濈暀浜嗕竴孌靛湴鍧銆傜劧鍚庯紝鍐嶆彁浜よ繖孌電┖闂達紝榪欐椂鎿嶄綔緋葷粺鎵嶄細鍒嗛厤鐗╃悊鍐呭瓨銆傛墍浠ワ紝Virtual Bytes涓鑸誨ぇ浜庣▼搴忕殑Working Set銆傜洃瑙哣irutal Bytes鍙互甯姪鎴戜滑鍙戠幇涓浜涚郴緇熷簳灞傜殑闂; Working Set璁板綍浜嗘搷浣滅郴緇熶負榪涚▼宸叉彁浜ょ殑鍐呭瓨鐨勬婚噺錛岃繖涓煎拰紼嬪簭鐢寵鐨勫唴瀛樻婚噺瀛樺湪瀵嗗垏鐨勫叧緋伙紝濡傛灉紼嬪簭瀛樺湪鍐呭瓨鐨勬硠婕忚繖涓間細鎸佺畫澧炲姞錛屼絾鏄疺irtual Bytes鍗存槸璺寵穬寮忓鍔犵殑銆?
銆銆鐩戣榪欎簺Counter鍙互璁╂垜浠簡瑙h繘紼嬩嬌鐢ㄥ唴瀛樼殑鎯呭喌錛屽鏋滃彂鐢熶簡娉勬紡錛屽嵆浣挎槸闅愬紡鍐呭瓨娉勬紡錛岃繖浜汣ounter鐨勫間篃浼氭寔緇鍔犮備絾鏄紝鎴戜滑鐭ラ亾鏈夐棶棰樺嵈涓嶇煡閬撳摢閲屾湁闂錛屾墍浠ヤ竴鑸嬌鐢≒erformance Monitor鏉ラ獙璇佹槸鍚︽湁鍐呭瓨娉勬紡錛岃屼嬌鐢˙oundsChecker鏉ユ壘鍒板拰瑙e喅闂銆?
銆銆褰揚erformance Monitor鏄劇ず鏈夊唴瀛樻硠婕忥紝鑰孊oundsChecker鍗存棤娉曟嫻嬪埌錛岃繖鏃舵湁涓ょ鍙兘錛氱涓縐嶏紝鍙戠敓浜嗗伓鍙戞у唴瀛樻硠婕忋傝繖鏃朵綘瑕佺‘淇濅嬌鐢≒erformance Monitor鍜屼嬌鐢˙oundsChecker鏃訛紝紼嬪簭鐨勮繍琛岀幆澧冨拰鎿嶄綔鏂規硶鏄竴鑷寸殑銆傜浜岀錛屽彂鐢熶簡闅愬紡鐨勫唴瀛樻硠婕忋傝繖鏃朵綘瑕侀噸鏂板鏌ョ▼搴忕殑璁捐錛岀劧鍚庝粩緇嗙爺絀禤erformance Monitor璁板綍鐨凜ounter鐨勫肩殑鍙樺寲鍥撅紝鍒嗘瀽鍏朵腑鐨勫彉鍖栧拰紼嬪簭榪愯閫昏緫鐨勫叧緋伙紝鎵懼埌涓浜涘彲鑳界殑鍘熷洜銆傝繖鏄竴涓棝鑻︾殑榪囩▼錛屽厖婊′簡鍋囪銆佺寽鎯熾侀獙璇併佸け璐ワ紝浣嗚繖涔熸槸涓涓Н绱粡楠岀殑緇濆ソ鏈轟細銆?/p>

fengmin 2008-04-03 22:28 鍙戣〃璇勮
]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            香蕉av777xxx色综合一区| 国产精品亚发布| 亚洲性视频网站| 日韩视频第一页| 一本大道久久a久久精品综合| 亚洲午夜精品久久久久久app| 日韩系列欧美系列| 中文在线一区| 欧美在线观看视频一区二区三区| 久久精品国产一区二区三区| 久久久精品动漫| 欧美大片在线观看一区二区| 亚洲欧洲精品天堂一级| 9久草视频在线视频精品| 亚洲欧美成人网| 久久亚洲国产成人| 欧美日韩一区三区四区| 黑人一区二区三区四区五区| 亚洲人体1000| 欧美一区午夜视频在线观看| 欧美成人午夜免费视在线看片| 日韩午夜视频在线观看| 欧美一区久久| 欧美日韩一区在线视频| 激情久久综艺| 国产欧美精品一区aⅴ影院| 亚洲欧美国产高清va在线播| 一二美女精品欧洲| 久久精品一区二区国产| 亚洲成人在线网站| 欧美一区二区精品久久911| 欧美激情综合在线| 国产日韩亚洲欧美综合| 亚洲伦理久久| 噜噜爱69成人精品| 亚洲欧美国产不卡| 欧美久久综合| 国产综合婷婷| 亚洲欧美日韩天堂一区二区| 亚洲国产小视频在线观看| 午夜在线视频一区二区区别| 欧美区国产区| 亚洲精品三级| 国产精品美女久久久久久免费| 韩日在线一区| 性伦欧美刺激片在线观看| 亚洲欧洲另类国产综合| 久久久激情视频| 国产一级一区二区| 欧美在线不卡| 亚洲午夜精品久久| 欧美视频二区36p| 亚洲久久在线| 亚洲大胆av| 免费看的黄色欧美网站| 尤物精品在线| 久久精品色图| 欧美在线视频导航| 国产一区二区精品久久91| 午夜精品影院| 亚洲一区久久久| 国产精品手机视频| 香蕉久久久久久久av网站| 亚洲一区自拍| 国产一区二区av| 久久深夜福利| 久久这里有精品15一区二区三区| 在线播放一区| 亚洲欧洲一区二区三区在线观看| 欧美国产精品劲爆| 99精品国产热久久91蜜凸| 亚洲精品国产精品乱码不99| 亚洲综合色在线| 狠狠网亚洲精品| 男男成人高潮片免费网站| 看欧美日韩国产| 一区二区三区四区五区在线| 亚洲自拍偷拍视频| 精品成人在线视频| 亚洲国产片色| 国产精品女主播在线观看| 久久精品国产69国产精品亚洲| 久久久久成人精品免费播放动漫| 亚洲人人精品| 亚洲在线国产日韩欧美| 一区二区三区精品国产| 欧美国产精品久久| 欧美大胆人体视频| 亚洲一区二区三区视频播放| 亚洲一区二区三区影院| 国产美女精品免费电影| 麻豆freexxxx性91精品| 欧美精品亚洲精品| 欧美在线视频全部完| 麻豆成人在线| 欧美一区二区三区免费观看视频| 久久精品五月| 亚洲一区欧美一区| 欧美一区二区在线免费观看| 亚洲精品国精品久久99热一| 一本色道久久综合亚洲精品不卡 | 久久精品成人一区二区三区| 伊人狠狠色j香婷婷综合| 91久久久国产精品| 国产亚洲欧美另类一区二区三区| 亚洲电影av| 国产精品综合av一区二区国产馆| 美女诱惑一区| 国产精品毛片| 亚洲国产婷婷| 一区二区三区在线看| 日韩视频中午一区| 亚洲国产成人精品女人久久久 | 在线视频日韩精品| 亚洲激情综合| 性色av一区二区三区红粉影视| 亚洲精品在线视频| 久久久久久久一区二区| 香蕉成人啪国产精品视频综合网| 免费成人毛片| 久久久欧美精品sm网站| 国产精品久久久久久久久动漫| 欧美韩日一区二区| 韩国三级电影一区二区| 亚洲一级高清| 亚洲综合国产激情另类一区| 欧美成人一区二区三区在线观看| 欧美在线视频免费观看| 国产精品日韩在线播放| 艳妇臀荡乳欲伦亚洲一区| 亚洲黑丝一区二区| 麻豆freexxxx性91精品| 欧美国产高清| 亚洲区第一页| 欧美**人妖| 亚洲国产一区在线观看| 亚洲国产综合在线看不卡| 久久三级视频| 蜜桃久久av一区| 136国产福利精品导航网址| 欧美一区二区高清| 久久精品国产清高在天天线| 国产婷婷色综合av蜜臀av| 午夜亚洲伦理| 久久精品系列| 伊人男人综合视频网| 欧美美女bb生活片| 亚洲精品一区在线| 韩国一区电影| 亚洲国产成人一区| 亚洲欧洲在线看| 中文有码久久| 久久久国产精品一区二区中文| 性欧美xxxx大乳国产app| 久久精品视频免费| 午夜精品区一区二区三| 欧美在线不卡视频| 欧美成人日本| 亚洲欧洲精品一区二区三区| 麻豆成人精品| 亚洲精选一区| 亚洲欧美日韩在线不卡| 国产色视频一区| 麻豆亚洲精品| 亚洲视频网站在线观看| 久久夜色精品国产亚洲aⅴ| 亚洲国产你懂的| 国产精品va在线播放| 久久成人一区| 最新国产精品拍自在线播放| aa级大片欧美三级| 国产丝袜一区二区| 欧美激情导航| 中文一区字幕| 欧美大片一区二区| 香蕉久久夜色精品国产| 尤物九九久久国产精品的特点| 欧美国产日韩一区二区在线观看| 亚洲一区二区三区在线播放| 亚洲电影成人| 久久精品国产清高在天天线| 亚洲精品中文字| 国内综合精品午夜久久资源| 欧美视频成人| 欧美aa国产视频| 午夜精品福利在线| 亚洲免费观看高清完整版在线观看| 久久婷婷国产综合尤物精品| 宅男噜噜噜66一区二区| 亚洲国产欧美一区二区三区同亚洲 | 影音先锋久久资源网| 欧美日韩在线不卡一区| 久久亚洲春色中文字幕| 性色av一区二区三区| 日韩午夜电影av| 欧美激情在线观看| 久久综合色婷婷| 久久精品亚洲一区二区三区浴池| 99精品久久| 亚洲裸体在线观看|