µÚÒ»·¶ÎÄÍø - רҵÎÄÕ·¶ÀýÎĵµ×ÊÁÏ·ÖÏíÆ½Ì¨

½âÃÜCÓïÑÔÖеÄÖ¸ÕëºÍÄÚ´æÐ¹Â©

À´Ô´£ºÓû§·ÖÏí ʱ¼ä£º2026/8/21 22:19:01 ±¾ÎÄÓÉloading ·ÖÏí ÏÂÔØÕâÆªÎĵµÊÖ»ú°æ
˵Ã÷£ºÎÄÕÂÄÚÈݽö¹©Ô¤ÀÀ£¬²¿·ÖÄÚÈÝ¿ÉÄܲ»È«£¬ÐèÒªÍêÕûÎĵµ»òÕßÐèÒª¸´ÖÆÄÚÈÝ£¬ÇëÏÂÔØwordºóʹÓá£ÏÂÔØwordÓÐÎÊÌâÇëÌí¼Ó΢ÐźÅ:xxxxxxx»òQQ£ºxxxxxx ´¦Àí£¨¾¡¿ÉÄܸøÄúÌṩÍêÕûÎĵµ£©£¬¸ÐлÄúµÄÖ§³ÖÓëÁ½⡣

½âÃÜCÓïÑÔÖеÄÖ¸ÕëºÍÄÚ´æÐ¹Â©

ÒýÑÔ

¶ÔÓÚÈκÎʹÓÃ?C?ÓïÑÔµÄÈË£¬Èç¹ûÎÊËûÃÇ?C?ÓïÑÔµÄ×î´ó·³ÄÕÊÇʲô£¬ÆäÖÐÐí¶àÈË¿ÉÄÜ»á»Ø´ð˵ÊÇÖ¸ÕëºÍÄÚ´æÐ¹Â©¡£ÕâЩµÄÈ·ÊÇÏûºÄÁË¿ª·¢ÈËÔ±´ó¶àÊýµ÷ÊÔʱ¼äµÄÊÂÏî¡£Ö¸ÕëºÍÄÚ´æÐ¹Â©¶ÔijЩ¿ª·¢ÈËÔ±À´ËµËƺõÁîÈËη¾å£¬µ«ÊÇÒ»µ©ÄúÁ˽âÁËÖ¸Õë¼°Æä¹ØÁªÄÚ´æ²Ù×÷µÄ»ù´¡£¬ËüÃǾÍÊÇÄúÔÚ?C?ÓïÑÔÖÐÓµÓеÄ×îÇ¿´ó¹¤¾ß¡£±¾ÎĽ«ÓëÄú·ÖÏí¿ª·¢ÈËÔ±ÔÚ¿ªÊ¼Ê¹ÓÃÖ¸ÕëÀ´±à³ÌǰӦ¸ÃÖªµÀµÄÃØÃÜ¡£±¾ÎÄÄÚÈݰüÀ¨£º

1.?µ¼ÖÂÄÚ´æÆÆ»µµÄÖ¸Õë²Ù×÷ÀàÐÍ

2.?ÔÚʹÓö¯Ì¬ÄÚ´æ·ÖÅäʱ±ØÐ뿼Âǵļì²éµã3.?µ¼ÖÂÄÚ´æÐ¹Â©µÄ³¡¾°

Èç¹ûÄúÔ¤ÏÈÖªµÀʲôµØ·½¿ÉÄܳö´í£¬ÄÇôÄú¾ÍÄܹ»Ð¡ÐıÜÃâÏÝÚ壬²¢Ïû³ý´ó¶àÊýÓëÖ¸ÕëºÍÄÚ´æÏà¹ØµÄÎÊÌâ¡£

ɶÊÇÄÚ´æÐ¹Â©

ÄÚ´æÐ¹Â¶ÔÚά»ù°Ù¿ÆÖеĽâÊÍÈçÏ£º

ÔÚ¼ÆËã»ú¿ÆÑ§ÖУ¬ÄÚ´æÐ¹Â©Ö¸ÓÉÓÚÊèºö»ò´íÎóÔì³É³ÌÐòδÄÜÊÍ·ÅÒѾ­²»ÔÙʹÓõÄÄÚ´æ¡£ÄÚ´æÐ¹Â©²¢·ÇÖ¸ÄÚ´æÔÚÎïÀíÉϵÄÏûʧ£¬¶øÊÇÓ¦ÓóÌÐò·ÖÅäij¶ÎÄÚ´æºó£¬ÓÉÓÚÉè¼Æ´íÎ󣬵¼ÖÂÔÚÊͷŸöÎÄÚ´æÖ®Ç°¾ÍʧȥÁ˶ԸöÎÄÚ´æµÄ¿ØÖÆ£¬´Ó¶øÔì³ÉÁËÄÚ´æµÄÀË·Ñ¡£

