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 Unibertsitatea] 3 00:00:05,000 --> 00:00:07,000 Hau CS50 da, CS50.TV] 4 00:00:07,000 --> 00:00:10,000 C programak bugs zailenetako batzuk 5 00:00:10,000 --> 00:00:13,000 memoria mismanagement etorriko da. 6 00:00:13,000 --> 00:00:15,000 Badira moduak gauzak hondatzeko sortu kopuru handi bat, 7 00:00:15,000 --> 00:00:17,000 memoria okerreko zenbatekoa esleitzean barne, 8 00:00:17,000 --> 00:00:20,000 aldagaiak hasieratu ahaztu, 9 00:00:20,000 --> 00:00:23,000 buffer baten amaieran edo aurretik eta ondoren idatziz, 10 00:00:23,000 --> 00:00:25,000 eta mantendu memoria hainbat aldiz uzten. 11 00:00:25,000 --> 00:00:28,000 Sintomak kraskatzen aldizkako bitartekoa 12 00:00:28,000 --> 00:00:30,000 misterioz gainidatzi balioak, 13 00:00:30,000 --> 00:00:34,000 askotan, leku eta orain arte jatorrizko errorea kendu aldiz. 14 00:00:34,000 --> 00:00:37,000 Ikusitako arazoa Bektorizatu itzuli azpiko root kausa 15 00:00:37,000 --> 00:00:39,000 erronka daiteke, 16 00:00:39,000 --> 00:00:42,000 baina zorionez, ez deitu Valgrind lagungarria programa bat da 17 00:00:42,000 --> 00:00:44,000 asko egin dezake laguntzeko. 18 00:00:44,000 --> 00:00:47,000 >> Valgrind pean programa exekutatu nahiko duzu gaitzeko 19 00:00:47,000 --> 00:00:50,000 zabala zeure memoria zuzkiduretan eta sarbideak egiaztatzea. 20 00:00:50,000 --> 00:00:53,000 Valgrind arazoren bat detektatzen, ematen du berehalako 21 00:00:53,000 --> 00:00:56,000 zuzeneko informazioa ematen dizu, 22 00:00:56,000 --> 00:00:58,000 erraz aurkitu eta arazoa konpondu. 23 00:00:58,000 --> 00:01:01,000 Valgrind ere, memoria gutxiago hilgarria gaiei buruzko txostenak, 24 00:01:01,000 --> 00:01:04,000 hala nola, memoria filtrazioen, zeure memoria esleitzean, 25 00:01:04,000 --> 00:01:07,000 eta askatzea ahaztu. 26 00:01:07,000 --> 00:01:10,000 Atsegin dut gure konpiladorea, Clang, gure arazketan, GDB, 27 00:01:10,000 --> 00:01:14,000 Valgrind software librea da, eta tresnaren instalatu da. 28 00:01:14,000 --> 00:01:16,000 Bitarrak exekutagarri on Valgrind bidez, 29 00:01:16,000 --> 00:01:20,000 ez. c edo h iturburu-kodea fitxategiak, 30 00:01:20,000 --> 00:01:23,000 beraz, ziurtatu konpilatu duzula zure programaren kopia up-to-data 31 00:01:23,000 --> 00:01:25,000 Clang erabiliz edo egin. 32 00:01:25,000 --> 00:01:28,000 Ondoren, programa exekutatzen Valgrind pean izan daiteke 33 00:01:28,000 --> 00:01:32,000 hitza Valgrind programa komando estandarrak aurretik bezain erraza, 34 00:01:32,000 --> 00:01:35,000 Valgrind martxan eta programa exekutatzen barruan. 35 00:01:35,000 --> 00:01:38,000 Hasita, Valgrind du konplexu batzuk 36 00:01:38,000 --> 00:01:41,000 exekutagarriaren memoria egiaztapen konfiguratzeko jiggering 37 00:01:41,000 --> 00:01:44,000 beraz, pixka bat hartu ahal izango du, jaiki eta martxan. 38 00:01:44,000 --> 00:01:48,000 Orduan programa exekutatu normalean, askoz ere, poliki-poliki, 39 00:01:48,000 --> 00:01:52,000 eta noiz bukatzen da, bere memoriaren erabilpena Valgrind laburpen bat inprimatuko ditu. 40 00:01:52,000 --> 00:01:58,000 Dena ondo badoa bada, zerbait itxura izango dute: 41 00:01:58,000 --> 00:02:01,000 Kasu honetan,. / Clean_program 42 00:02:01,000 --> 00:02:04,000 programa exekutatu nahi dut bidea. 43 00:02:04,000 --> 00:02:06,000 Eta hau ez du argumenturik hartzen, 44 00:02:06,000 --> 00:02:09,000 egin bada Tack ohikoa den bezala komando amaieran nuke. 45 00:02:09,000 --> 00:02:12,000 Clean programa programa txiki bat besterik ez silly I sortu da 46 00:02:12,000 --> 00:02:15,000 ints bloke bat espazio esleitzen zeure gainean, 47 00:02:15,000 --> 00:02:19,000 jarri balio batzuk horien barruan,, eta blokea osoa askatzen. 48 00:02:19,000 --> 00:02:23,000 Hau da, ez akatsak eta ihesak ez zaren tiro. 49 00:02:23,000 --> 00:02:27,000 >> Metriko Another garrantzitsua bytes esleitutako kopuru osoa da. 50 00:02:27,000 --> 00:02:32,000 Programaren arabera, zure zuzkiduretan megabyte edo handiagoa bada, 51 00:02:32,000 --> 00:02:34,000 ziurrenik, zerbait gaizki egiten ari zaren. 52 00:02:34,000 --> 00:02:37,000 Dira bikoiztuak alferrik gordetzeko? 53 00:02:37,000 --> 00:02:40,000 Erabiltzen ari zeure duzun biltegiratze, hobeto egongo litzateke pila erabili? 54 00:02:40,000 --> 00:02:43,000 Beraz, memoria akatsak benetan gaiztoak izan daitezke. 55 00:02:43,000 --> 00:02:46,000 Ageriko dira gehiago eragiten ikusgarria kraskatzen, 56 00:02:46,000 --> 00:02:49,000 baina gero, oraindik ere zaila apuntatzeko daiteke 57 00:02:49,000 --> 00:02:51,000 zer Kraskadurari ekarri zuen. 58 00:02:51,000 --> 00:02:54,000 Gehiago insidiously, memoria errore bat programa bat 59 00:02:54,000 --> 00:02:56,000 oraindik konpilatu garbian 60 00:02:56,000 --> 00:02:58,000 eta oraindik dirudi behar bezala lan egiteko 61 00:02:58,000 --> 00:03:01,000 kudeatzen zortea denbora gehiena iritsi delako. 62 00:03:01,000 --> 00:03:04,000 Batzuk igaro ondoren "arrakasta emaitza" 63 00:03:04,000 --> 00:03:07,000 kraskadura baten ordenagailua Fluke bat da besterik ez pentsatzea, 64 00:03:07,000 --> 00:03:10,000 baina ordenagailua ez da inoiz okerra da. 65 00:03:10,000 --> 00:03:13,000 >> Valgrind carrera behera jarraipena memoria ikusgai akatsak kausa 66 00:03:13,000 --> 00:03:18,000 baita aurkitu akatsak lurking ez duzu, nahiz eta oraindik ezagutzen. 67 00:03:18,000 --> 00:03:22,000 Denbora bakoitzak Valgrind arazoren bat detektatzen, zer behatu buruzko informazioa bistaratzen du. 68 00:03:22,000 --> 00:03:24,000 Elementu bakoitzak nahiko laburtuta 69 00:03:24,000 --> 00:03:27,000 iturburua konpondu instrukzio-line, zer gai da, 70 00:03:27,000 --> 00:03:30,000 eta parte hartzen duten memoria buruzko informazio pixka bat 71 00:03:30,000 --> 00:03:34,000 baina askotan informazio nahikoa da zure arreta leku egokian zuzentzeko. 72 00:03:34,000 --> 00:03:37,000 Hona hemen, buggy programa exekutatzen Valgrind adibide bat da 73 00:03:37,000 --> 00:03:40,000 zeure memoria irakurri baliogabe bat du. 74 00:03:40,000 --> 00:03:49,000 Akatsik ez edo abisu konpilazio ikusten dugu. 75 00:03:49,000 --> 00:03:53,000 Uh oh, error laburpena dio bi akatsak daudela - 76 00:03:53,000 --> 00:03:56,000 baliogabea tamaina 4 bi Irakurketa byte, hau da. 77 00:03:56,000 --> 00:04:01,000 Txarra Bi irakurtzen invalid_read.c funtzio nagusia gertatu zen, 78 00:04:01,000 --> 00:04:04,000 lehen on line 16 eta 19 on line bigarrena. 79 00:04:04,000 --> 00:04:06,000 Dezagun begiratu kodea. 80 00:04:06,000 --> 00:04:11,000 Lehenengo deialdian printf saiatzen int bat irakurri gure memoria bloke amaieran, azken Looks like. 81 00:04:11,000 --> 00:04:13,000 Dugu atzera Valgrind irteera, 82 00:04:13,000 --> 00:04:16,000 Valgrind zigun zehazki dela ikusiko dugu. 83 00:04:16,000 --> 00:04:19,000 Helbide irakurri saiatzen ari gara hasten 0 byte 84 00:04:19,000 --> 00:04:22,000 tamaina 16 bytes bloke amaieran, azken 85 00:04:22,000 --> 00:04:25,000 32-bit lau ints esleituko dugu. 86 00:04:25,000 --> 00:04:29,000 Hau da, helbidea irakurri saiatzen ziren dugu, gure bloke amaieran hasiko da, 87 00:04:29,000 --> 00:04:32,000 gure printf txarra dei bezala ikusten dugu. 88 00:04:32,000 --> 00:04:36,000 Orain, Irakurketa baliogabea aurre big horrela agian ez dirudi, 89 00:04:36,000 --> 00:04:39,000 baina ari zaren datu horiek erabiliz gero, programaren fluxua kontrolatzeko 90 00:04:39,000 --> 00:04:42,000 adibidez, baten zati gisa deklarazioa edo begizta - 91 00:04:42,000 --> 00:04:45,000 ondoren, gauzak isilean joan txarra. 92 00:04:45,000 --> 00:04:47,000 Watch nola invalid_read programa exekutatu ahal izango dut 93 00:04:47,000 --> 00:04:50,000 eta ez da ezer gertatzen da ohiko. 94 00:04:50,000 --> 00:04:52,000 Scary, eh? 95 00:04:52,000 --> 00:04:56,000 >> Orain, akatsak gehiago mota baliteke zure kodea topo begiratu, 96 00:04:56,000 --> 00:04:59,000 eta ikusi nola Valgrind detektatzen dugu. 97 00:04:59,000 --> 00:05:01,000 Ikusi besterik ez dugu invalid_read baten adibide bat, 98 00:05:01,000 --> 00:05:04,000 beraz, gaur egun utzi check out invalid_write bat. 99 00:05:04,000 --> 00:05:09,000 Berriz ere, akatsik ez edo abisu konpilazio. 100 00:05:09,000 --> 00:05:12,000 Ados, Valgrind dio ez direla bi programa honetan akatsik 101 00:05:12,000 --> 00:05:15,000 eta invalid_write eta invalid_read bat. 102 00:05:15,000 --> 00:05:18,000 Dezagun check out kode hau. 103 00:05:18,000 --> 00:05:21,000 Looks ditugu got bezala strlen klasiko gehi bat bug instantzia bat. 104 00:05:21,000 --> 00:05:24,000 Kodea ez malloc byte espazioa extra 105 00:05:24,000 --> 00:05:26,000 / 0 pertsonaia, 106 00:05:26,000 --> 00:05:30,000 beraz, kopia str joan idazteko ssubstrlen "cs50 rocks!" 107 00:05:30,000 --> 00:05:33,000 1 byte idatzi gure bloke amaieran iragana. 108 00:05:33,000 --> 00:05:36,000 Invalid_read dator gure dei egiten dugu printf. 109 00:05:36,000 --> 00:05:40,000 Printf eta ondorioz baliogabe memoria irakurtzen / 0 karakterea irakurtzen 110 00:05:40,000 --> 00:05:43,000 , E kate honen amaieran itxura inprimatzeko. 111 00:05:43,000 --> 00:05:45,000 Baina hau ez Valgrind ihes egin. 112 00:05:45,000 --> 00:05:48,000 Harrapatu duela invalid_write str kopia zati gisa ikusten dugu 113 00:05:48,000 --> 00:05:51,000 line 11 nagusia, eta invalid_read printf zati da. 114 00:05:51,000 --> 00:05:54,000 Rock, Valgrind. 115 00:05:54,000 --> 00:05:57,000 Berriz ere, hori ez aurre handi bat bezala dirudi. 116 00:05:57,000 --> 00:06:00,000 Programa hau exekutatu ahal izango dugu, eta gehiago baino gehiagoko Valgrind kanpo 117 00:06:00,000 --> 00:06:03,000 eta ez ikus edozein errore sintomak. 118 00:06:03,000 --> 00:06:06,000 >> Hala eta guztiz ere, utzi hau apur aldakuntza begiratu ikusi 119 00:06:06,000 --> 00:06:09,000 gauzak nola oso txarra lor daiteke. 120 00:06:09,000 --> 00:06:14,000 Beraz, eman, gauzak ari gara abusing bakarrik kode hau pixka bat baino gehiago. 121 00:06:14,000 --> 00:06:17,000 Bakarrik ari gara espazio esleitzean zeure gainean bi kateak 122 00:06:17,000 --> 00:06:19,000 cs50 arroka luzera, 123 00:06:19,000 --> 00:06:22,000 Une honetan, pertsonaia / 0 gogoratzeko. 124 00:06:22,000 --> 00:06:25,000 Baina orduan bota super-kate luzea dugu memoriarekin blokea 125 00:06:25,000 --> 00:06:27,000 S da seinalatuz. 126 00:06:27,000 --> 00:06:30,000 Zer eragina duten memoria blokea T puntu hori? 127 00:06:30,000 --> 00:06:34,000 Beno, T memoria puntu besterik S aldameneko bada, 128 00:06:34,000 --> 00:06:37,000 ondoren, hurrengo 129 00:06:37,000 --> 00:06:39,000 ondoren, T. zati baino gehiago dugu agian idatzi 130 00:06:39,000 --> 00:06:41,000 Dezagun kode hau exekutatu. 131 00:06:41,000 --> 00:06:43,000 Gertatutakoa behatu. 132 00:06:43,000 --> 00:06:47,000 Kateak gordetzen dugu gure zeure bi blokeetan agertu inprimatutako ondo. 133 00:06:47,000 --> 00:06:49,000 Ezer ez dirudi oker guztiak. 134 00:06:49,000 --> 00:06:52,000 Hala eta guztiz ere, goazen atzera gure kodea sartu eta 135 00:06:52,000 --> 00:06:55,000 komentatu line non cs50 arroka kopiatu dugu 136 00:06:55,000 --> 00:06:59,000 memoria bigarren bloke batean, t adierazi. 137 00:06:59,000 --> 00:07:02,000 Orain, kode hau exekutatzen dugu egin beharko lukete 138 00:07:02,000 --> 00:07:06,000 bakarrik ikus memoria lehen blokea edukia inprimatzeko. 139 00:07:06,000 --> 00:07:09,000 Tira, nahiz eta ez genuen kopia str 140 00:07:09,000 --> 00:07:12,000 zeure bigarren bloke batean edozein karaktere, T by adierazi 141 00:07:12,000 --> 00:07:15,000 inprimatu bat lortuko dugu. 142 00:07:15,000 --> 00:07:18,000 Izan ere, kate beteak gure lehen blokea 143 00:07:18,000 --> 00:07:21,000 gainezkatua lehen bloke eta bigarren bloke batean, 144 00:07:21,000 --> 00:07:23,000 dena, badirudi normal egiteko. 145 00:07:23,000 --> 00:07:26,000 Valgrind, nahiz eta, egia kontatzen digu istorioa. 146 00:07:26,000 --> 00:07:28,000 Bertan dugu. 147 00:07:28,000 --> 00:07:32,000 Baliogabe horiek guztiak irakurtzen eta idazten du. 148 00:07:32,000 --> 00:07:36,000 >> Dezagun akats mota beste adibide bat begiratu. 149 00:07:36,000 --> 00:07:39,000 Hemen, zerbait zorigaiztoko egiten dugu. 150 00:07:39,000 --> 00:07:41,000 Espazio grab dugu zeure e int 151 00:07:41,000 --> 00:07:45,000 p -, espazio hori seinalatu eta int erakuslea hasieratu dugu. 152 00:07:45,000 --> 00:07:48,000 Hala eta guztiz ere, gure erakuslea da hasieratu, berriz, 153 00:07:48,000 --> 00:07:52,000 dela eta seinalatuz datuak besterik ez du, edozein dela ere junk zeure-zatia da. 154 00:07:52,000 --> 00:07:55,000 Beraz, datu horiek kargatu dugu int i sartu 155 00:07:55,000 --> 00:07:57,000 hasieratu teknikoki i, 156 00:07:57,000 --> 00:08:00,000 baina hain egiten dugu junk datuekin. 157 00:08:00,000 --> 00:08:03,000 Deialdia, urari handy arazketa makro 158 00:08:03,000 --> 00:08:06,000 aldarrikatzeko egokiekin izeneko liburutegian definitu, 159 00:08:06,000 --> 00:08:09,000 izango da programa bere test baldintza huts egiten badu bertan behera utzi. 160 00:08:09,000 --> 00:08:11,000 Hau da, i ez bada, 0. 161 00:08:11,000 --> 00:08:14,000 Zeure espazioa zen arabera, p adierazi 162 00:08:14,000 --> 00:08:18,000 Programa hau batzuetan lan egin dezake, eta beste garai batzuetan huts egitea. 163 00:08:18,000 --> 00:08:20,000 Lan egiten bada, zortea besterik ari gara lortzean. 164 00:08:20,000 --> 00:08:24,000 Konpilatzailea izango da ez harrapatzeko errore hau, baina ziur borondate Valgrind. 165 00:08:24,000 --> 00:08:28,000 Errore gure junk datuak erabilera eratorritako ikusiko dugu. 166 00:08:28,000 --> 00:08:32,000 >> Zeure memoria esleitu duzu, baina ez deallocate edo askatzea, 167 00:08:32,000 --> 00:08:34,000 leak bat dela deritzo. 168 00:08:34,000 --> 00:08:37,000 Txiki, labur-bizi programa doan eta berehala, irteerak, 169 00:08:37,000 --> 00:08:39,000 filtrazioen dira nahiko arriskutsua izan daiteke, 170 00:08:39,000 --> 00:08:42,000 baina tamaina handiagoa eta / edo bizitza-luzeraren proiektu bat, 171 00:08:42,000 --> 00:08:46,000 txiki leak ere zerbait garrantzitsu konposatu. 172 00:08:46,000 --> 00:08:49,000 CS50 For, espero ez dugun 173 00:08:49,000 --> 00:08:51,000 zaindu zeure memoria esleitu guztiak askatzeaz 174 00:08:51,000 --> 00:08:54,000 nahi dugu, gaitasunak eraikitzeko eskuzko prozesua behar bezala kudeatzeko geroztik 175 00:08:54,000 --> 00:08:56,000 C. eskatzen 176 00:08:56,000 --> 00:08:59,000 Horretarako, programa zehatza izan behar du 177 00:08:59,000 --> 00:09:03,000 bat-to-one malloc eta doako deiak arteko korrespondentzia. 178 00:09:03,000 --> 00:09:06,000 Zorionez, Valgrind duzu lagun dezake memoria filtrazioak ere. 179 00:09:06,000 --> 00:09:09,000 Hemen izeneko leak.c leaky programa bat da bideratzen 180 00:09:09,000 --> 00:09:13,000 zeure buruzko espazioa, idazten du, baina ez du libratzeko. 181 00:09:13,000 --> 00:09:16,000 Konpilatu dugu egin eta exekutatu Valgrind pean, 182 00:09:16,000 --> 00:09:18,000 eta ikusiko dugu, berriz, ez memoria akatsak, 183 00:09:18,000 --> 00:09:20,000 dute bat egiten dugu leak. 184 00:09:20,000 --> 00:09:23,000 Badira 16 byte behin betiko galdu, 185 00:09:23,000 --> 00:09:27,000 memoria horretan erakuslea ez zela esparrua da programa amaitu da zentzua. 186 00:09:27,000 --> 00:09:30,000 Orain, Valgrind ez ematen diguten leak buruzko informazioa tona bat, 187 00:09:30,000 --> 00:09:35,000 baina jarraituko dugu ohar hau txikia bada ematen dion bere txostenaren behealdeko 188 00:09:35,000 --> 00:09:38,000 berrabiarazi - leak-check = full 189 00:09:38,000 --> 00:09:41,000 memoria leaked osoa xehetasunak ikusteko, 190 00:09:41,000 --> 00:09:44,000 Informazio gehiago lortzeko egingo dugu. 191 00:09:44,000 --> 00:09:46,000 Orain, zeure laburpen, 192 00:09:46,000 --> 00:09:50,000 Valgrind kontatzen digu non memoria galdu zen, hasieran esleitu zen. 193 00:09:50,000 --> 00:09:52,000 Bezala ezagutzen iturburu-kodea bilatzen dugu. 194 00:09:52,000 --> 00:09:55,000 Valgrind jakinarazten digu leaked dugun memoria 195 00:09:55,000 --> 00:09:58,000 malloc dei on line 8 leak.c esleitu 196 00:09:58,000 --> 00:10:00,000 funtzio nagusia. 197 00:10:00,000 --> 00:10:02,000 Pretty nifty. 198 00:10:02,000 --> 00:10:04,000 >> Valgrind guztiak sailkatu filtrazioen baldintza hauek erabiliz: 199 00:10:04,000 --> 00:10:07,000 Definitely galdu zeure memoria esleitu da 200 00:10:07,000 --> 00:10:10,000 duen programa jada ez du erakuslea. 201 00:10:10,000 --> 00:10:14,000 Valgrind daki behin erakuslea izan zuen, baina geroztik, pista galdu. 202 00:10:14,000 --> 00:10:17,000 Memoria hori behin betiko leaked. 203 00:10:17,000 --> 00:10:20,000 Zeharka galdu zeure memoria esleitu da 204 00:10:20,000 --> 00:10:24,000 zein da erakusleak bakarra ere galdu egiten dira. 205 00:10:24,000 --> 00:10:27,000 Esate baterako, galdu duzu zure lehen nodo zerrenda lotuta erakuslea bada, 206 00:10:27,000 --> 00:10:30,000 ondoren, lehen nodo berak behin betiko galdu egingo litzateke, 207 00:10:30,000 --> 00:10:34,000 ondorengo nodo edozein zeharka, berriz, galdu. 208 00:10:34,000 --> 00:10:37,000 Baliteke galdu zeure memoria esleitu da 209 00:10:37,000 --> 00:10:41,000 diren Valgrind ezin izan ziur ea erakuslea edo ez. 210 00:10:41,000 --> 00:10:44,000 Oraindik `zeure memoria esleitu da 211 00:10:44,000 --> 00:10:47,000 duen programa oraindik erakuslea irtetean, 212 00:10:47,000 --> 00:10:50,000 izaten esan nahi du aldagai global bat eta puntu. 213 00:10:50,000 --> 00:10:53,000 Filtrazioen horiek egiaztatzeko, aukera ere izango duzu, besteak beste. 214 00:10:53,000 --> 00:10:55,000 - Oraindik eskuratu = yes 215 00:10:55,000 --> 00:10:58,000 zure Valgrind deitzeko. 216 00:10:58,000 --> 00:11:01,000 >> Kasu hauek estrategia ezberdinak garbiketa sortu behar izatea, 217 00:11:01,000 --> 00:11:05,000 baina filtrazioak ezabatu behar. 218 00:11:05,000 --> 00:11:08,000 Zoritxarrez, ihesak konpontzen zaila egin daiteke, 219 00:11:08,000 --> 00:11:11,000 okerra doako deiak kolpe geroztik zure programa. 220 00:11:11,000 --> 00:11:14,000 Esate baterako, invalid_free.c begiratuz gero, 221 00:11:14,000 --> 00:11:18,000 memoria txarra deallocation adibide bat ikusiko dugu. 222 00:11:18,000 --> 00:11:21,000 Osoa blokea askatzea dei bakar bat izan behar du. 223 00:11:21,000 --> 00:11:24,000 memoria int_block by adierazi 224 00:11:24,000 --> 00:11:27,000 int tamaina atal bakoitzean askatzea ordez saiakera bat bihurtu 225 00:11:27,000 --> 00:11:29,000 memoria banan-banan. 226 00:11:29,000 --> 00:11:32,000 Hau catastrophically huts egingo du. 227 00:11:32,000 --> 00:11:34,000 Boom! Zer errore bat. 228 00:11:34,000 --> 00:11:36,000 Hau da, zalantzarik gabe, eta ez da ona. 229 00:11:36,000 --> 00:11:39,000 Zu akats mota hau itsatsita, nahiz eta ez dakizu non begiratu, 230 00:11:39,000 --> 00:11:41,000 erori atzera zure lagun berria onena. 231 00:11:41,000 --> 00:11:44,000 Asmatu duzu Valgrind. 232 00:11:44,000 --> 00:11:47,000 Valgrind, beti bezala, ez daki zehatz-mehatz zer. 233 00:11:47,000 --> 00:11:50,000 Esleipenen eta free zenbatzen ez datoz bat sortu. 234 00:11:50,000 --> 00:11:52,000 Esleipenen 1 eta 4 askatzen lortu dugu. 235 00:11:52,000 --> 00:11:55,000 Eta Valgrind ere kontatzen digu, non lehenengo txarra free dei - 236 00:11:55,000 --> 00:11:58,000 aktibatzen blowup bat da datozen 237 00:11:58,000 --> 00:12:00,000 line 16. 238 00:12:00,000 --> 00:12:03,000 Ikusten den bezala, txarra dei askatzea benetan txarra, 239 00:12:03,000 --> 00:12:05,000 beraz, zure programa leak uzteko gomendatzen dugu 240 00:12:05,000 --> 00:12:08,000 ari zaren funtzionalitatea zuzena egiten duten bitartean. 241 00:12:08,000 --> 00:12:12,000 Hasi filtrazioen bila soilik ondoren zure programa behar bezala "" funtzionatzen, 242 00:12:12,000 --> 00:12:14,000 akatsak beste edozein gabe. 243 00:12:14,000 --> 00:12:16,000 >> Eta hori guztia bideo honetan lortu dugu. 244 00:12:16,000 --> 00:12:18,000 Orain zer zain zaude? 245 00:12:18,000 --> 00:12:21,000 Joan zure programak exekutatu Valgrind oraintxe. 246 00:12:21,000 --> 00:12:25,000 Nire izena Nate Hardison da. Hau CS50 da. [CS50.TV]