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, Harvard University] 3 00:00:05,000 --> 00:00:07,000 Þetta er CS50, CS50.TV] 4 00:00:07,000 --> 00:00:10,000 Sumir af erfiðustu galla í C forrit 5 00:00:10,000 --> 00:00:13,000 koma frá óstjórn minni. 6 00:00:13,000 --> 00:00:15,000 There ert a gríðarstór tala af lifnaðarhættir til að skrúfa það upp, 7 00:00:15,000 --> 00:00:17,000 þ.mt úthlutun rangt magn af minni, 8 00:00:17,000 --> 00:00:20,000 gleyma að frumstilla breytur, 9 00:00:20,000 --> 00:00:23,000 skrifa fyrir eða eftir lok biðminni, 10 00:00:23,000 --> 00:00:25,000 og frjáls halda minni mörgum sinnum. 11 00:00:25,000 --> 00:00:28,000 Einkennin eru allt frá hléum hrun 12 00:00:28,000 --> 00:00:30,000 á dularfullur plága gildi, 13 00:00:30,000 --> 00:00:34,000 oft á stöðum og tíma fjarri upprunalegu villu. 14 00:00:34,000 --> 00:00:37,000 Rekja Mæld vandamál aftur til undirliggjandi undirrót 15 00:00:37,000 --> 00:00:39,000 getur verið erfitt, 16 00:00:39,000 --> 00:00:42,000 en sem betur fer að það er gagnlegt forrit sem heitir Valgrind 17 00:00:42,000 --> 00:00:44,000 að geta gert mikið til að hjálpa. 18 00:00:44,000 --> 00:00:47,000 >> Þú keyra forrit undir Valgrind til að gera 19 00:00:47,000 --> 00:00:50,000 víðtæka Eftirlit með Hrúga minni úthlutun og aðgangur. 20 00:00:50,000 --> 00:00:53,000 Þegar Valgrind uppgötva vandamál, gefur það þér strax, 21 00:00:53,000 --> 00:00:56,000 beinar upplýsingar sem gerir þér kleift að 22 00:00:56,000 --> 00:00:58,000 auðveldara að finna og laga vandamálið. 23 00:00:58,000 --> 00:01:01,000 Valgrind einnig skýrslur um hættuminni minni mál, 24 00:01:01,000 --> 00:01:04,000 svo sem leka minni, úthlutun hrúga minni, 25 00:01:04,000 --> 00:01:07,000 og gleyma að losa það. 26 00:01:07,000 --> 00:01:10,000 Eins þýðanda okkar, Clang, í aflúsara okkar, gdb, 27 00:01:10,000 --> 00:01:14,000 Valgrind er frjáls hugbúnaður, og það er sett upp á tækinu. 28 00:01:14,000 --> 00:01:16,000 Valgrind keyrir á executable tvöfaldur þinn, 29 00:01:16,000 --> 00:01:20,000 ekki þín. C eða. klst kóðann skrár, 30 00:01:20,000 --> 00:01:23,000 svo vertu viss um að þú hefur tekið saman upp-til-dagsetning afrit af forritinu 31 00:01:23,000 --> 00:01:25,000 nota Clang eða gera. 32 00:01:25,000 --> 00:01:28,000 Þá, hlaupandi program undir Valgrind má 33 00:01:28,000 --> 00:01:32,000 eins einfalt og bara að prefixing staðall program stjórn með orðinu Valgrind, 34 00:01:32,000 --> 00:01:35,000 sem hefst upp Valgrind og keyrir forritið inni í henni. 35 00:01:35,000 --> 00:01:38,000 Þegar byrjað, Valgrind gerir sum flókin 36 00:01:38,000 --> 00:01:41,000 jiggering að stilla executable fyrir minni stöðva, 37 00:01:41,000 --> 00:01:44,000 svo það getur tekið smá til að fá upp og keyra. 38 00:01:44,000 --> 00:01:48,000 Forritið mun þá framkvæma venjulega, að það mun hægar, 39 00:01:48,000 --> 00:01:52,000 og þegar henni er lokið Valgrind mun prenta yfirlit yfir notkun minni. 40 00:01:52,000 --> 00:01:58,000 Ef allt gengur vel, það mun líta eitthvað eins og this: 41 00:01:58,000 --> 00:02:01,000 Í þessu tilviki. / Clean_program 42 00:02:01,000 --> 00:02:04,000 er leiðin til áætlunarinnar sem ég vil að hlaupa. 43 00:02:04,000 --> 00:02:06,000 Og á meðan þetta er ekki að taka neinar rök, 44 00:02:06,000 --> 00:02:09,000 Ef það gerði ég myndi bara tittur þá á að enda á stjórn eins og venjulega. 45 00:02:09,000 --> 00:02:12,000 Clean program er bara kjánalegt lítið forrit sem ég skapa 46 00:02:12,000 --> 00:02:15,000 sem úthlutar pláss fyrir blokk ints á hrúga, 47 00:02:15,000 --> 00:02:19,000 setja nokkrar gildi innan þeirra, og frjáls alla blokk. 48 00:02:19,000 --> 00:02:23,000 Þetta er það sem þú ert að skjóta fyrir, engar villur og enginn leki. 49 00:02:23,000 --> 00:02:27,000 >> Annar mikilvægur mælikvarði er fjöldi bytes úthlutað. 50 00:02:27,000 --> 00:02:32,000 Það fer eftir áætlun, ef úthlutun þín eru á megabæti eða hærra, 51 00:02:32,000 --> 00:02:34,000 þú ert líklega að gera eitthvað rangt. 52 00:02:34,000 --> 00:02:37,000 Ert þú að geyma óþörfu afrit? 53 00:02:37,000 --> 00:02:40,000 Ert þú using the hrúga til geymslu, þegar það væri betra að nota stafla? 54 00:02:40,000 --> 00:02:43,000 Svo minni villur má sannarlega illt. 55 00:02:43,000 --> 00:02:46,000 Því fleiri overt sjálfur valda stórkostlegt hrun, 56 00:02:46,000 --> 00:02:49,000 en jafnvel þá getur það samt verið erfitt að ákvarða 57 00:02:49,000 --> 00:02:51,000 hvað leiddi nákvæmlega til hrun. 58 00:02:51,000 --> 00:02:54,000 Meira insidiously, forrit með minni villa 59 00:02:54,000 --> 00:02:56,000 getur samt saman eðlilega 60 00:02:56,000 --> 00:02:58,000 og enn er hægt að virðast til að virka rétt 61 00:02:58,000 --> 00:03:01,000 vegna þess að þú tókst að fá heppinn mest af tímanum. 62 00:03:01,000 --> 00:03:04,000 Eftir nokkra "vel niðurstöðum," 63 00:03:04,000 --> 00:03:07,000 þú gætir bara held að hrun er fluke á tölvunni, 64 00:03:07,000 --> 00:03:10,000 en tölvan er aldrei rangt. 65 00:03:10,000 --> 00:03:13,000 >> Running Valgrind getur hjálpað þér að elta uppi orsök sýnilegar villur minni 66 00:03:13,000 --> 00:03:18,000 og finna lurking villur sem þú þarft ekki einu sinni enn að vita um. 67 00:03:18,000 --> 00:03:22,000 Í hvert skipti Valgrind uppgötva vandamál, prentar það upplýsingar um það fram. 68 00:03:22,000 --> 00:03:24,000 Hvert atriði er nokkuð terse - 69 00:03:24,000 --> 00:03:27,000 uppspretta lína í beinum kennslu, hvað málið er, 70 00:03:27,000 --> 00:03:30,000 og smá upplýsingar um minni þátt - 71 00:03:30,000 --> 00:03:34,000 en oft er það nóg upplýsingar til að beina athygli þína á réttum stað. 72 00:03:34,000 --> 00:03:37,000 Hér er dæmi um Valgrind keyra á buggy program 73 00:03:37,000 --> 00:03:40,000 sem er ógilt las um minni hrúga. 74 00:03:40,000 --> 00:03:49,000 Við sjáum engar villur eða viðvaranir á samantekt. 75 00:03:49,000 --> 00:03:53,000 Uh-ó, villa samantekt segir að það eru tvær villur - 76 00:03:53,000 --> 00:03:56,000 tvö ógild lesin í stærð 4 - bytes, sem er. 77 00:03:56,000 --> 00:04:01,000 Bæði slæmt les orðið á helstu virkni invalid_read.c, 78 00:04:01,000 --> 00:04:04,000 fyrst á línu 16 og seinni á línu 19. 79 00:04:04,000 --> 00:04:06,000 Við skulum líta á kóðann. 80 00:04:06,000 --> 00:04:11,000 Lítur út eins og fyrsta símtalinu til printf reynir að lesa eina int framhjá lok blokk minni okkar. 81 00:04:11,000 --> 00:04:13,000 Ef við lítum til baka á framleiðslu Valgrind er, 82 00:04:13,000 --> 00:04:16,000 sjáum við að Valgrind sagði okkur einmitt það. 83 00:04:16,000 --> 00:04:19,000 Heimilisfangið sem við erum að reyna að lesa byrjar 0 bytes 84 00:04:19,000 --> 00:04:22,000 framhjá lok blokk stærð 16 bæt - 85 00:04:22,000 --> 00:04:25,000 fjórir 32-bita ints sem við úthlutað. 86 00:04:25,000 --> 00:04:29,000 Það er, heimilisfang við vorum að reyna að lesa byrjar rétt í lok blokk okkar, 87 00:04:29,000 --> 00:04:32,000 eins og við sjáum í slæmum printf símtali okkar. 88 00:04:32,000 --> 00:04:36,000 Nú, ógilt lesin gæti ekki virðast eins og það stór af a samningur, 89 00:04:36,000 --> 00:04:39,000 en ef þú ert að nota þessi gögn til að stjórna flæði program - 90 00:04:39,000 --> 00:04:42,000 til dæmis, eins og hluti af óákveðinn greinir í ensku ef yfirlýsingu eða lykkja - 91 00:04:42,000 --> 00:04:45,000 þá hluti geta hljóður fara illa. 92 00:04:45,000 --> 00:04:47,000 Horfa hvernig ég get keyrt invalid_read program 93 00:04:47,000 --> 00:04:50,000 og ekkert út af the venjulegur gerist. 94 00:04:50,000 --> 00:04:52,000 Scary, ha? 95 00:04:52,000 --> 00:04:56,000 >> Nú, við skulum líta á nokkrar fleiri tegundir af villum sem þú gætir fundur í kóðanum þínum, 96 00:04:56,000 --> 00:04:59,000 og við munum sjá hvernig Valgrind uppgötva þá. 97 00:04:59,000 --> 00:05:01,000 Við sáum bara dæmi um invalid_read, 98 00:05:01,000 --> 00:05:04,000 Svo nú skulum kíkja á invalid_write. 99 00:05:04,000 --> 00:05:09,000 Aftur, engar villur eða viðvaranir á samantekt. 100 00:05:09,000 --> 00:05:12,000 Jæja, Valgrind segir að það eru tvær villur í þessari áætlun - 101 00:05:12,000 --> 00:05:15,000 og invalid_write og invalid_read. 102 00:05:15,000 --> 00:05:18,000 Við skulum kíkja á þennan kóða. 103 00:05:18,000 --> 00:05:21,000 Útlit eins og við höfum fengið eintak af klassískum strlen plús einn galla. 104 00:05:21,000 --> 00:05:24,000 Kóðinn virkar ekki malloc auka bæti af plássi 105 00:05:24,000 --> 00:05:26,000 í / 0 staf, 106 00:05:26,000 --> 00:05:30,000 svo þegar Str afrit fór að skrifa það á ssubstrlen "cs50 rocks!" 107 00:05:30,000 --> 00:05:33,000 það skrifaði 1 bæti framhjá lok blokkinni okkar. 108 00:05:33,000 --> 00:05:36,000 The invalid_read kemur þegar við að hringja okkar til printf. 109 00:05:36,000 --> 00:05:40,000 Printf endar lestur ógilda minni þegar það les / 0 karakter 110 00:05:40,000 --> 00:05:43,000 eins og það lítur út í lok þessa E streng það er prentun. 111 00:05:43,000 --> 00:05:45,000 En ekkert af þessu slapp Valgrind. 112 00:05:45,000 --> 00:05:48,000 Við sjáum að það náði invalid_write sem hluta af STR afrita 113 00:05:48,000 --> 00:05:51,000 á línu 11 af helstu og invalid_read er hluti af printf. 114 00:05:51,000 --> 00:05:54,000 Rock á, Valgrind. 115 00:05:54,000 --> 00:05:57,000 Aftur, þetta gæti ekki virðast eins og a stór samningur. 116 00:05:57,000 --> 00:06:00,000 Við getum keyrt þetta forrit aftur og aftur utan Valgrind 117 00:06:00,000 --> 00:06:03,000 og ekki séð einhverjar villur einkenni. 118 00:06:03,000 --> 00:06:06,000 >> En við skulum líta á smá breytingu á þessu til að sjá 119 00:06:06,000 --> 00:06:09,000 hvernig það getur fengið mjög slæmt. 120 00:06:09,000 --> 00:06:14,000 Svo, veitt, við erum að misnota það meira en bara smá í þennan kóða. 121 00:06:14,000 --> 00:06:17,000 Við erum aðeins að úthluta pláss á hrúga fyrir tvo strengi 122 00:06:17,000 --> 00:06:19,000 lengd cs50 steina, 123 00:06:19,000 --> 00:06:22,000 í þetta sinn, að muna / 0 staf. 124 00:06:22,000 --> 00:06:25,000 En þá erum við að kasta í a frábær-langa streng í minni blokk 125 00:06:25,000 --> 00:06:27,000 sem S er að benda á. 126 00:06:27,000 --> 00:06:30,000 Hvaða áhrif mun það hafa á minni blokk sem T bendir á? 127 00:06:30,000 --> 00:06:34,000 Jæja, ef T bendir á minni sem er bara við hliðina á S, 128 00:06:34,000 --> 00:06:37,000 koma bara eftir það, 129 00:06:37,000 --> 00:06:39,000 þá við gætum hafa skrifað yfir hluta af T. 130 00:06:39,000 --> 00:06:41,000 Við skulum hlaupa þennan kóða. 131 00:06:41,000 --> 00:06:43,000 Horfðu á það sem gerðist. 132 00:06:43,000 --> 00:06:47,000 Strengi við geymd í blokkum hrúga okkar bæði virtust hafa prentað út á réttan hátt. 133 00:06:47,000 --> 00:06:49,000 Ekkert virðist rangt yfirleitt. 134 00:06:49,000 --> 00:06:52,000 En við skulum fara aftur í númerið okkar og 135 00:06:52,000 --> 00:06:55,000 athugasemd út línunni þar sem við afrita cs50 steina 136 00:06:55,000 --> 00:06:59,000 í seinni minni blokk, benti á eftir t. 137 00:06:59,000 --> 00:07:02,000 Nú, þegar við hlaupum þennan kóða við ættum 138 00:07:02,000 --> 00:07:06,000 aðeins sjá innihald fyrstu minni blokk prenta út. 139 00:07:06,000 --> 00:07:09,000 Vá, jafnvel þó að við gerðum ekki STR afrit 140 00:07:09,000 --> 00:07:12,000 allir stafir í seinni hrúga blokk, einn benti á eftir T, 141 00:07:12,000 --> 00:07:15,000 við fáum prenta út. 142 00:07:15,000 --> 00:07:18,000 Reyndar, the band við fyllt í fyrsta blokk okkar 143 00:07:18,000 --> 00:07:21,000 overran fyrsta blokk og í annarri blokk, 144 00:07:21,000 --> 00:07:23,000 að allt virðist eðlilegt. 145 00:07:23,000 --> 00:07:26,000 Valgrind, þó segir okkur sanna sögu. 146 00:07:26,000 --> 00:07:28,000 Svona. 147 00:07:28,000 --> 00:07:32,000 Allt sem ógild les og skrifar. 148 00:07:32,000 --> 00:07:36,000 >> Við skulum líta á dæmi um annars konar villa. 149 00:07:36,000 --> 00:07:39,000 Hér gerum við eitthvað frekar óheppileg. 150 00:07:39,000 --> 00:07:41,000 Við grípa pláss fyrir INT á hrúga, 151 00:07:41,000 --> 00:07:45,000 og við frumstilla int músina - p - til að benda á þessi rými. 152 00:07:45,000 --> 00:07:48,000 Hins vegar, á meðan bendillinn okkar er frumstilla, 153 00:07:48,000 --> 00:07:52,000 gögn að það er vísa til bara hefur hvað skran er í þeim hluta hrúga. 154 00:07:52,000 --> 00:07:55,000 Svo þegar við hlaða þessi gögn inn í int i, 155 00:07:55,000 --> 00:07:57,000 við frumstilla tæknilega i, 156 00:07:57,000 --> 00:08:00,000 en við gerum það með gagna skran. 157 00:08:00,000 --> 00:08:03,000 Símtalið til að halda, sem er handlaginn kembiforrit þjóðhagsleg 158 00:08:03,000 --> 00:08:06,000 skilgreint í viðeigandi nafni halda bókasafn, 159 00:08:06,000 --> 00:08:09,000 verður hætt við áætlun ef próf ástand hennar ekki. 160 00:08:09,000 --> 00:08:11,000 Það er, ef ég er ekki 0. 161 00:08:11,000 --> 00:08:14,000 Það fer eftir því hvað var í hrúga rúm, benti á eftir p, 162 00:08:14,000 --> 00:08:18,000 Þetta forrit gæti virkað stundum og ekki á öðrum tímum. 163 00:08:18,000 --> 00:08:20,000 Ef það virkar, við erum bara að fá heppinn. 164 00:08:20,000 --> 00:08:24,000 The þýðanda mun ekki grípa þessa villu, en Valgrind viss um að vilja. 165 00:08:24,000 --> 00:08:28,000 Þar sjáum við villa stafar af notkun okkar á að skran gögn. 166 00:08:28,000 --> 00:08:32,000 >> Þegar þú skiptir hrúga minni en deallocate ekki eða losa það, 167 00:08:32,000 --> 00:08:34,000 sem er kallað leka. 168 00:08:34,000 --> 00:08:37,000 Fyrir litla, skamman tíma forrit sem keyrir og strax hættir, 169 00:08:37,000 --> 00:08:39,000 leka eru nokkuð skaðlaus, 170 00:08:39,000 --> 00:08:42,000 en verkefni af stærri stærð og / eða langlífi, 171 00:08:42,000 --> 00:08:46,000 jafnvel a lítill leki getur blanda í eitthvað meiriháttar. 172 00:08:46,000 --> 00:08:49,000 Fyrir CS50, við ætlast til að þú 173 00:08:49,000 --> 00:08:51,000 annast frjáls allt hrúga minni sem þú skiptir, 174 00:08:51,000 --> 00:08:54,000 þar sem við viljum að þú að byggja upp færni til almennilega takast á handbók aðferð 175 00:08:54,000 --> 00:08:56,000 krafist C. 176 00:08:56,000 --> 00:08:59,000 Til að gera það, program ætti að vera nákvæm 177 00:08:59,000 --> 00:09:03,000 einn-á-mann samskipti milli malloc og ókeypis símtöl. 178 00:09:03,000 --> 00:09:06,000 Sem betur fer, Valgrind getur hjálpað þér með leka minni líka. 179 00:09:06,000 --> 00:09:09,000 Hér er a leaky forrit sem heitir leak.c sem úthlutar 180 00:09:09,000 --> 00:09:13,000 pláss á hrúga, skrifar við það, en ekki losa það. 181 00:09:13,000 --> 00:09:16,000 Við þýða það með að gera og hlaupa undir Valgrind, 182 00:09:16,000 --> 00:09:18,000 og við sjáum að, en við höfum ekkert minni villur, 183 00:09:18,000 --> 00:09:20,000 við höfum einn leka. 184 00:09:20,000 --> 00:09:23,000 Það eru 16 bæti örugglega glatað, 185 00:09:23,000 --> 00:09:27,000 sem þýðir að bendillinn til að minni var ekki að umfangi þegar forritið lauk. 186 00:09:27,000 --> 00:09:30,000 Nú, Valgrind ekki gefa okkur a tonn af upplýsingum um leka, 187 00:09:30,000 --> 00:09:35,000 en ef við fylgjum þessum litla texta sem það gefur niður að botni skýrslu 188 00:09:35,000 --> 00:09:38,000 að endursýning með - leka-stöðva = fullur 189 00:09:38,000 --> 00:09:41,000 til að sjá allar upplýsingar um leki minni, 190 00:09:41,000 --> 00:09:44,000 við munum fá meiri upplýsingar. 191 00:09:44,000 --> 00:09:46,000 Nú, í hrúga samantekt, 192 00:09:46,000 --> 00:09:50,000 Valgrind segir okkur hvar minni sem var glataður var upphaflega úthlutað. 193 00:09:50,000 --> 00:09:52,000 Rétt eins og við þekkjum frá útlit á the uppspretta merkjamál, 194 00:09:52,000 --> 00:09:55,000 Valgrind upplýsir okkur að við leki minni 195 00:09:55,000 --> 00:09:58,000 úthlutað með símtali til malloc á línu 8 í leak.c 196 00:09:58,000 --> 00:10:00,000 í helstu hlutverk. 197 00:10:00,000 --> 00:10:02,000 Pretty nifty. 198 00:10:02,000 --> 00:10:04,000 >> Valgrind afdráttarlaus leka með þessum skilmálum: 199 00:10:04,000 --> 00:10:07,000 Ákveðið glatað - þetta er hrúga úthlutað minni 200 00:10:07,000 --> 00:10:10,000 sem forritið er ekki lengur með músina. 201 00:10:10,000 --> 00:10:14,000 Valgrind veit að þú hefðir einu sinni á músina en hefur síðan misst utan um það. 202 00:10:14,000 --> 00:10:17,000 Þetta minni er örugglega leki. 203 00:10:17,000 --> 00:10:20,000 Óbeint tapað - það er hrúga úthlutað minni 204 00:10:20,000 --> 00:10:24,000 sem aðeins ábendingar til það líka hafa tapast. 205 00:10:24,000 --> 00:10:27,000 Til dæmis, ef þú misst músina til fyrsta hnút í tengda listanum, 206 00:10:27,000 --> 00:10:30,000 þá fyrst hnút sjálft myndi örugglega glatað, 207 00:10:30,000 --> 00:10:34,000 en síðari hnútar væri óbeint tapað. 208 00:10:34,000 --> 00:10:37,000 Hugsanlega tapað - það er hrúga úthlutað minni 209 00:10:37,000 --> 00:10:41,000 sem Valgrind getur ekki verið viss um hvort það er bendillinn eða ekki. 210 00:10:41,000 --> 00:10:44,000 Enn er náðist hrúga úthlutað minni 211 00:10:44,000 --> 00:10:47,000 sem forritið enn bendi á brottför, 212 00:10:47,000 --> 00:10:50,000 sem þýðir yfirleitt að alþjóðlegt breytu benda til þess. 213 00:10:50,000 --> 00:10:53,000 Til að athuga þessar leka, munt þú einnig verða að fela í sér möguleika á 214 00:10:53,000 --> 00:10:55,000 - Enn-náðist = já 215 00:10:55,000 --> 00:10:58,000 í ákall þinn Valgrind. 216 00:10:58,000 --> 00:11:01,000 >> Þessar mismunandi tilvikum gæti þurft mismunandi aðferðir til að þrífa þá upp, 217 00:11:01,000 --> 00:11:05,000 en leka ætti að útrýma. 218 00:11:05,000 --> 00:11:08,000 Því miður, ákveða leka getur verið erfitt að gera, 219 00:11:08,000 --> 00:11:11,000 þar rangt símtöl frjáls geta blásið upp program. 220 00:11:11,000 --> 00:11:14,000 Til dæmis, ef við skoðum invalid_free.c, 221 00:11:14,000 --> 00:11:18,000 sjáum við dæmi um slæma minni deallocation. 222 00:11:18,000 --> 00:11:21,000 Hvað ætti að vera eitt símtal að losa alla blokk 223 00:11:21,000 --> 00:11:24,000 minni benti á með int_block, 224 00:11:24,000 --> 00:11:27,000 hefur í staðinn orðið að reyna að losa hvert int-stór kafla 225 00:11:27,000 --> 00:11:29,000 af minni fyrir sig. 226 00:11:29,000 --> 00:11:32,000 Þetta mun mistakast catastrophically. 227 00:11:32,000 --> 00:11:34,000 Boom! Hvaða villa. 228 00:11:34,000 --> 00:11:36,000 Þetta er örugglega ekki gott. 229 00:11:36,000 --> 00:11:39,000 Ef þú ert fastur með þessa tegund af villa, þó, og þú veist ekki hvar á að leita, 230 00:11:39,000 --> 00:11:41,000 falla aftur á nýju bestu vinkonu þinni. 231 00:11:41,000 --> 00:11:44,000 Þú giska á það - Valgrind. 232 00:11:44,000 --> 00:11:47,000 Valgrind, eins og alltaf, veit nákvæmlega hvað er að. 233 00:11:47,000 --> 00:11:50,000 The alloc og frjáls telja passa ekki upp. 234 00:11:50,000 --> 00:11:52,000 Við höfum fengið 1 alloc og 4 frjáls. 235 00:11:52,000 --> 00:11:55,000 Og Valgrind segir okkur einnig þar sem fyrsta slæmt frjáls kalla - 236 00:11:55,000 --> 00:11:58,000 sá sem setti blowup - kemur frá - 237 00:11:58,000 --> 00:12:00,000 lína 16. 238 00:12:00,000 --> 00:12:03,000 Eins og þú sérð, eru slæm símtöl til að losa mjög slæmt, 239 00:12:03,000 --> 00:12:05,000 þannig að við mælum með því að láta forrit leka þinn 240 00:12:05,000 --> 00:12:08,000 meðan þú ert að vinna í að fá virkni rétt. 241 00:12:08,000 --> 00:12:12,000 Byrja að leita að leka fyrr en forritið er rétt, 242 00:12:12,000 --> 00:12:14,000 án annarra villur. 243 00:12:14,000 --> 00:12:16,000 >> Og það er allt sem við höfum fengið fyrir þetta myndband. 244 00:12:16,000 --> 00:12:18,000 Nú hvað ert þú að bíða? 245 00:12:18,000 --> 00:12:21,000 Fara keyra Valgrind á forrit núna. 246 00:12:21,000 --> 00:12:25,000 Ég heiti Nate Hardison. Þetta er CS50. [CS50.TV]