ÔÚC++ÖгöÏÖÄÚ´æÐ¹Â¶µÄÖ÷ÒªÔ­Òò¾ÍÊdzÌÐòÔ³ÔÚÉêÇëÁËÄÚ´æºó(malloc(),?new)£¬Ã»Óм°Ê±ÊÍ·ÅûÓõÄÄÚ´æ¿Õ¼ä£¬ÉõÖÁÏûÃðÁËÖ¸Õëµ¼Ö¸ÃÇøÓòÄÚ´æ¿Õ¼ä¸ù±¾ÎÞ·¨ÊÍ·Å¡£

ÖªµÀÁ˳öÏÖÄÚ´æÐ¹Â¶µÄÔ­Òò¾ÍÄÜÖªµÀÈçºÎÓ¦¶ÔÄÚ´æÐ¹Â¶£¬¼´£º²»ÓÃÁ˵ÄÄÚ´æ¿Õ¼ä¼ÇµÃÊÍ·Å£¬²»ÊÍ·ÅÁô׏ýÄêÍÛ£¡ÄÚ´æÐ¹Â©¿ÉÄܻᵼÖÂÑÏÖØµÄºó¹û£º

¡ñ??³ÌÐòÔËÐкó£¬Ëæ×Åʱ¼äÕ¼ÓÃÁ˸ü¶àµÄÄڴ棬×îºóÎÞÄÚ´æ¿ÉÓöø±ÀÀ££»¡ñ??³ÌÐòÏûºÄÁË´óÁ¿µÄÄڴ棬µ¼ÖÂÆäËû³ÌÐòÎÞ·¨Õý³£Ê¹Óã»

¡ñ??³ÌÐòÏûºÄÁË´óÁ¿Äڴ棬µ¼ÖÂÏû·ÑÕßÑ¡ÓÃÁ˱ðÈ˵ijÌÐò¶ø²»ÊÇÄãµÄ£»¡ñ??¾­³£×ö³öÄÚ´æÐ¹Â¶bugµÄ³ÌÐòÔ³±»¹«Ë¾¿ª³ö¶øÆ¶À§Áʵ¹¡£ÈçºÎÖªµÀ×Ô¼ºµÄ³ÌÐò´æÔÚÄÚ´æÐ¹Â¶£¿

¸ù¾ÝÄÚ´æÐ¹Â¶µÄÔ­Òò¼°Æä¶ñÁӵĺó¹û£¬ÎÒÃÇ¿ÉÒÔͨ¹ýÆäÖ÷Òª±íÏÖÀ´·¢ÏÖ³ÌÐòÊÇ·ñ´æÔÚÄÚ´æÐ¹Â©£º³ÌÐò³¤Ê±¼äÔËÐкóÄÚ´æÕ¼ÓÃÂÊÒ»Ö±²»¶ÏµÄ»ºÂýµÄÉÏÉý£¬¶øÊµ¼ÊÉÏÔÚÄãµÄÂß¼­Öв¢Ã»ÓÐÕâô¶àµÄÄÚ´æÐèÇó¡£ÈçºÎ¶¨Î»µ½Ð¹Â¶µãÄØ£¿

¸ù¾ÝÔ­Àí£¬ÎÒÃÇ¿ÉÒÔÏÈreview×Ô¼ºµÄ´úÂ룬ÀûÓÃ\delete£¬¿´¿´ÄÚ´æµÄÉêÇëÓëÊÍ·ÅÊDz»ÊdzɶÔÊͷŵģ¬ÕâʹÄãѸËÙ·¢ÏÖһЩÂß¼­½ÏΪ¼òµ¥µÄÄÚ´æÐ¹Â¶Çé¿ö¡£

Èç¹ûÒÀ¾É·¢ÉúÄÚ´æÐ¹Â¶£¬¿ÉÒÔͨ¹ý¼Ç¼ÉêÇëÓëÊͷŵĶÔÏóÊýÄ¿ÊÇ·ñÒ»ÖÂÀ´Åжϡ£ÔÚÀàÖÐ×·¼ÓÒ»¸ö¾²Ì¬±äÁ¿?static?int?count;ÔÚ¹¹Ô캯ÊýÖÐÖ´ÐÐcount++;ÔÚÎö¹¹º¯ÊýÖÐÖ´ÐÐcount--;£¬Í¨¹ýÔÚ³ÌÐò½áÊøÇ°½«ËùÓÐÀàÎö¹¹£¬Ö®ºóÊä³ö¾²Ì¬±äÁ¿£¬¿´countµÄÖµÊÇ·ñΪ0£¬Èç¹ûΪ0,ÔòÎÊÌâ²¢·Ç³öÏÖÔڸô¦£¬Èç¹û²»Îª0£¬ÔòÊǸÃÀàÐͶÔÏóûÓÐÍêÈ«ÊÍ·Å¡£

