1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Valgrind] 2 00:00:02,000 --> 00:00:05,000 [Nate Hardison, Università ta 'Harvard] 3 00:00:05,000 --> 00:00:07,000 Dan huwa CS50, CS50.TV] 4 00:00:07,000 --> 00:00:10,000 Uħud mill-bugs aktar diffiċli fil-programmi C 5 00:00:10,000 --> 00:00:13,000 ġejjin mill-ġestjoni ħażina tal-memorja. 6 00:00:13,000 --> 00:00:15,000 Hemm numru kbir ta 'modi biex screw affarijiet up, 7 00:00:15,000 --> 00:00:17,000 inkluż allokat l-ammont ħażin ta 'memorja, 8 00:00:17,000 --> 00:00:20,000 jinsa li initialize-varjabbli, 9 00:00:20,000 --> 00:00:23,000 miktub qabel jew wara t-tmiem ta 'buffer, 10 00:00:23,000 --> 00:00:25,000 u tillibera jżommu ħinijiet memorja multipli. 11 00:00:25,000 --> 00:00:28,000 Is-sintomi jvarjaw minn ħabtiet intermittenti 12 00:00:28,000 --> 00:00:30,000 għall-valuri mysteriously miktub fuq xulxin, 13 00:00:30,000 --> 00:00:34,000 spiss fil-postijiet u l-ħinijiet bogħod mill-iżball oriġinali. 14 00:00:34,000 --> 00:00:37,000 Tracing-problema osservata lura lill-għerq sottostanti 15 00:00:37,000 --> 00:00:39,000 jista 'jkun sfida, 16 00:00:39,000 --> 00:00:42,000 iżda fortunatament hemm programm utli imsejjaħ Valgrind 17 00:00:42,000 --> 00:00:44,000 li jistgħu jagħmlu ħafna biex jgħinu. 18 00:00:44,000 --> 00:00:47,000 >> Inti tmexxi programm taħt Valgrind biex 19 00:00:47,000 --> 00:00:50,000 verifika estensiva tal-allokazzjonijiet tal-memorja borġ u aċċessi. 20 00:00:50,000 --> 00:00:53,000 Meta Valgrind jiskopri problema, li tagħtik immedjat, 21 00:00:53,000 --> 00:00:56,000 informazzjoni diretta li jippermetti li inti 22 00:00:56,000 --> 00:00:58,000 aktar faċilment isibu u tiffissa l-problema. 23 00:00:58,000 --> 00:01:01,000 Valgrind wkoll rapporti dwar kwistjonijiet memorja inqas fatali, 24 00:01:01,000 --> 00:01:04,000 bħal tnixxijiet memorja, l-allokazzjoni tal-memorja borġ, 25 00:01:04,000 --> 00:01:07,000 u jinsa biex ħielsa minnha. 26 00:01:07,000 --> 00:01:10,000 Bħal kompilatur, tagħna clang, fil-debugger tagħna, GDB, 27 00:01:10,000 --> 00:01:14,000 Valgrind huwa softwer b'xejn, u huwa installat fuq il-appliance. 28 00:01:14,000 --> 00:01:16,000 Valgrind timxi fuq eżekutibbli binarju tiegħek, 29 00:01:16,000 --> 00:01:20,000 mhux tiegħek. c jew. fajls kodiċi h sors, 30 00:01:20,000 --> 00:01:23,000 sabiex ikun żgur li għandek miġbura kopja up-to-data tal-programm tiegħek 31 00:01:23,000 --> 00:01:25,000 użu clang jew Għamla. 32 00:01:25,000 --> 00:01:28,000 Imbagħad, ġiri program tiegħek taħt Valgrind jista 'jkun 33 00:01:28,000 --> 00:01:32,000 sempliċi kemm biss prefiss-kmand programm standard bl-Valgrind kelma, 34 00:01:32,000 --> 00:01:35,000 li jibda up Valgrind u jmexxi l-programm ġewwa ta 'dan. 35 00:01:35,000 --> 00:01:38,000 Meta jibdew, Valgrind ma xi kumpless 36 00:01:38,000 --> 00:01:41,000 jiggering biex jiġi kkonfigurat l-eżekutibbli għall-kontrolli tal-memorja, 37 00:01:41,000 --> 00:01:44,000 sabiex ikun jista 'jieħu ftit biex tikseb jibda jaħdem. 38 00:01:44,000 --> 00:01:48,000 Il-programm għandu mbagħad tesegwixxi normalment, ikun ferm aktar bil-mod, 39 00:01:48,000 --> 00:01:52,000 u meta jispiċċa, Valgrind se print sommarju ta 'użu tal-memorja tiegħu. 40 00:01:52,000 --> 00:01:58,000 Jekk kollox imur sew, se tfittex xi ħaġa bħal din: 41 00:01:58,000 --> 00:02:01,000 F'dan il-każ,. / Clean_program 42 00:02:01,000 --> 00:02:04,000 hija t-triq għall-programm Irrid jiddekorri. 43 00:02:04,000 --> 00:02:06,000 U filwaqt li dan wieħed ma jagħmel ebda argumenti, 44 00:02:06,000 --> 00:02:09,000 jekk hija ma I d biss tindi minnhom fuq sat-tmiem tal-kmand bħas-soltu. 45 00:02:09,000 --> 00:02:12,000 Programm Nadif huwa biss programm ftit iblah I maħluqa 46 00:02:12,000 --> 00:02:15,000 li jalloka spazju għal blokk ta 'ints fuq il-munzell, 47 00:02:15,000 --> 00:02:19,000 tpoġġi xi valuri ġewwa minnhom, u jillibera l-blokk kollu. 48 00:02:19,000 --> 00:02:23,000 Dan huwa dak li qed shooting għal, l-ebda żbalji u l-ebda tnixxijiet. 49 00:02:23,000 --> 00:02:27,000 >> Ieħor metrika importanti huwa n-numru totali ta 'bytes allokati. 50 00:02:27,000 --> 00:02:32,000 Jiddependi fuq il-programm, jekk allokazzjonijiet tiegħek huma fil-megabytes jew ogħla, 51 00:02:32,000 --> 00:02:34,000 int probabilment tagħmel xi ħaġa ħażina. 52 00:02:34,000 --> 00:02:37,000 Inti bla bżonn ħażna duplikati? 53 00:02:37,000 --> 00:02:40,000 Inti tuża l-borġ għall-ħażna, meta ikun aħjar li tuża l-munzell? 54 00:02:40,000 --> 00:02:43,000 Allura, żbalji memorja jista 'jkun verament ħażen. 55 00:02:43,000 --> 00:02:46,000 Dawk l-aktar evidenti jikkawżaw ħabtiet spettakolari, 56 00:02:46,000 --> 00:02:49,000 iżda anki allura xorta tista 'tkun diffiċli biex jiġu identifikati 57 00:02:49,000 --> 00:02:51,000 x'inhi eżattament wassal għall-tiġrifa. 58 00:02:51,000 --> 00:02:54,000 Aktar insidjuż, programm bi żball memorja 59 00:02:54,000 --> 00:02:56,000 xorta jistgħu jikkompilaw nadif 60 00:02:56,000 --> 00:02:58,000 u xorta jistgħu jidhru li qed jaħdmu b'mod korrett 61 00:02:58,000 --> 00:03:01,000 għaliex inti irnexxielhom jiksbu xortik tajba ħafna mill-ħin. 62 00:03:01,000 --> 00:03:04,000 Wara diversi "riżultati ta 'suċċess," 63 00:03:04,000 --> 00:03:07,000 inti tista 'biss taħseb li crash huwa fluke tal-kompjuter, 64 00:03:07,000 --> 00:03:10,000 iżda l-kompjuter huwa qatt żbaljata. 65 00:03:10,000 --> 00:03:13,000 >> Running Valgrind jistgħu jgħinuk jillokalizzaw l-kawża ta 'żbalji memorja viżibbli 66 00:03:13,000 --> 00:03:18,000 kif ukoll isibu lurking żbalji inti lanqas biss għadhom jafu dwar. 67 00:03:18,000 --> 00:03:22,000 Kull darba Valgrind jiskopri problema, stampi informazzjoni dwar dak li osservat. 68 00:03:22,000 --> 00:03:24,000 Kull oġġett huwa pjuttost konċiż - 69 00:03:24,000 --> 00:03:27,000 il-linja sors ta 'l-istruzzjoni toffendi, dak il-kwistjoni hija, 70 00:03:27,000 --> 00:03:30,000 u info ftit dwar il-memorja involuti - 71 00:03:30,000 --> 00:03:34,000 iżda ħafna drabi huwa biżżejjed informazzjoni sabiex jidderieġu l-attenzjoni tiegħek għall-post dritt. 72 00:03:34,000 --> 00:03:37,000 Hawn hu eżempju ta 'Valgrind taħdem fuq programm Buggy 73 00:03:37,000 --> 00:03:40,000 li ma li taqra invalidu 'memorja borġ. 74 00:03:40,000 --> 00:03:49,000 Naraw l-ebda żbalji jew twissijiet fil-kompilazzjoni. 75 00:03:49,000 --> 00:03:53,000 Uh-oh, is-sommarju iżball jgħid li hemm żewġ żbalji - 76 00:03:53,000 --> 00:03:56,000 2 jaqra invalidi ta 'daqs 4 - bytes, li hu. 77 00:03:56,000 --> 00:04:01,000 Kemm ħażin jaqra seħħew fil-funzjoni prinċipali invalid_read.c, 78 00:04:01,000 --> 00:04:04,000 l-ewwel fuq il-linja 16 u t-tieni fuq il-linja 19. 79 00:04:04,000 --> 00:04:06,000 Ejja nħarsu lejn il-kodiċi. 80 00:04:06,000 --> 00:04:11,000 Id-Dehra tal-ewwel sejħa għall printf tipprova jinqraw wieħed int passat l-aħħar ta 'blokka tal-memorja tagħna. 81 00:04:11,000 --> 00:04:13,000 Jekk inħarsu lura lejn produzzjoni Valgrind s, 82 00:04:13,000 --> 00:04:16,000 naraw li Valgrind qalulna eżattament dan. 83 00:04:16,000 --> 00:04:19,000 L-indirizz aħna qed jippruvaw biex taqra jibda 0 bytes 84 00:04:19,000 --> 00:04:22,000 passat il-tarf tal-blokka ta 'daqs 16 bytes - 85 00:04:22,000 --> 00:04:25,000 4 32-bit ints li aħna allokati. 86 00:04:25,000 --> 00:04:29,000 Dan huwa, l-indirizz konna tipprova taqra jibda dritt fl-aħħar ta 'blokk tagħna, 87 00:04:29,000 --> 00:04:32,000 biss kif naraw fis-sejħa printf tagħna ħżiena. 88 00:04:32,000 --> 00:04:36,000 Issa, invalidu jaqra jista 'ma tidhirx bħal li kbar ta' ftehim, 89 00:04:36,000 --> 00:04:39,000 imma jekk inti qed tuża din id-data biex jikkontrolla l-fluss tal-programm tiegħek - 90 00:04:39,000 --> 00:04:42,000 per eżempju, bħala parti minn jekk id-dikjarazzjoni jew loop - 91 00:04:42,000 --> 00:04:45,000 allura l-affarijiet jistgħu imorru ħażin skiet. 92 00:04:45,000 --> 00:04:47,000 Watch kif I tista 'tmexxi l-programm invalid_read 93 00:04:47,000 --> 00:04:50,000 u xejn barra min-normal jiġri. 94 00:04:50,000 --> 00:04:52,000 Scary, huh? 95 00:04:52,000 --> 00:04:56,000 >> Issa, ejja nħarsu lejn uħud tipi aktar ta 'żbalji li inti tista' tiltaqa fil-kodiċi tiegħek, 96 00:04:56,000 --> 00:04:59,000 u aħna ser tara kif Valgrind jiskopri minnhom. 97 00:04:59,000 --> 00:05:01,000 Aħna biss raw eżempju ta 'invalid_read, 98 00:05:01,000 --> 00:05:04,000 hekk issa ejja check out invalid_write. 99 00:05:04,000 --> 00:05:09,000 Għal darb'oħra, l-ebda żbalji jew twissijiet fil-kompilazzjoni. 100 00:05:09,000 --> 00:05:12,000 Okay, Valgrind jgħid li hemm żewġ żbalji f'dan il-programm - 101 00:05:12,000 --> 00:05:15,000 u invalid_write u invalid_read. 102 00:05:15,000 --> 00:05:18,000 Ejja check out din il-kodiċi. 103 00:05:18,000 --> 00:05:21,000 Id-Dehra konna ltqajna każ ta 'l-strlen klassika u wieħed bug. 104 00:05:21,000 --> 00:05:24,000 Il-kodiċi ma malloc byte żejda ta 'l-ispazju 105 00:05:24,000 --> 00:05:26,000 għall-karattru / 0, 106 00:05:26,000 --> 00:05:30,000 hekk meta str kopja marru jiktbu dan fil ssubstrlen "cs50 blat!" 107 00:05:30,000 --> 00:05:33,000 hija kitbet 1 byte passat il-tarf tal-blokka tagħna. 108 00:05:33,000 --> 00:05:36,000 Il invalid_read ġejja meta nagħmlu sejħa tagħna għal printf. 109 00:05:36,000 --> 00:05:40,000 Printf jispiċċa qari memorja invalidu meta jaqra l / 0 karattru 110 00:05:40,000 --> 00:05:43,000 kif jidher fl-aħħar ta 'dan sekwenza E huwa l-istampar. 111 00:05:43,000 --> 00:05:45,000 Imma xejn minn dan maħruba Valgrind. 112 00:05:45,000 --> 00:05:48,000 Naraw li qabad il-invalid_write bħala parti mill-kopja str 113 00:05:48,000 --> 00:05:51,000 fuq il-linja 11 tat ewlenija, u l-invalid_read hija parti mill printf. 114 00:05:51,000 --> 00:05:54,000 Rock fuq, Valgrind. 115 00:05:54,000 --> 00:05:57,000 Għal darb'oħra, dan ma jista 'jidher bħala big deal. 116 00:05:57,000 --> 00:06:00,000 Aħna tista 'taħdem dan il-programm fuq u aktar barra tal Valgrind 117 00:06:00,000 --> 00:06:03,000 u ma tara l-ebda sintomi ta 'żball. 118 00:06:03,000 --> 00:06:06,000 >> Madankollu, ejja nħarsu lejn varjazzjoni żgħira ta 'dan biex tara 119 00:06:06,000 --> 00:06:09,000 kif l-affarijiet jistgħu jiksbu verament ħżiena. 120 00:06:09,000 --> 00:06:14,000 Għalhekk, mogħtija, aħna qed jabbużaw affarijiet aktar minn sempliċiment daqsxejn f'dan il-kodiċi. 121 00:06:14,000 --> 00:06:17,000 Aħna biss allokazzjoni ta 'spazju fuq il-borġ għal żewġ kordi 122 00:06:17,000 --> 00:06:19,000 it-tul ta 'cs50 blat, 123 00:06:19,000 --> 00:06:22,000 din id-darba, ftakar l / 0 karattru. 124 00:06:22,000 --> 00:06:25,000 Imma allura aħna tarmi string super-twil fil-blokk memorja 125 00:06:25,000 --> 00:06:27,000 li S hija li tipponta lejn. 126 00:06:27,000 --> 00:06:30,000 X'effett se jkollu dan fuq il-blokka tal-memorja li l-punti T sa? 127 00:06:30,000 --> 00:06:34,000 Ukoll, jekk il-punti T għal memorja li jinsab biss maġenb S, 128 00:06:34,000 --> 00:06:37,000 ġejjin biss wara dan, 129 00:06:37,000 --> 00:06:39,000 allura aħna jista 'jkollha miktub fuq parti ta' T. 130 00:06:39,000 --> 00:06:41,000 Ejja run dan il-kodiċi. 131 00:06:41,000 --> 00:06:43,000 Ħares lejn dak li ġara. 132 00:06:43,000 --> 00:06:47,000 Il-kordi aħna maħżuna fi blokki munzell tagħna kemm dehret li stampati b'mod korrett. 133 00:06:47,000 --> 00:06:49,000 Xejn jidher ħażin fil-livelli kollha. 134 00:06:49,000 --> 00:06:52,000 Madankollu, ejja mmorru lura fis-kodiċi tagħna u 135 00:06:52,000 --> 00:06:55,000 jikkummentaw l-linja fejn aħna kopja cs50 blat 136 00:06:55,000 --> 00:06:59,000 fil-blokk memorja 2, innotat mill-t. 137 00:06:59,000 --> 00:07:02,000 Issa, meta aħna run dan il-kodiċi għandna 138 00:07:02,000 --> 00:07:06,000 biss tara l-kontenut tal-blokka tal-memorja 1 jistampa. 139 00:07:06,000 --> 00:07:09,000 Whoa, anke jekk aħna ma str kopja 140 00:07:09,000 --> 00:07:12,000 xi karattri ġewwa l-blokk munzell 2, l-1 indikat mill T, 141 00:07:12,000 --> 00:07:15,000 irridu jiksbu print out. 142 00:07:15,000 --> 00:07:18,000 Tabilħaqq, l-sekwenza aħna mimli fis ewwel blokk tagħna 143 00:07:18,000 --> 00:07:21,000 skorriet l-ewwel blokk u fil-blokk 2, 144 00:07:21,000 --> 00:07:23,000 jagħmlu kollox jidher normali. 145 00:07:23,000 --> 00:07:26,000 Valgrind, għalkemm, jgħidilna l-istorja vera. 146 00:07:26,000 --> 00:07:28,000 Hemm immorru. 147 00:07:28,000 --> 00:07:32,000 Kollha ta 'dawk invalidi jaqra u jikteb. 148 00:07:32,000 --> 00:07:36,000 >> Ejja nħarsu lejn eżempju ta 'tip ieħor ta' żball. 149 00:07:36,000 --> 00:07:39,000 Hawnhekk aħna nagħmlu xi ħaġa pjuttost sfortunati. 150 00:07:39,000 --> 00:07:41,000 Aħna grab spazju għal int fuq il-munzell, 151 00:07:41,000 --> 00:07:45,000 u aħna initialize l pointer int - p - għall-punt li dak l-ispazju. 152 00:07:45,000 --> 00:07:48,000 Madankollu, filwaqt li pointer tagħna huwa initialized, 153 00:07:48,000 --> 00:07:52,000 id-data li huwa tipponta lejn ftit ikun x'ikun junk huwa fil-parti tal-borġ. 154 00:07:52,000 --> 00:07:55,000 Allura meta aħna tagħbija li d-data fis INT i, 155 00:07:55,000 --> 00:07:57,000 aħna teknikament initialize i, 156 00:07:57,000 --> 00:08:00,000 iżda nagħmlu hekk ma 'data junk. 157 00:08:00,000 --> 00:08:03,000 Is-sejħa li jasserixxu, li huwa makro debugging handy 158 00:08:03,000 --> 00:08:06,000 definit fil-adattat issemmiet tasserixxi librerija, 159 00:08:06,000 --> 00:08:09,000 se abort-programm jekk il-kundizzjoni tat-test tagħha jonqos. 160 00:08:09,000 --> 00:08:11,000 Dan huwa, jekk i ma tkunx 0. 161 00:08:11,000 --> 00:08:14,000 Jiddependi fuq dak li kien fl-ispazju borġ, innotat mill p, 162 00:08:14,000 --> 00:08:18,000 dan il-programm jista 'jaħdem kultant u jonqsu f'ħinijiet oħra. 163 00:08:18,000 --> 00:08:20,000 Jekk din taħdem, aħna qed biss jkollna xxurtjati. 164 00:08:20,000 --> 00:08:24,000 Il-kompilatur mhux se jaqbdu dan l-iżball, imma Valgrind rieda żgur. 165 00:08:24,000 --> 00:08:28,000 Hemm naraw l-iżball li jirriżulta mill-użu tagħna ta 'dik id-data junk. 166 00:08:28,000 --> 00:08:32,000 >> Meta inti jallokaw memorja borġ iżda ma deallocate dan jew ħielsa it- 167 00:08:32,000 --> 00:08:34,000 li tissejjaħ nixxija. 168 00:08:34,000 --> 00:08:37,000 Għal żgħir, ħajja qasira programm li tmexxi u immedjatament ħruġ, 169 00:08:37,000 --> 00:08:39,000 tnixxijiet huma pjuttost ma jagħmlux ħsara, 170 00:08:39,000 --> 00:08:42,000 iżda għal proġett ta 'daqs akbar u / jew lonġevità, 171 00:08:42,000 --> 00:08:46,000 anke tnixxija żgħira tista kompost fis xi ħaġa kbira. 172 00:08:46,000 --> 00:08:49,000 Għal CS50, aħna ma jistennew li inti 173 00:08:49,000 --> 00:08:51,000 jieħdu ħsieb ta 'ħelsien kollha tal-memorja borġ li inti jallokaw, 174 00:08:51,000 --> 00:08:54,000 peress li aħna rridu li inti tibni il-ħiliet biex jimmaniġġjaw sew l-proċess manwali 175 00:08:54,000 --> 00:08:56,000 meħtieġa minn C. 176 00:08:56,000 --> 00:08:59,000 Biex tagħmel dan, il-programm tiegħek għandu jkollhom eżatta 177 00:08:59,000 --> 00:09:03,000 one-to-one korrispondenza bejn malloc u sejħiet b'xejn. 178 00:09:03,000 --> 00:09:06,000 Fortunatament, Valgrind jistgħu jgħinuk ma 'tnixxijiet memorja wisq. 179 00:09:06,000 --> 00:09:09,000 Hawnhekk huwa programm leaky imsejjaħ leak.c li jalloka 180 00:09:09,000 --> 00:09:13,000 ispazju fuq il-munzell, jikteb lilu, iżda ma ħielsa minnha. 181 00:09:13,000 --> 00:09:16,000 Aħna jikkompilaw bl Għamla u run taħt Valgrind, 182 00:09:16,000 --> 00:09:18,000 u naraw li, filwaqt li aħna għandna l-iżbalji memorja ebda, 183 00:09:18,000 --> 00:09:20,000 aħna għandna waħda nixxija. 184 00:09:20,000 --> 00:09:23,000 Hemm 16 bytes definittivament mitlufa, 185 00:09:23,000 --> 00:09:27,000 li jfisser li l-pointer għal dak memorja ma kienx fl-ambitu tiegħu meta l-programm ħareġ. 186 00:09:27,000 --> 00:09:30,000 Issa, Valgrind ma tagħtina ton ta 'informazzjoni dwar il-tnixxija, 187 00:09:30,000 --> 00:09:35,000 imma jekk aħna isegwu din in-nota ftit li tagħti l isfel lejn il-qiegħ tar-rapport tagħha 188 00:09:35,000 --> 00:09:38,000 li terġa 'ssir bl - leak-check = full 189 00:09:38,000 --> 00:09:41,000 biex tara d-dettalji sħaħ ta 'memorja nixxew, 190 00:09:41,000 --> 00:09:44,000 aħna ser tikseb aktar informazzjoni. 191 00:09:44,000 --> 00:09:46,000 Issa, fis-sommarju munzell, 192 00:09:46,000 --> 00:09:50,000 Valgrind tgħidilna meta l-memorja li kien mitluf kien inizjalment allokati. 193 00:09:50,000 --> 00:09:52,000 Just kif nafu minn tfittex fil-kodiċi tas-sors, 194 00:09:52,000 --> 00:09:55,000 Valgrind tinforma lilna li aħna nixxew l-memorja 195 00:09:55,000 --> 00:09:58,000 allokat ma 'sejħa għall malloc fuq il-linja 8 tal leak.c 196 00:09:58,000 --> 00:10:00,000 fil-funzjoni ewlenija. 197 00:10:00,000 --> 00:10:02,000 Pretty nifty. 198 00:10:02,000 --> 00:10:04,000 >> Valgrind categorizes tnixxijiet jużaw dawn it-termini: 199 00:10:04,000 --> 00:10:07,000 Żgur mitlufa - dan huwa borġ memorja allokat 200 00:10:07,000 --> 00:10:10,000 li l-programm ma għadx għandha pointer. 201 00:10:10,000 --> 00:10:14,000 Valgrind jaf li inti darba kellhom l-pointer iżda peress tilef rekord ta 'dan. 202 00:10:14,000 --> 00:10:17,000 Din il-memorja huwa definittivament nixxew. 203 00:10:17,000 --> 00:10:20,000 Indirettament mitlufa - dan huwa borġ memorja allokat 204 00:10:20,000 --> 00:10:24,000 li għalihom il-pointers biss għal wkoll huma mitlufa. 205 00:10:24,000 --> 00:10:27,000 Per eżempju, jekk int mitluf pointer tiegħek għall-node 1 ta 'lista marbuta, 206 00:10:27,000 --> 00:10:30,000 allura l-node 1 nnifisha tkun definittivament mitlufa, 207 00:10:30,000 --> 00:10:34,000 filwaqt li xi lymph sussegwenti tkun indirettament mitlufa. 208 00:10:34,000 --> 00:10:37,000 Possibilment mitlufa - dan huwa borġ memorja allokat 209 00:10:37,000 --> 00:10:41,000 li Valgrind ma jistax ikun ċert jekk hemmx pointer jew le. 210 00:10:41,000 --> 00:10:44,000 Still jista 'jintlaħaq huwa borġ memorja allokat 211 00:10:44,000 --> 00:10:47,000 li l-programm għad għandha pointer fuq ħruġ, 212 00:10:47,000 --> 00:10:50,000 li tipikament ifisser li l-punti varjabbli globali lilha. 213 00:10:50,000 --> 00:10:53,000 Biex tiċċekkja għal dawn tnixxijiet, tkun taf ukoll biex jinkludu l-għażla 214 00:10:53,000 --> 00:10:55,000 - Għadu-jista 'jintlaħaq = iva 215 00:10:55,000 --> 00:10:58,000 fil invokazzjoni tiegħek ta 'Valgrind. 216 00:10:58,000 --> 00:11:01,000 >> Dawn il-każijiet differenti jistgħu jeħtieġu strateġiji differenti għat-tindif up, 217 00:11:01,000 --> 00:11:05,000 iżda tnixxijiet għandhom jiġu eliminati. 218 00:11:05,000 --> 00:11:08,000 Sfortunatament, l-iffissar tnixxijiet jista 'jkun diffiċli li tagħmel, 219 00:11:08,000 --> 00:11:11,000 ladarba telefonati mhux korretti għall ħielsa tista 'blow up program tiegħek. 220 00:11:11,000 --> 00:11:14,000 Per eżempju, jekk inħarsu lejn invalid_free.c, 221 00:11:14,000 --> 00:11:18,000 naraw eżempju ta deallocation memorja ħażina. 222 00:11:18,000 --> 00:11:21,000 X'għandu jkun hemm sejħa waħda biex ħielsa l-blokk kollu 223 00:11:21,000 --> 00:11:24,000 tal-memorja indikat mill int_block, 224 00:11:24,000 --> 00:11:27,000 Minflok sar tentattiv biex ħielsa kull sezzjoni int 'daqs medju 225 00:11:27,000 --> 00:11:29,000 tal-memorja individwalment. 226 00:11:29,000 --> 00:11:32,000 Dan se jonqsu katastrofiku. 227 00:11:32,000 --> 00:11:34,000 Boom! Liema żball. 228 00:11:34,000 --> 00:11:36,000 Dan huwa definittivament mhux tajba. 229 00:11:36,000 --> 00:11:39,000 Jekk int mwaħħla ma 'dan it-tip ta' żball, għalkemm, u ma tafx fejn tfittex, 230 00:11:39,000 --> 00:11:41,000 jaqgħu lura fuq l-aqwa ħabib tiegħek ġodda. 231 00:11:41,000 --> 00:11:44,000 Qtajt - Valgrind. 232 00:11:44,000 --> 00:11:47,000 Valgrind, bħal dejjem, ikun jaf eżattament x'hemm up. 233 00:11:47,000 --> 00:11:50,000 L-għadd ALLOC u ħielsa ma jaqblu. 234 00:11:50,000 --> 00:11:52,000 Imxejna ltqajna 1 alloc u 4 jillibera. 235 00:11:52,000 --> 00:11:55,000 U Valgrind wkoll tgħidilna meta l-ewwel sejħa ħielsa ħażina - 236 00:11:55,000 --> 00:11:58,000 il-wieħed li wassal għall-blowup - ikun ġej minn - 237 00:11:58,000 --> 00:12:00,000 linja 16. 238 00:12:00,000 --> 00:12:03,000 Kif qed taraw, sejħiet ħżiena biex ħielsa huma tassew ħżiena, 239 00:12:03,000 --> 00:12:05,000 hekk aħna nirrakkomandaw kiri nixxija program tiegħek 240 00:12:05,000 --> 00:12:08,000 waqt li qed jaħdmu fuq jkollna l-funzjonalità korretta. 241 00:12:08,000 --> 00:12:12,000 Tibda tfittex għal tnixxijiet biss wara program tiegħek qed jaħdem kif suppost, 242 00:12:12,000 --> 00:12:14,000 mingħajr l-ebda żbalji oħra. 243 00:12:14,000 --> 00:12:16,000 >> U li kollox konna ltqajna għal dan il-video. 244 00:12:16,000 --> 00:12:18,000 Issa dak li huma inti tistenna? 245 00:12:18,000 --> 00:12:21,000 Mur jimxu Valgrind fuq programmi tiegħek dritt issa. 246 00:12:21,000 --> 00:12:25,000 Jisimni Nate Hardison. Dan huwa CS50. [CS50.TV]