¸üÐÂʱ¼ä:2020Äê01ÔÂ16ÈÕ14ʱ32·Ö À´Ô´:ÀÖÓã²¥¿Í ä¯ÀÀ´ÎÊý:
C/C++ÔËÐиßЧ£¬²»¹ÜÊDzÙ×÷ϵͳÄں˻¹ÊǶÔÐÔÓÐÒªÇóµÄ³ÌÐò£¨±ÈÈçÓÎÏ·ÒýÇæ£©¶¼ÒªÇóʹÓÃC/C++À´±àд£¬ÆäʵC/C++Ç¿´óµÄÒ»µãÔÚÓÚÄܹ»Ê¹ÓÃÖ¸Õë×ÔÓɵؿØÖÆÄÚ´æµÄʹÓã¬ÊÊʱµÄÉêÇëÄÚ´æºÍÊÍ·ÅÄڴ棬´Ó¶ø×öµ½ÆäËû±à³ÌÓïÑÔ×ö²»µ½µÄ¸ßЧµØÔËÐС£µ«ÊÇÄÚ´æ¹ÜÀíÊÇÒ»°ÑË«Èн££¬ÓúÃÁËÏ÷ÌúÈçÄ࣬Óò»ºÃ×Ô¶ÏÒ»±Û¡£ÔÚÉêÇë¶ÑÉÏÄÚ´æÊ¹ÓÃÍêÖ®ºóÖÐÈç¹û×ö²»µ½ÊÊʱÓÐЧµÄÊÍ·Å£¬ÄÇô¾Í»áÔì³ÉÄÚ´æÐ¹Â¶£¬¾Ã¶ø¾ÃÖ®³ÌÐò¾Í»á½«ÏµÍ³ÄÚ´æºÄ¾¡£¬µ¼ÖÂϵͳÔËÐгöÎÊÌâ¡£¾ÍÈçͬÄãÿÌìÅÜȥͼÊé¹Ý½èÒ»´òÊé¼®¶ø²»»¹£¬Ö±µ½Í¼Êé¹Ýµ¹±ÕΪֹ¡£
CÓïÑÔÖÐÉêÇëÄÚ´æºÍÊÍ·ÅÄÚ´æµÄ·½·¨ÊÇʹÓà mallocºÍfree¡£
C++ÖÐÄܼæÈÝC£¬ËùÒÔÒ²ÄÜʹÓÃmallocºÍfree£¬ÃæÏò¶ÔÏóµÄÇé¿öÏÂʹÓõÄÔòÊÇnewºÍdelete£¬Äܹ»×Ô¶¯Ö´Ðй¹Ô캯ÊýºÍÎö¹¹º¯Êý¡£
ÔÚLinuxƽ̨£¬ÎÒÃÇ¿ÉÒÔʹÓÃvalgrindÃüÁî¼ì²âC/C++³ÌÐòÊÇ·ñÄÚ´æÐ¹Â¶¡£
02. valgrind°²×°
debian/ubuntuϰ²×°·½·¨£º
deng@itcast:~$ sudo apt install valgrind°²×°ºÃvalgrind¹¤¾ßÖ®ºó£¬ÏÂÃæÀ´¿´¿´valgrindµÄ¼¸¸öÓ¦Óó¡¾°¡£
redhat/centosϰ²×°·½·¨£º
03. ʹÓÃδ³õʼ»¯µÄÄÚ´æ
³ÌÐòÖÐÎÒÃǶ¨ÒåÁËÒ»¸öÖ¸Õëp£¬µ«²¢Î´¸øËû·ÖÅä¿Õ¼ä£¬µ«ÎÒÃÇȴʹÓÃËüÁË¡£
³ÌÐòʾÀý:
valgrind¼ì²â³öµ½ÎÒÃǵijÌÐòʹÓÃÁËδ³õʼ»¯µÄ±äÁ¿¡£

04. ʹÓÃÒ°Ö¸Õë
pËùÖ¸ÏòµÄÄÚ´æ±»ÊÍ·ÅÁË£¬p±ä³ÉÁËÒ°Ö¸Õ룬µ«ÊÇÎÒÃÇÈ´¼ÌÐøÊ¹ÓÃÕâÆ¬ÄÚ´æ¡£
³ÌÐòʾÀý:
valgrind¼ì²âµ½ÎÒÃÇʹÓÃÁËÒѾfreeµÄÄڴ棬²¢¸ø³öÕâÆ¬ÄÚ´æÊÇÄÄÀï·ÖÅäºÍÄÄÀïÊͷŵġ£

05. ¶¯Ì¬ÄÚ´æÔ½½ç·ÃÎÊ
ÎÒÃǶ¯Ì¬µØ·ÖÅäÁËһƬÁ¬ÐøµÄ´æ´¢¿Õ¼ä£¬µ«ÎÒÃÇÔÚ·ÃÎʸöÊý×éʱ·¢ÉúÁËÔ½½ç·ÃÎÊ¡£
³ÌÐòʾÀý:
valgrind¼ì²â³öÔ½½çÐÅÏ¢ÈçÏ¡£