¼ì²éÀàÖÐÉêÇëµÄ¿Õ¼äÊÇ·ñÍêÈ«ÊÍ·Å£¬ÓÈÆäÊÇ´æÔڼ̳и¸ÀàµÄÇé¿ö£¬¿´¿´×ÓÀàÖÐÊÇ·ñµ÷ÓÃÁ˸¸ÀàµÄÎö¹¹º¯Êý£¬ÓпÉÄÜ»áÒòΪ×ÓÀàÎö¹¹Ê±Ã»ÓÐÊÇ·ñ¸¸ÀàÖÐÉêÇëµÄÄÚ´æ¿Õ¼ä¡£

¶ÔÓÚº¯ÊýÖÐÉêÇëµÄÁÙʱ¿Õ¼ä£¬ÈÏÕæ¼ì²é£¬ÊÇ·ñ´æÔÚÌáÇ°Ìø³öº¯ÊýµÄµØ·½Ã»ÓÐÊÍ·ÅÄÚ´æ¡£

ʲôµØ·½¿ÉÄܳö´í£¿

Óм¸ÖÖÎÊÌⳡ¾°¿ÉÄÜ»á³öÏÖ£¬´Ó¶ø¿ÉÄÜÔÚÍê³ÉÉú³Éºóµ¼ÖÂÎÊÌâ¡£ÔÚ´¦ÀíÖ¸Õëʱ£¬Äú¿ÉÒÔʹÓñ¾ÎÄÖеÄÐÅÏ¢À´±ÜÃâÐí¶àÎÊÌâ¡£

δ³õʼ»¯µÄÄÚ´æ

ÔÚ±¾ÀýÖУ¬p?Òѱ»·ÖÅäÁË?10?¸ö×Ö½Ú¡£Õâ?10?¸ö×Ö½Ú¿ÉÄܰüº¬À¬»øÊý¾Ý£¬Èçͼ?1?Ëùʾ¡£

char?*p?=?malloc?(?10?);

ͼ?1.?À¬»øÊý¾Ý

Èç¹ûÔÚ¶ÔÕâ¸ö?p?¸³ÖµÇ°£¬Ä³¸ö´úÂë¶Î³¢ÊÔ·ÃÎÊËü£¬Ôò¿ÉÄÜ»á»ñµÃÀ¬»øÖµ£¬ÄúµÄ³ÌÐò¿ÉÄܾßÓв»¿ÉÔ¤²âµÄÐÐΪ¡£p?¿ÉÄܾßÓÐÄúµÄ³ÌÐò´ÓÎ´ÔøÔ¤Áϵ½µÄÖµ¡£Á¼ºÃµÄϰ¹ßÊÇʼÖÕ½áºÏʹÓÃ?memset?ºÍ?malloc·ÖÅäÄڴ棬»òÕßʹÓÃ?calloc¡£char?*p?=?malloc?(10);memset(p,¡¯\\0¡¯,10);

ÏÖÔÚ£¬¼´Ê¹Í¬Ò»¸ö´úÂë¶Î³¢ÊÔÔÚ¶Ô?p?¸³ÖµÇ°·ÃÎÊËü£¬¸Ã´úÂë¶ÎÒ²ÄÜÕýÈ·´¦Àí?Null?Öµ£¨ÔÚÀíÏëÇé¿öÏÂÓ¦¾ßÓеÄÖµ£©£¬È»ºó½«¾ßÓÐÕýÈ·µÄÐÐΪ¡£

Äڴ渲¸Ç

ÓÉÓÚ?p?Òѱ»·ÖÅäÁË?10?¸ö×Ö½Ú£¬Èç¹ûij¸ö´úÂëÆ¬¶Î³¢ÊÔÏò?p?дÈëÒ»¸ö?11?×Ö½ÚµÄÖµ£¬Ôò¸Ã²Ù×÷½«ÔÚ²»¸æËßÄúµÄÇé¿öÏÂ×Ô¶¯´ÓÆäËûij¸öλÖá°³Ôµô¡±Ò»¸ö×Ö½Ú¡£ÈÃÎÒÃǼÙÉèÖ¸Õë?q?±íʾ¸ÃÄÚ´æ¡£

ͼ?2.?ԭʼ?q?ÄÚÈÝͼ?3.?¸²¸ÇºóµÄ?q?ÄÚÈÝ