×¢Ò⣺
valgrind²»¼ì²é·Ç¶¯Ì¬·ÖÅäÊý×éµÄʹÓÃÇé¿ö¡£
06. ·ÖÅä¿Õ¼äºóûÓÐÊÍ·Å
ÄÚ´æÐ¹Â©µÄÔÒòÔÚÓÚÎÒÃÇʹÓÃfree»òÕßnew·ÖÅä¿Õ¼äÖ®ºó£¬Ã»ÓÐʹÓÃfree»òÕßdeleteÊÍ·ÅÄÚ´æ¡£
³ÌÐòʾÀý:
valgrindµÄ¼Ç¼ÏÔʾÉÏÃæµÄ³ÌÐòÓÃÁË1´Îmalloc£¬È´µ÷ÓÃÁË0´Îfree¡£

¿ÉÒÔʹÓÃ--leak-check=full½øÒ»²½»ñÈ¡ÄÚ´æÐ¹Â©µÄÐÅÏ¢£¬±ÈÈçmalloc¾ßÌåÐкš£

07. ²»Æ¥ÅäʹÓÃdelete»òÕßfree
Ò»°ãÎÒÃÇʹÓÃmalloc·ÖÅäµÄ¿Õ¼ä£¬±ØÐëʹÓÃfreeÊÍ·ÅÄڴ档ʹÓÃnew·ÖÅäµÄ¿Õ¼ä£¬Ê¹ÓÃdeleteÊÍ·ÅÄÚ´æ¡£
³ÌÐòʾÀý:
²»Æ¥ÅäµØÊ¹ÓÃmalloc/new/new[] ºÍ free/delete/delete[]Ôò»á±»Ìáʾmismacth

08. Á½´ÎÊÍ·Åͬһ¿éÄÚ´æ
Ò»°ãÇé¿öÏ£¬ÄÚ´æ·ÖÅäÒ»´Î£¬Ö»ÊÍ·ÅÒ»´Î¡£Èç¹û¶à´ÎÊÍ·Å£¬¿ÉÄÜ»á³öÏÖdouble free¡£
³ÌÐòʾÀý:
¶à´ÎÊÍ·ÅͬһÄڴ棬³öÏÖ·Ç·¨ÊÍ·ÅÄÚ´æ¡£

09. ×ܽá
ÄÚ´æÐ¹Â¶ÎÊÌâ·Ç³£ÄѶ¨Î»£¬¶ÔÓÚС¹¤³ÌÏîÄ¿À´Ëµ£¬¼òµ¥È¥¼ì²é´úÂëÖÐnewºÍdeleteµÄÆ¥Åä¶ÔÊý¾Í»ù±¾Äܶ¨Î»µ½ÎÊÌ⣬µ«ÊÇÒ»µ©´úÂëÁ¿ÉÏÉýµ½ÒÔÍòµ¥Î»Ê±£¬½ö¿¿ÈâÑÛ¼ì²éÀ´¶¨Î»ÎÊÌâÄǾͷdz£À§ÄÑÁË£¬ËùÒÔÎÒÃÇÐèÒªÀûÓù¤¾ß°ïÖúÎÒÃÇÕÒ³öÎÊÌâËùÔÚ¡£ÔÚLinuxϵͳÏÂÄÚ´æ¼ì²â¹¤¾ßÊ×ÍÆValgrind£¬Ò»¿î·Ç³£ºÃÓõĿªÔ´ÄÚ´æ¹ÜÀí¹¤¾ß¡£ValgrindÆäʵÊÇÒ»¸ö¹¤¾ß¼¯£¬ÄÚ´æ´íÎó¼ì²âÖ»ÊÇËüÖڶ๦ÄܵÄÒ»¸ö£¬µ«ÎÒÃÇÓõÃ×î¶àµÄ¹¦ÄÜÕýÊÇËü——memcheck¡£ÍƼöÁ˽âÀÖÓã²¥¿ÍC++Åàѵ¿Î³Ì¡£
×ÜÖ®£¬valgrind¹¤¾ß¿ÉÒÔ¼ì²âÏÂÁÐÓëÄÚ´æÏà¹ØµÄÎÊÌâ :
· δÊÍ·ÅÄÚ´æµÄʹÓÃ
· ¶ÔÊͷźóÄÚ´æµÄ¶Á/д
· ¶ÔÒÑ·ÖÅäÄÚ´æ¿éβ²¿µÄ¶Á/д
· ÄÚ´æÐ¹Â¶
· ²»Æ¥ÅäµÄʹÓÃmalloc/new/new[] ºÍ free/delete/delete[]
· ÖØ¸´ÊÍ·ÅÄÚ´æ
²ÂÄãϲ»¶£º
C/C++£º³õѧÕß³£Óöµ½µÄcÓïÑÔÏÝÚå
±±¾©Ð£Çø