½á¹û£¬Ö¸Õë?q?½«¾ßÓдÓδԤÁϵ½µÄÄÚÈÝ¡£¼´Ê¹ÄúµÄÄ£¿é±àÂëµÃ×ã¹»ºÃ£¬Ò²¿ÉÄÜÓÉÓÚij¸ö¹²´æÄ£¿éÖ´ÐÐijЩÄÚ´æ²Ù×÷¶ø¾ßÓв»ÕýÈ·µÄÐÐΪ¡£ÏÂÃæµÄʾÀý´úÂëÆ¬¶ÎÒ²¿ÉÒÔ˵Ã÷ÕâÖÖ³¡¾°¡£

char *name = (char *) malloc(11); // Assign some value to namememcpy ( p,name,11); // Problem begins here

ÔÚ±¾ÀýÖУ¬memcpy?²Ù×÷³¢ÊÔ½«?11?¸ö×Ö½Úдµ½?p£¬¶øºóÕß½ö±»·ÖÅäÁË?10?¸ö×Ö½Ú¡£

×÷ΪÁ¼ºÃµÄʵ¼ù£¬Ã¿µ±ÏòÖ¸ÕëдÈëֵʱ£¬¶¼ÒªÈ·±£¶Ô¿ÉÓÃ×Ö½ÚÊýºÍËùдÈëµÄ×Ö½ÚÊý½øÐн»²æºË¶Ô¡£Ò»°ãÇé¿öÏ£¬memcpy?º¯Êý½«ÊÇÓÃÓÚ´ËÄ¿µÄµÄ¼ì²éµã¡£

ÄÚ´æ¶ÁȡԽ½ç

ÄÚ´æ¶ÁȡԽ½ç?(overread)?ÊÇÖ¸Ëù¶ÁÈ¡µÄ×Ö½ÚÊý¶àÓÚËüÃÇÓ¦ÓеÄ×Ö½ÚÊý¡£Õâ¸öÎÊÌâ²¢²»Ì«ÑÏÖØ£¬Ôڴ˾Ͳ»ÔÙÏêÊöÁË¡£ÏÂÃæµÄ´úÂëÌṩÁËÒ»¸öʾÀý¡£

char *ptr = (char *)malloc(10);char name[20] ;memcpy ( name,ptr,20); // Problem begins here

ÔÚ±¾ÀýÖУ¬memcpy?²Ù×÷³¢ÊÔ´Ó?ptr?¶ÁÈ¡?20?¸ö×Ö½Ú£¬µ«ÊǺóÕß½ö±»·ÖÅäÁË?10?¸ö×Ö½Ú¡£Õ⻹»áµ¼Ö²»Ï£ÍûµÄÊä³ö¡£

ÄÚ´æÐ¹Â©

ÄÚ´æÐ¹Â©¿ÉÄÜÕæÕýÁîÈËÌÖÑá¡£ÏÂÃæµÄÁбíÃèÊöÁËһЩµ¼ÖÂÄÚ´æÐ¹Â©µÄ³¡¾°¡£ÖØÐ¸³Öµ

ÎÒ½«Ê¹ÓÃÒ»¸öʾÀýÀ´ËµÃ÷ÖØÐ¸³ÖµÎÊÌâ¡£

char *memoryArea = malloc(10);char *newArea = malloc(10);

ÕâÏòÈçÏÂÃæµÄͼ?4?ËùʾµÄÄÚ´æÎ»Öø³Öµ¡£

ͼ?4.?ÄÚ´æÎ»ÖÃ

memoryArea?ºÍ?newArea?·Ö±ð±»·ÖÅäÁË?10?¸ö×Ö½Ú£¬ËüÃǸ÷×ÔµÄÄÚÈÝÈçͼ?4?Ëùʾ¡£Èç¹ûijÈËÖ´ÐÐÈçÏÂËùʾµÄÓï¾ä£¨Ö¸ÕëÖØÐ¸³Öµ£©¡­¡­

memoryArea = newArea;

ÔòËü¿Ï¶¨»áÔÚ¸ÃÄ£¿é¿ª·¢µÄºóÐø½×¶Î¸øÄú´øÀ´Âé·³¡£

ÔÚÉÏÃæµÄ´úÂëÓï¾äÖУ¬¿ª·¢ÈËÔ±½«?memoryArea?Ö¸Õ븳ֵ¸ø?newArea?Ö¸Õë¡£½á¹û£¬memoryArea?ÒÔǰËùÖ¸ÏòµÄÄÚ´æÎ»Öñä³ÉÁ˹ÂÁ¢µÄ£¬ÈçÏÂÃæµÄͼ?5?Ëùʾ¡£ËüÎÞ·¨ÊÍ·Å£¬ÒòΪûÓÐÖ¸Ïò¸ÃλÖõÄÒýÓá£Õâ»áµ¼ÖÂ?10?¸ö×Ö½ÚµÄÄÚ´æÐ¹Â©¡£

ͼ?5.?ÄÚ´æÐ¹Â©

ÔÚ¶ÔÖ¸Õ븳ֵǰ£¬ÇëÈ·±£ÄÚ´æÎ»Öò»»á±äΪ¹ÂÁ¢µÄ¡£Ê×ÏÈÊͷŸ¸¿é

¼ÙÉèÓÐÒ»¸öÖ¸Õë?memoryArea£¬ËüÖ¸ÏòÒ»¸ö?10?×Ö½ÚµÄÄÚ´æÎ»Ö᣸ÃÄÚ´æÎ»ÖõĵÚÈý¸ö×Ö½ÚÓÖÖ¸Ïòij¸ö¶¯Ì¬·ÖÅäµÄ?10?×Ö½ÚµÄÄÚ´æÎ»Öã¬Èçͼ?6?Ëùʾ¡£

ͼ?6.?¶¯Ì¬·ÖÅäµÄÄÚ´æ

free(memoryArea)

Èç¹ûͨ¹ýµ÷ÓÃ?free?À´ÊÍ·ÅÁË?memoryArea£¬Ôò?newArea?Ö¸ÕëÒ²»áÒò´Ë¶ø±äµÃÎÞЧ¡£newArea?ÒÔǰËùÖ¸ÏòµÄÄÚ´æÎ»ÖÃÎÞ·¨ÊÍ·Å£¬ÒòΪÒѾ­Ã»ÓÐÖ¸Ïò¸ÃλÖõÄÖ¸Õë¡£»»¾ä»°Ëµ£¬newArea?ËùÖ¸ÏòµÄÄÚ´æÎ»ÖñäΪÁ˹ÂÁ¢µÄ£¬´Ó¶øµ¼ÖÂÁËÄÚ´æÐ¹Â©¡£

ÿµ±ÊͷŽṹ»¯µÄÔªËØ£¬¶ø¸ÃÔªËØÓÖ°üº¬Ö¸Ïò¶¯Ì¬·ÖÅäµÄÄÚ´æÎ»ÖõÄÖ¸Õëʱ£¬Ó¦Ê×ÏȱéÀú×ÓÄÚ´æÎ»Öã¨ÔÚ´ËÀýÖÐΪ?newArea£©£¬²¢´ÓÄÇÀ↑ʼÊÍ·Å£¬È»ºóÔÙ±éÀú»Ø¸¸½Úµã¡£

ÕâÀïµÄÕýȷʵÏÖÓ¦¸ÃΪ£º

free( memoryArea->newArea);free(memoryArea);

·µ»ØÖµµÄ²»ÕýÈ·´¦Àí

ÓÐʱ£¬Ä³Ð©º¯Êý»á·µ»Ø¶Ô¶¯Ì¬·ÖÅäµÄÄÚ´æµÄÒýÓ᣸ú×Ù¸ÃÄÚ´æÎ»Öò¢ÕýÈ·µØ´¦ÀíËü¾Í³ÉΪÁË?calling?º¯ÊýµÄÖ°Ôð¡£

char *func ( ){ ? ? ? ?return malloc(20); // make sure to memset this location to ¡®\\0¡¯¡­}

void callingFunc ( ){ ? ? ? ?func ( ); // Problem lies here}

ÔÚÉÏÃæµÄʾÀýÖУ¬callingFunc()?º¯ÊýÖжÔ?func()?º¯ÊýµÄµ÷ÓÃδ´¦Àí¸ÃÄÚ´æÎ»Öõķµ»ØµØÖ·¡£½á¹û£¬func()?º¯ÊýËù·ÖÅäµÄ?20?¸ö×ֽڵĿé¾Í¶ªÊ§ÁË£¬²¢µ¼ÖÂÁËÄÚ´æÐ¹Â©¡£

¹é»¹ÄúËù»ñµÃµÄ

ÔÚ¿ª·¢×é¼þʱ£¬¿ÉÄÜ´æÔÚ´óÁ¿µÄ¶¯Ì¬ÄÚ´æ·ÖÅä¡£Äú¿ÉÄÜ»áÍüÁ˸ú×ÙËùÓÐÖ¸Õ루ָÏòÕâЩÄÚ´æÎ»Öã©£¬²¢ÇÒijЩÄÚ´æ¶ÎûÓÐÊÍ·Å£¬»¹±£³Ö·ÖÅ䏸¸Ã³ÌÐò¡£

ʼÖÕÒª¸ú×ÙËùÓÐÄÚ´æ·ÖÅ䣬²¢ÔÚÈκÎÊʵ±µÄʱºòÊÍ·ÅËüÃÇ¡£ÊÂʵÉÏ£¬¿ÉÒÔ¿ª·¢Ä³ÖÖ»úÖÆÀ´¸ú×ÙÕâЩ·ÖÅ䣬±ÈÈçÔÚÁ´±í½Úµã±¾ÉíÖб£ÁôÒ»¸ö¼ÆÊýÆ÷£¨µ«Äú»¹±ØÐ뿼ÂǸûúÖÆµÄ¶îÍ⿪Ïú£©¡£

·ÃÎÊ¿ÕÖ¸Õë

·ÃÎÊ¿ÕÖ¸ÕëÊǷdz£Î£Ïյģ¬ÒòΪËü¿ÉÄÜʹÄúµÄ³ÌÐò±ÀÀ£¡£Ê¼ÖÕҪȷ±£Äú²»ÊÇ?ÔÚ·ÃÎÊ¿ÕÖ¸Õë¡£

ûÓжã¹ýµÄ¿Ó--Ö¸Õ루ÄÚ´æÐ¹Â¶£©C++±»ÈËÂîÄï×î¶àµÄ¾ÍÊÇÖ¸Õë¡£

Ò¹ÉîÈ˾²µÄʱºò£¬Äóö¼¸¸öʹÓÃÖ¸ÕëÈÝÒ׳öÏֵĿӶù¡£¿ÉÄÜÎÒµÄÓïÑÔÃèÊöÓÐЩÈÃÈ˷Ѿ¢£¬¾¡Á¿ÓôúÂë˵»°¡£

ͨ¹ýÖ¸ÏòÀàµÄNULLÖ¸Õëµ÷ÓÃÀàµÄ³ÉÔ±º¯Êý

ÊÔͼÓÃÒ»¸önullÖ¸Õëµ÷ÓÃÀàµÄ³ÉÔ±º¯Êý£¬µ¼Ö±ÀÀ££º

#include using namespace std;class A{int value;public:void dumb() const {cout << \set(int x) {cout << \value=x;}int get() const {cout << \= NULL;pA1->dumb();pA1->set(10);pA1->get();pA2->dumb();pA2->set(20);//±ÀÀ£pA2->get();return 0;}

Ϊʲô»áÕâÑù£¿?

ͨ¹ý·Ç·¨Ö¸Õëµ÷Óú¯Êý£¬¾ÍÏ൱ÓÚ¸øº¯Êý´«µÝÁËÒ»¸öÖ¸Ïòº¯ÊýµÄ·Ç·¨Ö¸Õ룡?

µ«ÊÇΪʲôpA2->dumb()»á³É¹¦ÄØ£¿?ÒòΪµ¼Ö±ÀÀ£µÄÊÇ·ÃÎÊÁ˳ÉÔ±±äÁ¿£¡£¡Ê¹ÓÃÒѾ­ÊͷŵÄÖ¸Õë

struct X{int data;};int foo(){struct X *pX;pX = (struct X *) malloc(sizeof (struct X));pX->data = 10;free(pX);...return pX->data;}

ʹÓÃδ³õʼ»¯µÄÖ¸Õë

Èç¹ûÄãÕâÑùд£¬±àÒëÆ÷»áÌáʾÄãʹÓÃÁËδ³õʼ»¯µÄ±äÁ¿p¡£

void fooA(){int *p;*p = 100;}

ÄÇôÈç¹ûÎÒÊÍ·ÅÒ»¸ö³õʼ»¯µÄÖ¸ÕëÄØ£¿

void fooB(){int *p;free(p);}

½á¹ûÊÇÒ»ÑùµÄ£¡£¡ÊÍ·ÅÒѾ­ÊͷŵÄÖ¸ÕëÖ±½Ó¿´¿´´úÂ룺

void fooA(){char *p;p = (char *)malloc(100);cout << \\

ÕâÑùµÄÎÊÌâÒ²Ðí²»»áÁ¢¼´Ê¹ÄãµÄ³ÌÐò±ÀÀ££¬ÄÇÑùºó¹û¸ü¼ÓÑÏÖØ£¡£¡Ã»Óе÷ÓÃ×ÓÀàµÄÎö¹¹º¯Êý

֮ǰµÄ²©¿Í½²¹ý£¬¸¸ÀàµÄÎö¹¹º¯Êý×îºÃÉùÃ÷ΪÐ飡£¡

ParentClass *pObj = new ChildClass;...delete pObj;

ÉÏÊö´úÂë»áÔì³É±ÀÀ££¬Èç¹û¸¸ÀàµÄÎö¹¹º¯Êý²»ÉùÃ÷ΪÐ飬ÄÇô²»»áµ÷Óü̳ÐÀàµÄÎö¹¹º¯Êý£¬Ôì³ÉÄÚ´æÐ¹Â¶¡£ÄÚ´æÒç³ö

µ±ÎÒÃÇ¿½±´×Ö·û´®µÄʱºò£¬ÎÒÃdz£³£»áÓõ½?memcpyº¯Êý¡£ÕâÀïÌØ±ðÐèҪעÒâµÄ¾ÍÊÇ×Ö·û´®½áβµÄnull×Ö·û£º

char *p = (char *)malloc(strlen(str));strcpy(p, str);

ΪÁ˶ã¹ýÕâ¸ö¿Ó£¬Ö»ÐèÒª°Ñ?strlen(str)?¸ÄΪ?strlen(str)+1¡£¼ÇÒ»´ÎÖ¸ÕëʹÓò»µ±Ôì³ÉµÄÄÚ´æÐ¹Â¶

¸ÕдÍêÒ»¶Î´úÂ룬ÓÉÓÚ½«ºÜÔËÐÐÔÚÒÆ¶¯É豸ÉÏ£¬?ÎÒ¾ö¶¨ÏȲâÊÔÒ»ÏÂÄÚ´æµÄʹÓÃÁ¿£¬?½á¹û·¢ÏÖÁ˺ÜÑÏÖØµÄÄÚ´æÐ¹Â©£¬?ÔÚǰǰºóºó·­¿´ÁËnew?ºÍdelete²¢È·ÈÏûÓЩдµÄÇé¿öÏ£¬?й¶ÒÀÈ»´æÔÚ£¡µ÷ÊÔºó×îÖÕÈ·ÈÏÁËÎÊÌâÊÇÒòΪunionµÄ²»µ±Ê¹ÓÃÔì³ÉµÄ£¬?ÏÂÃæ¿ªÊ¼»¹Ô­ÏÖ³¡£º

typedef struct DATA_{ ? ?DATA_(int size = 10) ? ?{ ? ? ? ?pVoid = new char[nSize];this->size = size; ? ?}virtual ~DATA_() ? ?{if (pVoid) ? ? ? ?{delete pVoid; ? ? ? ?} ? ?}int nSize;void *pVoid;}DATA, *LPDATA;

struct STRUCT1{ ? ?STRUCT1(int count) ? ?{ ? ? ? ?pVoid = new DATA[count];this->count = count; ? ?}virtual ~STRUCT1() ? ?{if (pVoid) ? ? ? ?{delete pVoid; ? ? ? ?} ? ?}int count;union ? ?{void *pVoid; ? ? ? ?LPDATA pData; ? ?}}

int main(int argc, char* argv[]){for( int i = 0; i < 1000; i++) ? ?{void *p = new STRUCT1( 10 );delete p; ? ?}return 0;}

ÔÚÉÏÃæÕâ¶Î´úÂëÖУ¬STRUCT1Öаüº¬ÁËÈô¸É¸öDATA½á¹¹£¬DATA½á¹¹ÓÖÉêÇëÁËĬÈÏΪ10byte´óСµÄÄڴ棬²¢ÇÒÄÚ´æÔÚ¶ÔÏóÎö¹¹µÄʱºò»áÓÃdelete»ØÊÕ¡£Õ§Ò»¿´Õâ¸ö´úÂëÃ²ËÆ²»»áй¶Äڴ棬Æäʵ²»È»£¬´ýÎÒ·ÖÎö£º

ÔÚC++Öй¹Ô캯ÊýÓëÎö¹¹º¯ÊýµÄµ÷ÓÃÊÇÓɱàÒëÆ÷Íê³ÉµÄ£¬ÆäÖй¹Ô캯ÊýµÄµ÷ÓÃÒ»°ãÊÇÔÚ¶ÔÏó¿Õ¼ä¿ª±ÙÍêÒÔºó£¨Õ»¶ÔÏó»òÕ߶ѶÔÏó¶¼ÊÇÒ»ÑùµÄ£©£¬½«²ÎÊýѹջ£¬thisÖ¸Õ루¶ÔÏóµÄÆðʼµØÖ·£©·ÅÈëeax¼Ä´æÆ÷£¨²»Í¬µÄ±àÒëÆ÷×ö·¨¿ÉÄܲ»Í¬£©£¬È»ºóÌøµ½¹¹Ô캯ÊýÈ¥Ö´ÐС£¶øÎö¹¹º¯ÊýµÄµ÷ÓÃÔòÊǵ±¶ÔÏóÄÚ´æ±»»ØÊÕµÄʱºò±»µ÷

Óã¨Õ»¶ÔÏóÊǵ±´úÂëÖ´Ðе½±äÁ¿¿É¼ûÓòÍâ֮ǰµ÷Óã¬?¶Ñ¶ÔÏóÊÇÔÚdeleteÓï¾äµÄλÖýøÐе÷Óã©¡£

È»¶ø±àÒëÆ÷²¢ÊÇÄÇôÖÇÄܵĿÉÒÔÀí½âcoderµÄÒâͼ£¬Îö¹¹º¯ÊýµÄµ÷ÓÃÊǸù¾Ýµ±Ç°deleteµÄÖ¸ÕëÀàÐÍÀ´È·¶¨µÄ£¬¶ø£¨ÏÂÃæ£©Õâ¶Î´úÂëȴûÓÐÌṩÀàÐÍ£¬?Õâµ¼ÖÂÁËDATA_µÄÎö¹¹º¯Êý½«²»»á±»µ÷Óã¬ÄÚ´æÐ¹Â©¾ÍÔÚËùÄÑÃâÁË¡£

virtual ~STRUCT1() ? ?{if (pVoid) ? {delete pVoid;//ÎÊÌâÔÚÕâ, Ó¦¸ÃʹÓÃdelete pData; ? ? ? ?} ? ?}

×ܽá

±¾ÎÄÌÖÂÛÁ˼¸ÖÖÔÚʹÓö¯Ì¬ÄÚ´æ·ÖÅäʱӦ¸Ã±ÜÃâµÄÏÝÚå¡£Òª±ÜÃâÄÚ´æÏà¹ØµÄÎÊÌ⣬Á¼ºÃµÄϰ¹ßÊÇ£º

1.??ʼÖÕ½áºÏʹÓÃ?memset?ºÍ?malloc·ÖÅäÄڴ棬»òʼÖÕʹÓÃ?calloc¡£

2.??ÿµ±ÏòÖ¸ÕëдÈëֵʱ£¬¶¼ÒªÈ·±£¶Ô¿ÉÓÃ×Ö½ÚÊýºÍËùдÈëµÄ×Ö½ÚÊý½øÐн»²æºË¶Ô¡£

3.??ÔÚ¶ÔÖ¸Õ븳ֵǰ£¬ÒªÈ·±£Ã»ÓÐÄÚ´æÎ»Öûá±äΪ¹ÂÁ¢µÄ¡£

4.??ÿµ±ÊͷŽṹ»¯µÄÔªËØ£¨¶ø¸ÃÔªËØÓÖ°üº¬Ö¸Ïò¶¯Ì¬·ÖÅäµÄÄÚ´æÎ»ÖõÄÖ¸Õ룩ʱ£¬¶¼Ó¦Ê×ÏȱéÀú×ÓÄÚ´æÎ»Öò¢´ÓÄÇÀ↑ʼÊÍ·Å£¬È»ºóÔÙ±éÀú»Ø¸¸½Úµã¡£5.?ʼÖÕÕýÈ·´¦Àí·µ»Ø¶¯Ì¬·ÖÅäµÄÄÚ´æÒýÓõĺ¯Êý·µ»ØÖµ¡£6.?ÿ¸ö?malloc?¶¼ÒªÓÐÒ»¸ö¶ÔÓ¦µÄ?free¡£7.?È·±£Äú²»ÊÇÔÚ·ÃÎÊ¿ÕÖ¸Õë¡£

ËÑË÷¸ü¶à¹ØÓÚ£º ½âÃÜCÓïÑÔÖеÄÖ¸ÕëºÍÄÚ´æÐ¹Â© µÄÎĵµ
½âÃÜCÓïÑÔÖеÄÖ¸ÕëºÍÄÚ´æÐ¹Â©.doc ½«±¾ÎĵÄWordÎĵµÏÂÔØµ½µçÄÔ£¬·½±ã¸´ÖÆ¡¢±à¼­¡¢ÊղغʹòÓ¡
±¾ÎÄÁ´½Ó£ºhttps://www.diyifanwen.net/c1fwl76zdb375cln2z0an3ef8l940oa007ql_1.html£¨×ªÔØÇë×¢Ã÷ÎÄÕÂÀ´Ô´£©

Ïà¹ØÍÆ¼ö£º

ÈÈÃÅÍÆ¼ö
Copyright © 2012-2023 µÚÒ»·¶ÎÄÍø °æÈ¨ËùÓÐ ÃâÔðÉùÃ÷ | ÁªÏµÎÒÃÇ
ÉùÃ÷ :±¾ÍøÕ¾×ðÖØ²¢±£»¤ÖªÊ¶²úȨ£¬¸ù¾Ý¡¶ÐÅÏ¢ÍøÂç´«²¥È¨±£»¤ÌõÀý¡·£¬Èç¹ûÎÒÃÇ×ªÔØµÄ×÷Æ·ÇÖ·¸ÁËÄúµÄȨÀû,ÇëÔÚÒ»¸öÔÂÄÚ֪ͨÎÒÃÇ£¬ÎÒÃǻἰʱɾ³ý¡£
¿Í·þQQ£ºxxxxxx ÓÊÏ䣺xxxxxx@qq.com
ÓåICP±¸2023013149ºÅ
Top