[Musika jotzen] [Bideo-erreprodukzioa] -Hartu Etzanda. -Zeri buruz? -Nik Ez dakit. -Beraz, Zer dakigu? 9:15, Ray at -hau Santoya Kutxazain zen. -Bai. Beraz, galdera da, zer zen egiten 9:16? 9 milimetro zerbait at -Filmaketa. Agian frankotiratzaile ikusi zuen. -Edo Zen berarekin lanean. -ez Alde. Joan atzera. -Zer Ikusi? Bere aurpegia -Ekarri pantaila osoan eman. -Bere Betaurrekoak. -Bada, Gogoeta bat da. -Ez Du Nuevitas beisbol taldea da. Beren logo. -Eta Hizketan duenarentzat jaka hori janzten. [END erreprodukzioa] DAVID MALAN: Ondo da. Hau CS50 da, eta hau da, pixka bat gehiago [INAUDIBLE] horrekin Oraindik arazoa ekoizleekin ezarri lau. Gaur egun, gero pixka bat bilatzeko hasiko dugu sakon gauza horiek erakusleak deitzen denean, bertan egiten baldin bada ere a nahiko urrutira gaia, bihurtzen da hori egingo da bitartekoak izan nahi du horren bidez dugu eraikitzeko eta muntatzeko has daiteke programak askoz ere sofistikatuagoa. Baina lortu dugu azken asteazkenean claymation batzuk modu lehenengo arabera. Beraz, hau, gogoratzen, Hegazti eta hura erabiliko dugu programa bat begirada bat hartu nahi duten ez zuen benetan ezer interesgarria, baina arazo batzuk agerian geratu zen. Beraz, gaur hasiko da, zergatik ez dugu oinez Azkar urrats horiek gutxi batzuen bidez, saiatu giza en termino sartu destila zehazki zer gertatzen da hemen eta hori zergatik da txarra, eta ondoren, aurrera egiteko eta benetan hasteko zerbait eraikitzeko Teknika honekin? Beraz, hauek izan ziren lehenak Programa honetan bi lerro eta layman-terminoak, zer dira egiten bi lerro hauek? Norbait da arrazoiz eroso rekin zer pantaila deklaratu? Zer dira bi lerro horiek egiten? Ez da hori guztia astebete desberdinak, baina ez sinbolo berezi batzuk. Bai? Itzuli dago. Ikusleak: erakusleak geratuko? DAVID MALAN: Esan berriro? Ikusleak: erakusleak geratuko? DAVID MALAN: deklaratzea erakusleak eta dezagun pixka bat gehiago findu da. Ikusleak: [INAUDIBLE] helbide x eta y gero. DAVID MALAN: Eta gero aurre. Beraz, zehazki zer egiten ari garen bi aldagai deklaratzen ari gara. Aldagai horiek, ordea, joan dira den mota int izarra, izan bertan zehatzago esanda, esan nahi dute gordetzeko doaz int baten helbidea, hurrenez hurren, x eta y. Orain daude baliorik? Ba al dago helbide hauek benetako edozein Bi aldagai une honetan? No. Besterik zabor balio deiturikoak. Eta ez duzu benetan esleitzeko bada aldagaia, edozein RAM zen Aurretik dagoen zeroz bete joan eta bai aldagai horiek biak. Baina ez dugu oraindik ezagutzen zer dira eta hori da zergatik hegazti gakoa izango da Azken aste galdu zuen bere burua. Beraz, hau izan zen claymation du Enkarnazio Horren bidez, aldagai bi besterik ez duzu, buztinezko pieza zirkular gutxi, duten aldagaiak gorde ahal izateko, baina, the bilduta geziak iradokitzen, ari ez benetan seinalatuz edonon ezagutzen per se. Beraz, ondoren, lerro hau izan genuen, eta hau zen berria, eta azken astean, memoria malloc esleipena, modu fancy bat besterik ez da sistema eragilearen kontatzea, Linux edo Mac OS edo Windows, beno, ematen dit memoria batzuk, eta guztia duzu kontatzeko sistema eragilea zer denean eskatuz memoria da. Ez da zer axola joan zu berarekin egin egingo, baina behar duzu eragilearen kontatzeko sistema zer malloc bidez. Bai? Ikusleak: Zenbat? DAVID MALAN: Zenbat? Zenbat byte, eta beraz, hau, berriz ere, Adibidez contrived bat, besterik gabe, esaten da eman dit int tamaina. Orain, int baten tamaina lau byte edo 32 bit. Beraz, hori besterik ez da modu bat da esanez, beno, sistema eragilea, eman dit lau byteko memoria ahal izango dut nire esku erabiltzea, eta, zehazki, zer egiten du Bueltan malloc aldean lau byte zatia duen? Ikusleak: Helbidea? DAVID MALAN: helbide. Lau byte zatia duen helbidea. Hain zuzen ere. Eta beraz, zer ari da, azken finean gordetako da x eta horregatik ez dugu benetan zaintzeko zer dela-kopurua helbidea da, ox1 edo ox2 ote den edo batzuk críptica helbide hamaseitarra. Laguntza besterik ez dugu Pictorially x aldagai hori da orain dela zatia memoria hori seinalatuz. Beraz, gezia erakuslea adierazten du, edo zehatzago esanda, memoria-helbide bat. Baina, berriro ere, ez normalean zaintzen dugu zer da benetako helbide horiek dira. Orain, lerro hau dio zer layman-terminoak? Star x 42 puntu eta koma lortzen. Zer esan nahi du horrek? Joan nahi duzu? Ez urratu zure lepoan. Ikusleak: x helbide 42. dago. DAVID MALAN: x helbide 42. dago. Ez da nahiko. Hain hurbil, baina ez da nahiko, ez da delako izar hori x honen aurretik. Beraz, pixka bat pentsatzen gorde behar da. Bai? Ikusleak: bertan, balioa erakuslea x 42 hori seinalatuz. DAVID MALAN: OK. Balioa erakuslea x da seinalatuz, esan dezagun, hau izango da: 42, edo bestela esanda, izarraren x dio, edozein dela helbidera joan x da, ala ez da 1 Oxford Street edo 33 Oxford Street edo ox1 edo ox33, edozein dela zenbaki helbide dela, izar x x dereferencing da. Beraz, helbide horretara joan eta orduan jarri 42 zenbakian dago. Beraz, hori izango litzateke bat Hori esaten modu baliokidea. Beraz, hori guztia fina da eta, ondoren, Irudian adierazten genuke honela non gehitu ditugu 42 lau zatia duen du Eskuineko aldean byte, baina Lerro hau izan zen, non gauzak joan awry eta hegazti burua idatz puntu honetan off, gauza txarrak gertatuko dira zabor balio dereference duzu edo baliogabea dereference duzu erakusleak, eta baliogabeak esaten dut Puntu honetan delako Istorioa, zer y barruan dago? Zer da oinarritutako y balioa Iraganean urrats batzuk on? Bai? Zer da hori? Ikusleak: helbide bat. DAVID MALAN: Helbide bat. Helbide bat izan beharko luke baina izan da hasieratu dut? Beraz, ez daukat oraindik. Beraz, zer da ezaguna han izan? Batzuk zabor balio da. Zero tik helbide edozein izan daiteke 2 milioi bi RAM kontzertuak izanez gero, edo zero 4 milioi dut badituzu lau RAM gigabyte lortu. Zabor balio batzuk da, baina arazoa da sistema eragilea, ez du ematen duzu bada memoria zatia, zehazki, ra joan saiatzen ari zaren, Da, oro har, zer eragin Nik segmentazio matxura bat bezala ikusten dugu. Beraz, hain zuzen ere, zuk edozein duten bulego orduetan arazoak at lehian edo arazoak direla gehiago Oro har, irudikatu nahian ekin segmentazio matxura bat, Hori normalean esan segmentu bat zaren ukitu memoria hori ez da behar duzu. Zu memoria ukitu hori sistema eragilearen ez dauka onartzen den ukitu, ea Urrunegi joan zure lerrotan arabera edo orain hasita, ala çueçaz ari delako memoria hori besterik zabor balio batzuk. Beraz izar x bat burutzen ari da undefined portaera-mota. Inoiz egin behar duzun da odds delako dira, programan besterik huts egingo, ari zaren esaten delako, helbide honetara joan eta ez daki non helbide hori benetan da. Beraz, sistema eragilea, litekeena da Zure programa huts joan Ondorioz, eta hain zuzen ere, hori da Hain justu hegazti izateko. Beraz, azken finean, hegazti finkoa Honekin arazo hau. Beraz, programa hori bera hondatu zen. Baina ordenatu ema bada aurretik eta lerro hau exekutatu beharrean, y funtzioak x besterik esan nahi edozein dela helbide x da, halaber, ipini y en. Eta beraz Pictorially, dugu irudikatzen honek bi geziak x eta y keinuak ikusita leku berean. Beraz, semantikoki, x berdina da y nahi dutenek, bai delako daude berean gordetzeko helbidea, ergo 42 seinalatuz, eta orain, izar esan duzu y, joan helbide honetara y batean, hau albo efektu interesgarri bat du. Beraz y helbidea da x-en helbide berdina. Beraz, bada, joan helbidea esan duzu y eta balioa aldatzeko 13ra, nor gehiago eragiten dio? X da, D puntua, nolabait esateko, eragingo zaion baita. Eta, hain zuzen, nola Nick Drew argazki hau claymation zehazki noiz izan zen. Erakuslea jarraituko dugu, nahiz eta y, bukatu dugu, leku berean, eta beraz, inprimatzeko bagenitu x edo y en pointee out, ondoren, 13 balioa ikusiko genuke. Orain, pointee izan esaten dut Bideo koherentea. Programatzaileak, nire ezagutza, inoiz benetan Hitz pointee diotenez, imita zorrotzeko tan, baina koherentzia bideo batera, konturatzen hori da hori izan zen guztia Egoera horretan ekarri. Beraz claymation buruzko edozein galdera edo erakusleak edo malloc besterik gabe? No? Ados. Beraz gehiagorik gabe ADO, dezagun begirada bat non Honek benetan at aspalditik erabiltzen da. Beraz CS50 liburutegia hau izan dugu hori funtzio horiek guztiak lortu. Erabili dugu GetInt asko, GetString, ziurrenik GetLongLong lehenago Nire pset bat edo, beraz, baina zer benetan liteke, gero! Beno, dezagun begirada bat programa batean kanpaia azpian dagoela inspiratzen zergatik CS50 eman dugu liburutegia, eta hain zuzen ere, joan den astean bezala, horiek hartzen hasi ginen prestakuntza gurpilak off. Beraz, orain da hau horrela antolatu ren autopsia bat zer da gertatzen CS50 liburutegi barruan, nahiz eta orain mugitzen hasiko da programak gehienak kanpoan. Beraz, hau 0 scanf izeneko programa bat da. It super laburra da. , Lerro hauen ditu, baina izeneko funtzio scanf bat aurkezten du ari gara benetan ikusten joan une bat CS50 liburutegiaren barruan, pixka bat eta beste inprimaki batean bada ere. Beraz, programa hau on line 16 x aldagai bat geratuko da. Beraz, ematen dit lau byte int bat da. Izan da erabiltzaile kontatzea, Zenbaki mesedez, eta ondoren, hau lerro interesgarri bat da benetan lotzen elkarrekin azken astean eta hau. Scanf, eta orduan konturatu bat hartzen du formatu katea bezala printf, % I int bat esan nahi du, eta, ondoren, bat hartzen du zein itxura apur bat bigarren argumentu funky. Ampersand x da, eta gogoratzen, behin azken aste honetan bakarrik ikusi genuen. Zer adierazten du ampersand x? Zer esan nahi du C egin ampersand? Bai? Ikusleak: helbide. DAVID MALAN: helbide. Beraz, kontrakoa da izar operadorea, star operadorea dio berriz, joan den helbide honetan, ampersand operadorea dio, irudikatu du aldagai horren helbidea, eta, beraz, hau da gakoa, zeren scanf bizitzako helburua da eskaneatu Erabiltzaile egin teklatuaren sarrera, edozein dela kontuan hartuta, berak mota, eta, ondoren, erabiltzaile horren sarrerako irakurri aldagai bat sartu da, baina ez dugu Azken bi asteetan ikusi swap funtzioa dela garela saiatu ahaleginik ezartzea hezi zen. Gogoratu swap funtzioa, deklaratu besterik ez dugu bada A eta B ints bezala, dugu arrakastaz trukatu zituen lortu swap barruan bi aldagai besterik esnea eta AO gustatzen, baina swap bueltatu bezain laster, zer aldean izan zen emaitza x eta y, jatorrizko balioak? Ezer ez. Bai. Nothing denbora hori gertatu da, zeren swaps bertako kopiak bakarrik aldatzen, horrek esan nahi du, guztiak oraingoan, betiere dugu alegaziorik igaroz funtzio den, ez gara besterik argumentuak horiek kopiak pasatuz. Hori egin dezakezu edozein dela ere nahi haiekin, baina ari dira ez dute joan jatorrizko balioen eragina. Beraz, hau da problematikoa baduzu scanf bezalako funtzio bat izan nahi bizitzan, eta horren helburua da eskaneatu erabiltzailearen teklatu sarrera eta, ondoren, hutsuneak bete, beraz, hitz egiten du, hau da, eman x aldagai bat bezala balio bat, banintz delako besterik pasatzeko x scanf, azken logikak pentsatzen baduzu astean, edozein izanda ere nahi egin dezakezu scanf x kopia batekin, baina ezin izan da betirako x aldatuko dugu eman ezean scanf altxorra mapa bat, nolabait esateko, non x spot markatzen du, eta horren bidez x helbidea beraz pasako dugu scanf han eta benetan aldaketaren joan x-ren balioa. Eta hain zuzen ere, guztiak programa honek ez duela scanf 0, egin dut nire iturri ere bada 5m direktorioa, scanf 0, dot barra scanf, zenbakia Mesedez, 50, 50, esker. Beraz, ez da hori guztia interesgarria, baina zer gertatzen ari den, hain zuzen ere dela eta azkarren deitu dudan bezala scanf hemen, x balioa ari da betirako aldatu. Orain, badirudi hau polita eta ona, eta, hain zuzen, hura Dirudienez, ez dugu atsegin benetan behar CS50 liburutegia guztia jada at. Esate baterako, exekutatu utzi hau hemen berriz ere. Let it berrireki me bigarren bat. Dezagun saiatu zenbaki bat mesedez eta ordez 50 baino lehen bezala esaten, dezagun esan ez. Ados, hori apur bat arraroa da. ONDO DA. Eta besterik zentzugabekeria batzuk hemen. Beraz, ez direla dirudi Egoerak okerrak kudeatzeko. Beraz, hasiera txikieneko behar dugu Zenbait erroreen zainketa gehituz Ziur Erabiltzaileak ez du egin Benetako zenbaki oso bat idatzi 50 bezala, itxuraz idazten hitzak delako ez da problematikoa bezala detektatu, baina seguruenik behar izango. Ikus ditzagun bertsio honetan orain hori da nire saiakera GetString reimplement. Scanf du honek guztiak galtzen funtzionalitate eraiki, zergatik dugun urari dute hauekin GetString bezalako prestakuntza gurpilak? Beno, hemen da, beharbada, nire kabuz GetString bertsio simple Horren bidez, duela aste bat, agian esan nahi izan, emaidazu kate bat eta deitu buffer. Gaur egun, naiz besterik hasteko noa char izarra, bertan, abisuaren esanez, besterik sinonimo da. Scarier Badirudi baina da gauza bera zehatza. Beraz, ematen dit aldakorra izeneko buffer bat hori kate bat gordetzeko joan, Erabiltzaile katea kontatu mesedez, eta, ondoren, besterik ez bezala, aurretik, Saiatu ikasgai honetan maileguan hartzeko utzi scanf % S denbora honetan, eta, ondoren, bufferrean pasatzeko. Orain, behatu check azkar bat. Zergatik nago, ez dut esaten ampersand buffer une honetan? Aurreko adibidea ondorioztatu. Ikusleak: Char izar erakuslea da. DAVID MALAN: Zehazki, oraingoan, char delako izarra da dagoeneko erakuslea, helbide bat, Izarrak ez izatearen definizio arabera. Eta scanf helbide bat espero badu, besterik nahi bufferrean pasatzeko nahikoa da. Ez dut behar ampersand buffer esateko. Bitxia, ezin izan duzu honen antzeko zerbait egin. Esanahi ezberdinak izan litzateke. Hau eman litzateke erakuslea erakuslea, hau da, benetan behar baliozko gauza bat C, baina alde orain, dezagun simple mantentzeko eta istorioa koherentea mantentzeko. Besterik ez naiz pasatzen da buffer eta hori zuzena da. Arazoa da, nahiz eta hau. Dezagun aurrera me eta exekutatu honetan programa konpilazioaren ondoren. Egin scanf 1. Malditos da, nire konpilatzailea en Nire error harrapatzeko. Give me bigarren bat. Clang. Demagun scanf-1.c. ONDO DA. Hor dugu. Behar dut. CS50 ID ezberdinak ditu konfigurazio ezarpenak hori babestu zeure burua aurka. By horiek desgaitu behar nuen Danbateko oraingo honetan eskuz martxan. Beraz, kate mesedez. Aurrera joan eta idatzi dut Nire gogoko kaixo mundua ere. Ados, nulua. Hori ez da zer idatzi dut. Beraz adierazgarri da zerbait gaizki izateagatik. Dezagun aurrera me eta idatzi kate luze batean. Null esker eta ez dakit naiz huts egin ahal izango bada. Dezagun saiatu kopia apur bat itsatsi eta ikusi hau laguntzen badu. Just itsatsi honek asko. Behin betiko handiago batean ohi baino katea. Dezagun, besterik gabe, benetan idazteko. No. Malditos da. Komandoa aurkitu. Beraz, hori zerikusirik da. Hori I itsatsiko delako karaktere txarra batzuk, baina hori bihurtzen da, lan egiteko, ez da joan. Demagun hau berriro saiatu horrek, izan ere, gehiago dibertigarria da benetan dugu kraska egiten bada. Dezagun idatzi hau eta bertan, ez dut benetan kate luzea kopiatu joan eta Orain ikusten baduzu, en dugu gauza hori hautsi dezake. Ohartu espazio zehazten ez dut eta lerro eta puntu berria eta funky karaktere guztiak. Sartu. Eta orain sarean besterik ez da motela izatea. Behera ospatuko dut Komando-V luzeegia, argi eta garbi. Madarikatua! Komandoa aurkitu. ONDO DA. Beno, kontua da hala ere, jarraian. Beraz, zer da benetan joan deklarazio honekin on char izar on line 16 buffer? Beraz, zer nago lortzean denean erakuslea deklaratzen dut? Guztiak nago lau byte balio bat da Buffer deitzen da, baina zer da barruan une honetan? Batzuk zabor balio da. Aldagai bat aldarrikatu duzu edonoiz delako C, zabor balio batzuk ere, eta ari gara hasita Errealitate hau gorako bidaia. Orain, scanf esango dut, helbide honetara joan eta edozein Erabiltzaile mota jarri. Kaixo erabiltzaile mota bada Mundu, bai, non ez dut jarri? Buffer zabor balio bat da. Beraz, hori da mota gezi bat bezala hori nork daki non seinalatuz. Agian eta seinalatuz hementxe nire oroimenean. Eta beraz, erabiltzaileak kaixo mundua motak, programa jarri saiatzen katea kaixo mundua backslash 0 zatia memoria hori ere. Baina probabilitate handia duten, baina argi eta garbi, ez% 100 probabilitatea, Ordenagailua da gero, huts joan Programaren hau da, ez delako memoria onartzen behar dut ukitu. Beraz, azken finean, programa hau da zehazki arrazoi horrengatik flawed. Naiz funtsean ez zer egiten? Zeintzuk izan dira, zehazten ez bezala besterik ez dut kendutako hegazti lehen adibidea dugu? Bai? Ikusleak: Memoriaren alokairuak? DAVID MALAN: Memoria esleipena. Ez dute benetan esleitu dut kate horretan dagoen edozein memoria. Beraz, hau konpondu ahal izango dugu modu pare bat ere. One, simple mantentzeko dezakegu eta hain zuzen ere, gaur egun, Oraindik lausotzeaz bat ikusteko hasteko joan zer arteko lerro baten sorta bat, kate bat zer da, zer da char izarra da, zer karaktere sorta bat da. Hemen Bigarren adibide bat da kateak eta oharra inplikatuz on line guztia egin dut 16 da, ordez esaten buffer hori char bat izango da izarra, memoria zatia erakuslea, Oso proaktiboan eman ditut Neure burua 16 karaktere buffer batean, eta hain zuzen ere, Oraindik ezagutzen bada Epe buferra batera, seguruenik bideoak mundutik, non video bat buferra, buferra da, buferra. Beno, zer da konexio hemen? Beno, Inside YouTube eta bideo-jokalari barruan Oro har, multzo bat da 16 baino handiagoa da. Tamaina bat array bat izango da agian megabyte, agian, 10 megabyte, eta array horretan navegador deskargatu byte-sorta oso bat, megabyte sorta oso bat Bideo eta bideo jokalari, Youtubeko edo duenarentzat da, hasten byte irakurtzean array horretatik aurrera, eta noiznahi ikusten duzu Hitz buferra, buferra, horrek esan nahi du jokalaria array horren amaieran ahaztuak. Sare oso geldoa ez duela da Array betetzen byte gehiago dituzten eta beraz ari bit atera duzu Erabiltzaile erakusteko. Beraz buffer epe tentuz Hemen da aurkitu besterik array bat, memoria zatia da. Eta hau konpondu beharko bihurtzen da delako Hori arrayak tratatzeko dezakezu bagina bezala helbideak dira, nahiz eta buffer arren da sinbolo bat besterik ez, bat da karaktere adierazteko, buffer, hori oso erabilgarria da niretzat, programatzailea, Inguruan bere izena gainditu dezakezu balu bezala izan ziren a erakusle da bagina bezala ziren zatia baten helbidea 16 chars oroitzeko. Beraz, esan nahi baita, ahal pasatzen dut scanf du zehazki hitz hori eta beraz, orain, programa hau egiten badut, scanf 2, dot barra scanf 2, eta mota kaixo mundua, Sartu, aldia dela Hmm, zer gertatu zen? String mesedez. Zer oker egin dut? Kaixo mundua, bufferraren. Kaixo Mundua. Ah, zer egiten ari da ezagutzen dut. ONDO DA. Beraz, irakurtzen ari da Lehenengo espazioa arte. Hargatik iruzur une bat besterik ez da, eta esan nahi dut zerbait idatzi Benetan luzea horrelako esaldi luze bat da hori da bat, bi, hiru, lau, bost, sei, zazpi, zortzi, bederatzi, 10, 11, 12, 13, 14, 15, 16. ONDO DA. Esaldi bat, hain zuzen ere. Esaldien hau da 16 karaktere baino gehiago eta beraz, Sartu sakatu dut, zer gertatuko? Beno, kasu honetan Istorioa, deklaratu nuen buffer benetan array bat izateaz 16 chars prest joan batera. Bat, bi, hiru, lau, bost, sei, zazpi, zortzi, bederatzi, 10, 11, 12, 13, 14, 15, 16. Beraz, 16 karaktere, eta orain, I Zerbait irakurri hau da luze bat bezala gertatuko da sententzia, zer ari joan naiz duten I honetan irakurri joan luzea da S-E-N-T-E-N-C-E, sententzia. Beraz, hau da, nahita gauza txarra dudala haratago idazten Nire mugak array, Nire buffer mugetatik haratago. Zortea eta programaren lortu nuen egingo zaintzeko exekutatzen jarrai dezan eta ez, baina, oro har, hau hain zuzen ere, nire programaren kraskatzea, eta akats bat dago, nire Oraingoz dut urratsa kode mugak array hori, nuelako ezagutzen ez bada nahitaez huts joan edo bada, besterik ez dut zortea iritsi. Beraz, hau da problematikoa delako Kasu honetan, lanera badirudi eta dezagun tempt patua hemen, nahiz eta IDE badirudi pixka bat nahiko jasatera of-- Hor dugu. Azkenik. Beraz, soilik bat, hori ikusi ahal izango naiz. Beraz, besterik gabe, fun Idazteko asko izan nuen Benetako Esaldi luzez egindako Hori, zalantzarik gabe gainditu zuen 16 byte, nuelako Lerro anitzeko luze ero honetan idatzitako esaldia, eta orduan konturatu zer gertatu zen. Programak saiatu da inprimatzeko eta gero lortu segmentazio matxura bat eta segmentazio hutsegite denean honen antzeko zerbait gertatzen da eta sistema eragilearen dio ez, ezin memoria ukitu. Hiltzeko goaz Programaren guztira. Beraz, hau problematikoa dela dirudi. Programaren zeinaren hobetu Nik gutxienez aukeratu memoria batzuk, baina horrek mugatuko badirudi litzateke Funtzio lortzean GetString du Zenbait luzera mugatua 16 kateak. Beraz, aurrerantzean gaitu nahi izanez gero Adibidea 16 karaktere baino, zer egin nahi duzu? Beno, handitu dezakezu 32ra buffer honen tamaina edo dirudiela motatako laburrean. Zergatik ez egin besterik ez dugu 1.000 baina bultza atzera. Zer da erantzunaren senez besterik eginez arazo hau saihestuz Nire buffer handiagoa, 1.000 karaktere bezala? Horrela GetString martxan jarriz. Zer da ona edo txarra hemen? Bai? Ikusleak: gora lotu duzu asko bada Espazioaren eta ez duzu erabili, gero, ezin duzu espazio hori berresleitzeko. DAVID MALAN: Absolutely. It parrastatzailea da ez duzun heinean balitz bezala benetan behar byte horiek 900 eta oraindik galdetzen ari zaren Guztira 1.000 hala ere, Zu besterik Memoria gehiago kontsumitzen duzu erabiltzailearen ordenagailuan behar baino, eta guztiak, batzuk ondoren Jada aurkitu du bizitzan zaudenean dagoela programak asko exekutatzen eta ari bat ireki Memoria asko jatea izango dute, hau benetan eragin dezake performance eta erabiltzailearen esperientzia ordenagailuaren aurrean. Beraz, mota horretako alferrak irtenbide bat da, ziur, eta alderantziz, bakarra da luxuzalea zer arazo oraindik ere izaten jarraitzen du, nire buffer egiten baditut ere 1.000? Bai? Ikusleak: katea luzera 1.001 da. DAVID MALAN: Zehazki. Zure katea luzera 1.001 badago, zehatza arazo bera izan duzu, eta nire argudioa arabera, nuke orduantxe egin da 2000an, baina ez dakizu in aurrera nola big izan beharko litzateke, eta, hala ere, ez dut nire programa konpilatzeko deskargatu dezazun aurretik jendeak erabili eta da. Beraz, hau zehazki mota da gauza CS50 liburutegia saiatzen dela lagunduko digu, eta begiratu bakarrik egingo dugu azpiko ezarpen batzuk hemen, baina hau da CS50 dot C. hau CS50 IDE ibilitako fitxategia da Aste hauetan guztietan duzula hemen erabiltzen dut. It aurrez konpilatutako da eta duzun izan da automatikoki erabiliz izatea izaeraren arabera etenaren L CS50 bandera Danbateko batez, baina behera joan I guztietan barrena bada Funtzio horiek, hona hemen GetString, eta besterik ez duzu eman nahi zaio zer gustua gertatzen da, dezagun begirada azkar batean konplexutasun erlatiboa. Ez da super luze bat funtzioa, baina ez genuen Guztiak gogor pentsatu behar nola kateak lortzean buruz joan. Hortaz, hona hemen nire buffer eta I itxuraz abiarazi null. Hau, jakina, da char izar gauza bera, baina erabaki dut CS50 liburutegia gauzatzeko goaz, bada erabat dinamikoa izan, Ez dut aldez baten zein handia ere ezagutzen katea erabiltzaile dira lortu nahi du. Beraz naiz martxan jarriko dut kate huts bat besterik ez eta naiz eraikitzeko bezainbeste noa memoria erabiltzaile katea egokitzeko behar dut eta ez badut dute nahikoa, nik eskatu dut memoria gehiagorako sistema eragilea. Beren katea mugitu noa memoria zatia handiagoa sartu eta naiz askatzeko edo askatzeko joan nintzen memoria zatia nahikoa handiak eta besterik ez goaz hau iteratively egin. Beraz, begiratu azkar bat, Hemen da aldagai bat besterik ez naiz segimendua egiteko, honekin joan Nire buffer edukiera du. Zenbat byte moldatzen dezaket? Hona hemen aldagai n a bertan noa mantentzeko joan zenbat byte Hemen benetan jarraipena buffer erabiltzaileak edo idatzi ditu. Ez ikusi duzun bada hau baino lehen, zehaztu ahal int bat bezala aldagai bat sinatu gabe dago, eta horrek Izenak dioen bezala, esan nahi ez negatiboa da, eta zergatik Inoiz zehaztera traba nahi dut int bat ez da bakarrik int, baina unsigned int bat da? Int ez negatiboa da. Zer egin [INAUDIBLE] esan nahi du? Ikusleak: zenbateko bat deskribatu da lukeen memoria [INAUDIBLE] izan daiteke. DAVID MALAN: Bai. Beraz, sinatu gabe esan nahi nizuke, hau da, benetan zuk aparteko memoria pixka bat emanez eta silly moduko dirudi, baina bazara osagarriak memoria pixka bat behar du, esan nahi du, bi aldiz izan duzu askotan bezala baloreak ordezkatzen dezakezu, 0 edo 1 izan daitekeelako. Beraz, besterik ezean, int bat gutxi gorabehera izan daiteke negatiboa 2 milioi modu guztiak 2 positiboa milioi. Horiek dira areak handia, baina oraindik motatako hondakin-ekoizpena buruz bakarra zaintzeko tamaina, eta horrek, intuizioa ez negatiboa izan behar du, edo positiboa edo 0, bai eta ondoren, zergatik ari zara alferrik galtzen 2 milioi zenbaki negatiboak balio posible bada inoiz ez zaren horiek erabili behar da? Beraz, sinatu gabe, orain nire int esanez ahal 0 eta 4 milioi artean, gutxi gorabehera, izan. Hortaz, hona hemen int arrazoiak direla eta C antolaketa ezin izango dugu sartu besterik ez orain bezala zergatik int bat beharrean da char bat, baina hemen da Zer gertatzen gist , eta batzuk on , baliatuz liteke, esate baterako, are PSet lau fgetc funtzioa edo hortik aurrera, ikusiko dugu Berriro arazo bost ezarri, fgetc da polita izen gisa delako motatako, ordenatzeko arcanely iradokitzen, Funtzio bat da hori pertsonaia bat jasotzen du eta beraz, Zer da funtsean ezberdinak zer GetString ari gara buruz ez da ari gara erabiliz modu berean scanf. Urrats-urrats batera besterik ez dugu creeping edozein dela gehiagoko erabiltzaileak idatzi ditu, dugu beti esleitu ahal izango delako char, eta, beraz, ezin dugu beti segurtasunez char bat begiratzeko garai batean, eta magia hemen gertatuko hasten da. Behera mugitzeko noa Funtzio honen erdialdera besterik laburki aurkeztu funtzio hau. Askoz bezala, ez da bat malloc funtzioa, ez da idazketa funtzioa non idazketa lets memoria zatia berresleitzeko duzu eta egin ezazu handiagoa edo txikiagoa. Hain luze ipuinean eta ekin nire esku eragin gaur, Badakizu zer GetString egiten ari da sort da magikoki hazten edo buffer gutxitu erabiltzaile moduan bere kateekin mota. Beraz, erabiltzaileak motak the bat kate labur, kode hau bakarra nahikoa bideratzen katea egokitzeko memoria. Erabiltzaileari idazketa mantentzen bada behin eta berriro egin nuen bezala eta berriro, bai, bada buffer-ren hasiera batean big honetan eta programaren konturatuko da, minutu bat itxaron, naiz espazioa, I, Nik bikoiztu egingo da buffer tamainaren eta, ondoren, bufferraren tamaina bikoiztu eta hori bikoiztea kode du, begiratuz gero hemen, da clever bat-liner hau besterik ez. Agian ez sintaxia hau ikusi duzu aurretik, baina esan duzu izar berdin bada, hau gauza bera da edukiera aldiz 2 esanez. Beraz mantentzen besterik ez da bikoiztu buffer-gaitasuna eta, ondoren, idazketa kontatzea eman bera memoria askoz gehiago dela. Orain, bat alde batera utzita, han dira beste hemen ere funtzio ez dugu, xehetasunez begiratu den beste GetInt erakusteko, GetString erabiltzen dugu GetInt. Egiaztatu dugu ez dela nulua, eta horrek, gogoratzen, balio berezia dela esan nahi du zerbait gaizki joan. Oraindik memoria atera dugu. Hobea dela egiaztatzeko. Eta Sentinel balioa itzuliko gara. Baina egingo iruzkinak gisa atzeratu dut zergatik eta gero scanf lehengusua hau erabili dugu sscanf izeneko eta bihurtzen da sscanf, edo kate scanf hori, lets lerroan begirada bat hartu duzu erabiltzaileak idatzi du eta utzi duzu funtsean aztertuko da, eta zer naiz Hemen egiten da sscanf kontatzen dut, aztertuko edozein erabiltzaileari ditu idatzitako eta ziur% i egiteko, ez da oso bat da, eta ez dugu gaur sartu zehazki zergatik da han ere % c hemen, baina hori hitz batean ahalbidetzen Erabiltzaile idatzitako du bada antzemateko gurekin Zerbait akastunak kopuruaren ondoren ere. Beraz, arrazoia GetInt eta GetString , berriz saiatu berriro saiatzeko esango dizu, berriz saiatu baita guztia kodea dugun idatzia, bere mota erabiltzailearen sarrera begira Ziur ere erabat zenbakizko da edo benetako mugikorreko bat da Puntu balio edo antzekoak, zer balio arabera funtziona erabiltzen ari zarela. Whew. ONDO DA. Hori izan zen mokadu bat baina puntua hemen da hori dela eta izan genuen buruzko prestakuntza gurpilak maila txikiena delako da, Hainbeste gauza besterik ez da hori gaizki joan daiteke nahi dugun preemptively kudeatu Gauza horiek, zalantzarik gabe, in klasearen goiztiarrena asteetan, baina orain PSet lau eta pset bost eta haratago Ikusiko duzu gehiago tokiraino dela duzu, baina, era berean, Oraindik gehiago gai problematika mota horiek konpontzeko yourself. GetString edo GetInt edozein galdera? Bai? Ikusleak: Zergatik bikoitza buffer-gaitasuna baizik eta, besterik gabe ari dira kopuru zehatza moduan da? DAVID MALAN: Galdera ona. Zergatik ahalmen bikoitza genuke bufferraren gisa aurka besterik izaten ari den balio konstante batzuk? Diseinu erabakia izan da. Erabaki besterik ez dugu hori joera duelako izan bat eskatu gutxi garestia denbora aldetik sistema eragilea memoria egiteko, ez baikenuen azkenean bat sartzea nahi kate handi bat egiteko egoera bat galdetzen ari garela OS behin eta berriro eta behin eta berriro memoria egiteko azkar. Beraz, erabaki dugu, besterik gabe, zertxobait arbitrarioki baina arrazoiz espero dugu, hori, badakizu zer, dezagun saiatu geure aurrera egin ahal izateko eta besterik gabe, gorde bikoiztu egin da, eta beraz, aldiz zenbatekoa gutxitzeko dugu malloc deitu dugun edo idazketa, baina epaia, guztira jakitea eza deitu Erabiltzaileek liteke idatzi nahi. Modu bi eztabaidagarria izan daiteke. Dudarik gabe ona. Beraz, dezagun begirada bat pare batean Beste aldean memoria ondorioak, gaizki joan daiteke gauzak eta ahal dituzu tresnak erabili akatsak mota horiek harrapatzeko. Zera gertatzen da duzun guztia, nahiz eta check50 ez du esan duzun bezala, dute buggy idazten astebete geroztik kodea, are check50 proba guztietan badira gainditu, eta, nahiz eta zuk eta zure TF dira super ziur dagoela Zure kodea du lan izan nahi du. Zure kodea ditu buggy edo duzula guztietan flawed, CS50 liburutegia erabiliz ere, dute memoria leaking. Zuk izan sistema eragilearen eskatuz programak gehienetan memoria for idatzi duzun, baina duzun inoiz benetan harekiko zor. GetString deitzen duzunean eta GetInt eta GetFloat, baina GetString, duzun inoiz unGetString edo Eman izeneko String Back edo antzekoak, baina ikusi dugu GetString esleitu memoria malloc modu edo honen arabera Funtzio idazketa, besterik ez da espirituz oso antzekoa, eta, hala ere, izan gara sistema eragilearen eskatuz memoria eta memoria behin eta berriro baina inoiz ez da ematen back. Orain, bat alde batera utzita bezala, bihurtzen da programa bat irten denean, memoriaren guztiak automatikoki libratuko da. Beraz, ez da akordio handi bat izan da. Ez da hautsi joan IDE edo motela gauzak behera, baina noiz programak egin Oro har, Leak memoria eta denbora luzez ari dira martxan. Ikusi duzun inoiz ergelak gutxi bada hondartza Mac OS edo erloju batean baloia Windows non mota da motelduz edo pentsatzen edo pentsamendu edo, besterik gabe, benetan hasten to arakatze bat moteldu, Oso seguru litezke memoria leak baten emaitza. Nork idatzi programatzaileek Erabiltzen ari zaren softwarea memoria sistema eragilearen eskatu Minutu batzuk, orduro. Baina zuk darabilzun du software, izanez gero, nahiz zure ordenadorean txikitzean amaieran ordu edo egunetan, zuk galdetzen liteke gero eta gehiago memoria eta inoiz benetan hura erabiltzen eta, beraz, zure kodea izan daiteke, edo programak memoria izango leaking liteke, eta memoria Leak hasten bazara, Han beste programen memoria gutxiago, eta ondorioa da motela dena behera. Orain, hori ikaragarri baten arabera da Gehien desmoche programak aukera izango duzu CS50 exekutatu neurrian bere irteera da, are gehiago baino gehiago esoterikoak gisa Danbateko en edo en edo komandoa edozein line programak aurretik exekutatu dugu baina zorionez, bere irteera murgildurik batzuk super aholku lagungarria da erabilgarria bai PSet lau izango dira edo zalantzarik pset bost. Beraz Valgrind tresna bat da Hori begiratzen erabili ahal izango da memoria programan filtrazioen. Nahiko erraz exekutatu da. Valgrind eta gero exekutatzen duzun, nahiz eta Luze apur bat izan arren, etenaren etenaren leak check berdinen osoa, eta, ondoren dot barra eta zure programaren izena. Beraz Valgrind ondoren, zure programa abiarazi da eta zure programaren amaieran irten aurretik korrika eta ematen dizu gonbita bat, nik, aztertzeko joan zure programa da da exekutatzen ari da eta esango dizut ba Leak duzu Edozein memoria eta are gehiago, zuen memoria ukitu ez duzu sartzen? Ezin du guztia harrapatzeko, baina da nahiko ona gauza gehienak harrapatzeko. Hortaz, hona hemen nire beharrik run adibide bat Programa honetan, run valgrind izatea, izeneko programa memoria, eta banoa diren lerroak nabarmentzeko gurekin interesgarriak azken finean. Beraz, ez da oharkabetasunak are gehiago Dudan diapositiba ezabatuko. Baina ikusi besterik zer hau programa dugun esateko gai da. Da gauzak kontatzen digu gai idatzi tamaina 4 baliogabe bezala. Beste era batera esanda, memoria ukitu izanez gero, Zehazki 4 byteko memoria behar duzula dute, Valgrind esan dezake. Tamaina 4 idazteko baliogabea. Lau byte ukitu duzu duzula izan behar du. Non asmatu duzue? Hau edertasuna. Memoria dot c line 21 da, non izorratu eta horregatik lagungarria da. Askoz GDB bezala, lagundu ahal izango da seinalatu benetako error hartan. Orain, hau apur bat gehiago da Luze, ez nahasia bada. 40 byte 1 blokeak daude betiko galtzea 1 1 erregistro galduta. Zer esan nahi du horrek? Beno, besterik ez dela esan nahi du, galdetu duzu 40 byte eta inoiz ez duzu eman zion atzera. Malloc deitzen baduzu edo deitzen duzu GetString eta sistema eragilea Eman inoiz dituzu 40 byte, baina zuk askatua edo memoria askatzen, eta azoka izango da, inoiz ez dugu Nik erakutsi nola itzuli memoria. Turns han super bat da funtzio sinple free deitzen. Argumentu bat, gauza hartzen libratzeko edo eman berreskuratzea nahi duzu, baina 40 byte, itxuraz, programa honetan lerroan galdu egin dira C oroimenaren 20 dot. Beraz, ikus dezagun programa hau. Super alferrikakoa da. Bakarrik erakusten du Errore hau. Beraz, dezagun begirada bat. Hemen nagusia eta nagusiak, oharra, deiak da izeneko funtzio bat f eta gero itzultzen. Beraz, ez dela interesgarria. Zer f egin? Ohartu ez nuen prototipoa handirik jarri. Kodea mantendu nahi dut Ahalik eta minimoak. Beraz nagusiaren gainetik f jarri nintzen eta Hori fina, zalantzarik gabe, bezalako programak laburretan. Beraz, f ez du ezer egiten, eta ez da ezer egin, baina egin nahi du horrek. Deklaratzen, askoz ere atsegin hegazti adibidean, Hori x izeneko erakuslea joan int baten helbidea gordetzeko. Beraz, hori ezkerraldean da. Ingelesez, zer da Eskuinaldean egiten? Edonork? Zer da hau guretzat egiten? Bai? Ikusleak: [INAUDIBLE] aldiz int baten tamaina hau da, 10 aldiz [INAUDIBLE] DAVID MALAN: Ongi utzi ninduen laburtzeko. Beraz esleitu espazio nahikoa 10 zenbaki osoen edo 10, zer int baten tamaina da, lau byte, beraz, 10 aldiz 4 da da 40, hain eskuineko albo dudan nabarmendutako da ematen dit 40 byte eta Lehenengo byte helbidea gordetzeko x sartu. Eta orain, azkenik, eta hemen, non programa hau buggy, zer da 21 linea gaizki oinarritutako logika horretan? Zer da line 21 gaizki? Bai? IKUSLEEN: Ez x [INAUDIBLE] sartu indizea. DAVID MALAN: Bai. Nik ez horrelako x sartu indizea. Beraz, sintaktikoki, OK. Zer polita da, askoz gusta array baten izena tratatzeko dezakezu bagina bezala erakuslea da, era berean, ahal erakuslea tratatzeko bagina bezala da, sorta bat, eta, beraz, sintaktikoki ahal dut x bracket zerbait esaten, tarte x i, baina 10 problematikoa da. Zergatik? Ikusleak: ez delako barruan. DAVID MALAN: ez da zatia memoria hori barruan. Zer da balio handiena beharko nuke kortxete horietan jarriz? 9 0 9 bidez. Zero indexatzeko delako. Beraz 0 9 bidez, ondo egongo litzateke. Tarte 10 ez da ona, eta baina, gogora ekarri arren, aldi bakoitzean CS50 IDE dezan lortu nahi dudalako akastunak balioak idatziz hutsegiteak ez du beti lankidetzan aritzeko, eta hain zuzen ere, sarritan zortea besterik ez delako ez du sistema eragile nabarituko beraz Inoiz zertxobait pusketa batzuk pasatzeko oroimenaren, Geratu teknikoki barruan duzulako Zure segmentuan, baina horretan gehiago sistema eragileak klase batean, eta beraz, honen antzeko zerbait oso erraz joan oharkabean. Zure programa da inoiz huts joan koherentziaz baina agian awhile behin. Eta beraz, saia gaitezen valgrind honetan, eta hemen, non itotzea lortu dugu irteera une arabera. Beraz, memoria valgrind leak check beteta dot barra memoria berdin. Eta hemen zergatik I agintzen hau izaten litzateke. Hona hemen zer valgrind, hona hemen zer Programatzaile bat, urte batzuk ago- erabaki ideia ona izango litzateke Irteeraren itxura egiteko. Hargatik hau zentzua. Beraz, ezker eskuko modu guztiak inolako arrazoirik alboko Prozesu programaren ID-a da besterik exekutatu dugu, identifikatzaile bakarra Programaren ran besterik ez dugu. Hori ezabatu hasita gaude diapositiba, baina ez dago Hemen ere informazio baliagarria da. Dezagun joan oso goian. Hemen da non hasi ginen. Beraz, ez da dena irteera hainbeste. Hona hemen baliogabea idatzi duten tamaina 4 on line 21ekoa. Beno, zer izan zen line 21? 21 Line zehazki zen hau eta zentzuzkoa da nagoela baliodun batean 4 byte idazten nago delako Zenbaki oso hau jarri nahian, bertan ezer izan zitekeen, Gertatzen besterik ez da izan zero, baina saiatzen ari naiz da jarri kokaleku batean horrek ez du nireak. Gainera, behera hemen, 40 byte bakar batean Bloke betiko record 1 galdu. Orduan malloc deitu dudalako Hemen, inoiz benetan memoria libratzeko dut. Beraz, nola konpondu dugu? Dezagun aurrera me eta pixka bat seguruago eta ez 9 han eta utzi me hemen free x. Hau da, gaur egun dagoen funtzio berria da. Orain berrabiarazi dut egin memoria dot barra bada, dezagun exekutatu Valgrind berriz, bere gainean, ahalik eta gehien aprobetxatu nire leiho eta sakatu Sartu. Orain, ona da. Berri ona lurperatu dute irteera hori guztia. Zeure bloke guztiak aske zeuden. Itzuli dugu zer to zeure da, baina filtrazioak ez dira posible. Beraz, hau da, beste besterik zure tresna kit tresna horrek batekin has daiteke Horrelako akatsak aurkituko orain. Baina ikus dezagun zer Gehiago oker joan daiteke. Dezagun trantsizio orain benetan arazo bat konpontzeko. Bat alde batera utzita, bada hau bat arinduko du Nahasmena edo tentsioa pixka, hau da, gaur egun dibertigarria. Bai. Hori nahiko ona. Erakusleak daudelako helbideak eta helbideak dira, oro har, konbentzio hamaseitarra idatzita. Ha, ha, hau dibertigarria da orain. Dena dela, beraz dezagun orain benetan arazo bat konpontzeko. Hau izan da super, super behe-mailako beraz, orain arte, eta, egia esan, ez erabilgarria dezakegu behe-mailako xehetasun hauekin gauzak. Beraz, aste gutxi batzuk sartu ditugu Duela array baten nozioa. Array bat izan zen, polita delako zaila da garbitzeko gure kodea bat idatzi nahi dugunean Anitz ikasleekin programa edo izenak eta etxe anitz eta Logela eta institutu eta hori guztia, Guztia gehiago gorde ahal izan genuen garbian array baten barruan. Baina arazotxo bat proposatzeko array baten orain arte. Nik ez baduzu ere pairatu it yourself programa batean, besterik senari, zer gauza txarra da array bat buruz, agian? Zurrumurru batzuk entzuten dut. Ikusleak: Zaila da tamaina aldatzeko. DAVID MALAN: Oso zaila da tamaina aldatzeko. Ezin duzu tamaina aldatzeko array baten, hain zuzen ere, per se C. ere beste array esleitu ahal izango duzu, guztia mugitu zaharraren berria, eta orain sartu beste tarte batzuk, baina ez da izan bezala bat Java edo Python bezalako hizkuntza edo beste edozein zenbaki horrekin hizkuntzetan dituzu batzuk Izan ezagutzen non duzu besterik gabe, gorde daiteke gauzak gehituz ad array baten amaiera emateko nauseam. When sorta bat behar duzu tamaina 6, bere tamaina da, eta hainbeste ideia lehenago bezala tamaina jakin bat buffer bat izatea, to atea asmatzen duzu zer tamaina ez dela nahi duzu? Handiegia Asmatzen baduzu, espazioa alferrik galtzen ari zara. Txikiegia asmatzen baduzu, ezin diren datuak gordetzeko, gutxienez Asko gehiago lan egin gabe. Beraz, gaur egun, erakusleak esker, ahal dugun hasteko gure pertsonalizatuak batera stitching Datu-egitura, eta in Izan ere, hemen zerbait da itxura apur bat gehiago Lehen begiratuan críptica, baina hau ez da bat lotuta zer deitu dugu zerrenda, eta bere izena laburbilduko mota da. Zenbakien zerrenda bat da, edo in Kasu honetan, zenbakien zerrenda, baina ezer zerrenda bat izan zitekeen, baina Honez lotuta elkarrekin geziak bidez, eta besterik etxebizitza bat hartu zer teknika dira gai izan behar dugu joan batu, moduko mataza batekin krispetak bezala, a lotuta zerrendak laukizuzenak hemen? Bere zenbakiak? Zein da azpiko hizkuntza Ezaugarri? Ikusleak: erakuslea. DAVID MALAN: erakuslea. Beraz geziak horietako bakoitzaren hemen adierazten erakuslea edo besterik helbide bat. Beraz, beste era batera esanda, nahi badut zenbakien zerrenda bat gordetzeko, Ezin dut besterik gorde nahi badut hazten eta txikitu gaitasuna array batean nire datu egitura. Beraz, apur bat izan behar dut Sofistikazio gehiago, baina konturatu Irudian, mota iradokitzen Oraintxe lortu hariak gutxi balitz dagoela dena lotu elkarrekin, Seguru asko ez da horren gogorra espazio egiteko laukizuzenak horietako bi arteko edo nodo horietako bi, dugu hasteko moduan horiek deituz, nodo berri bat jarri, eta gero hari berri batzuk, besterik ez hiru planotan ditch elkarrekin, Lehenengo bat, azkena, eta bat erdialdean txertatuko hori besterik ez. Eta, hain zuzen lotutako zerrenda bat, array bat bezala, dinamikoa da. Hazten daiteke eta, ahal txikitu eta ez duzu ezagutu edo aldez nola zaintzen dute gordetzeko dituzun datuak askoz bazoazela, baina bihurtzen da apur bat izan behar dugu hau nola bete esaten ibili. Beraz, lehen kontuan hartu nola gauzatu dugu utzi laukizuzenak txiki horietako bat. Oso erraza da int bat ezartzeko. Esan besterik ez duzu int n eta gero 4 byte int bat lortuko duzu, baina nola ez int bat lortu dut, deitu n, eta, ondoren, erakuslea, dezagun hurrengo deitu. Horiek deitu genezake Gauzak ezer nahi dugu baina datuak ohitura egitura bat behar dut. Bai? Ikusleak: AMPERSAND [INAUDIBLE]. DAVID MALAN: Beraz, ampersand dugu egingo da erabiltzeko nodo baten helbidea lortu potentzialki. Baina beste behar dugu C ezaugarririk ordenan niri emateko, sortzeko gaitasuna Laukizuzen ohitura hori, ohitura hau aldakorra, oroimenean izango bada. Ikusleak: egiturari. DAVID MALAN: egiturari. Astetik Gogoratu, sartu dugu Eta egitura, keyword nahiko simple hau horrelako gauzak egitea ahalbidetzen digu. C ez zuen datuak bat etorri egitura ikaslea izeneko. Dator int eta karroza eta char eta harekin batera hala nola, baina ez du ikaslea etorri, baina ikasleari datu-mota bat sortu ahal izango dugu, ikaslea egitura bat, sintaxia honekin hemen. Eta hau ikusiko duzu, behin eta berriro. Beraz, ez kezkatu keywords memorizatu, baina keyword, hori da garrantzitsua da Izan ere, esan dugun bezala, egiturari eta, ondoren, ikaslea deitzen dugu eta barruan Ikaslearen izena eta etxe bat izan zen edo gela bat edo antzekoak. Eta beraz, orain, gaur egun, dezagun proposatzen hau. Gehitu dut hitz batzuk egin, baina nahi badut laukizuzena hori gauzatu ahal izateko bai int eta lortu erakuslea, badakizu zer, ez naiz nodo izeneko egitura bat aldarrikatzen joan. Nago, halaber, horren barruan, esango nodo bat, laukizuzena, int bat dauka eta ikusiko dugu nola deitu n eta hurrengo erakuslea dauka. Eta hau da, pixka bat xeheak, baina hari buruzko uste baduzu, Irudian ziren geziak une bat duela zer datu-mota daude? Geziek horietako bakoitza seinalatuz zein datu-egitura mota? Ez da besterik per se int bat seinalatuz. Honez seinalatuz Gauza angeluzuzena osoak eta gauza angeluzuzenetan, esan genuen, hau da, nodo bat deitzen. Eta beraz, mota horretako daukagu errekurtsiboki definituko horrelako Nodo bat dela, esaten dugu, izeneko n int bat edukiko du hurrengo eta eta erakuslea izeneko Datuen egitura mota zein erakuslea duten itxuraz struct nodo izango. Beraz, hau da annoyingly xeheak eta besterik pedante izan nahi du, arrazoia ezin dugu zergatik besterik esan honi, Egia Itxura asko gehiago irakurgarria, dago Gogoratu C irakurri duelako Gauzak goitik behera, ezkerretik eskuinera. Ez da puntu eta koma lortu arte the keyword nodo benetan existitzen dela. Beraz moduko hori izatea nahi badugu erreferentziazko zikliko datuen barruan egitura, hau egin behar dugu, non egitura nodo esaten dugu goiko aldean, eta horrek hau deskribatzeko modua luzeagoa ematen digu gauza, ondoren, barruan egitura nodo esaten dugu, eta, ondoren, oso azken lerroan esaten dugu, eskubidea, C, bide batez, deitu madarikatua honetan guztian Gauza nodo bat eta gelditu keyword struct guztiz erabiliz. Beraz, hau da besterik Ordena sintaktikorik trick da, azken finean, aukera ematen digu sortu itxura zehazki honen antzeko zerbait. Beraz, gaur egun, bere gain hartzen badugu, ahal dugu Gauza hau ezartzeko C, nola egiten dugu benetan hasteko hura zeharkatzean? Beno, hain zuzen ere, guztiak egin behar duguna da Batetik bestera joateko ezkerretik eskuinera eta besterik motatako txertatu nodo nodo edo ezabatu edo bilatu gauzak egiteko lekuan nahi dugu, baina hori egin ahal izateko, goazen aurrera eta egin Gauzak apur bat gehiago benetako delako honetan du super behe-mailako egon orain arte. Egingo luke edonork literalki lehena izateko? ONDO DA. Goazen sortu. Nola deitzen zara? DAVID: David. DAVID MALAN: David. Urte askotarako. Ni ere. Ados. Eta zenbaki bat 9 behar dugu. Ez bezain ona lehen bezala, agian. Ados, 9. zenbakian. Zenbaki A 17, mesedez. Let me atzera pixka bat urrunago. Zenbakia 22, mesedez, eta nola urrunago atzera buruz Edozein esku ikusten dut bada argi guztiak edo bat ere ez. Norbaitek bertan boluntario ari. Ez Etorri nahi al duzu? Zure forearm da indarrez gora. Ados, 17. 22. 26 beherantz egiten ari da. Beste inork gustatzen forcefully-- Goazen sortu. Benetako boluntario bat. Beraz, oso azkar, bada Mutil antolatu lezake Gustatzen zeuen buruak besterik pantailan agertzen diren nodoak. Eskerrik asko. Eta 26 izango zara. Eskubidea eta azkar aurkezpenak guztiak. Beraz, David naiz eta zuk ere? DAVID: David. DAVID MALAN: Eta zuk dira? JAKE: Jake. SUE: Sue. ALEX: Alex. RAPHAEL: Raphael. TAYLOR: Taylor. DAVID MALAN: Taylor. Bikain. Beraz, hauek dira gure boluntarioek gaurko eta aurrera eta mugitzeko modu hori apur bat, eta besterik gabe, aurrera eta mantentzeko Zure zenbakiak zara eskuan gisa edo zure lehen zeinua, eta zure ezkerreko eskua erabiliz, joan aurretik eta ezartzeko geziak horiek, besterik zure ezkerreko literalki, beraz, seinalatu behar duzuna seinalatuz tan, eta eman zeure burua gela batzuk, beraz, dugu ikusmen ikusiko besoak benetan aldeko dira, eta apuntatu ahal izango duzu Sort lurrean gauza ederra da. Hortaz, hona lotuta inork zerrenda bat dugu, bi, hiru, lau, bost nodo hasiera batean, eta konturatu berezi hau daukagu Hasieran nor erakuslea gakoa segimendua dugulako osoari luzera zerrendaren nolabait. Mutil hauek, geratzen ari dira, nahiz eskuinera, atzera memorian atzera, Egia esan, ezin dira izan lekutan ordenagailuaren memorian. Beraz, mutil hauek izan liteke edonon zutik oholtza gainean eta hori da isuna, hain luze Oraindik dute benetan, beste bat seinalatuz, baina gauzak mantentzeko garbia eta erraza, dizkizugu besterik marraztu horiek ezkerrean bezala eskubidea hau, baina ez dago hutsuneak masiboa izan daiteke nodes dutenen artean. Orain, egia esan batzuk txertatu nahi badut balio berria, dezagun aurrera, eta hori egin. Aukera dugu orain Nodo bat hautatzeko. Esan dezagun hasteko off mallocing 55 batera. Litzateke axola norbait malloc izatea? Ados, goazen gora. Nola deitzen zara? RAINBOW: Rainbow. DAVID MALAN: Rainbow? Ados. Malloc Rainbow. Goazen sortu. Beraz, orain, geure buruari galdetu behar dugu algorithmically non 55 jarri ahal izango dugu. Beraz, guztiok dakigu, jakina, bertan seguruenik dagokio saiatzen ari gara bada hau horrela antolatu mantentzeko eta zuk mutil bat hartu balute atzerapausoa beraz, ez ditugu erortzen fasean, handia izango litzateke. Beraz, benetan, Rainbow, berriro hasi hemen nirekin, Ordenagailua orain ahal bezala dugulako aldagai bakarra ikusiko du aldi berean. Beraz, hau lehen nodoaren bada. Ohartu ez zuen nodo bat, erakuslea besterik ez dela, eta hori da, zergatik marrazten zuen izan bakarrik erakuslea baten tamaina, ez laukizuzenak osoa horietakoa. Beraz, goazen den bakoitzean egiaztatu joan iterazio da 9 baino 55 gutxiago? No. 17 baino gutxiago 55 da? No. 22 baino gutxiago? 26 baino gutxiago? 34 baino gutxiago? Eta, beraz, gaur egun, jakina, Rainbow amaieran dagokio. Beraz, argi eta garbi, eta zer zure izen-abizenak, Taylor zen? TAYLOR: Taylor. DAVID MALAN: Beraz, Taylor-en artean ezkerreko eta Rainbow eskuetan hemen, bere eskua zer amaitzen beharrak aginduko 55 txertatzeko zerrenda honetan? Zer egin behar dugu? Bai? Ikusleak: Taylor-en eskutik ezker azpimarratu behar da. DAVID MALAN: Zehazki. Beraz, nodo bat txertatzeak Zerrenda amaieran sartu nahiko erraza delako Taylor besterik , seinalatu ordez beheko aldean ditu edo dugu nulua deitu, null eza moduko da erakuslea edo berezi baten zero erakuslea, zaren zure ezkerreko seinalatzeko joan eskuko Rainbow eta gero Rainbow at, Non egin behar zure ezkerreko alde batetik, seguruenik seinalatu? Down. Ez da ona, bere eskuan bada moduko off hemen edo sort edozein seinalatuz horrek modu. Hori kontuan hartu beharko litzateke zabor balioa, baina puntu bada zuen balio ezagun batzuk, dugu deitu zero edo hutsa, OK hau ere, epe bat izan dugulako eta badakigu zerrendan orain dela betea. Beraz, zein da beste Kasu nahiko erraza? Ezin izan malloc dugu 5? Goazen sortu. Nola deitzen zara? TIFFANY: Tiffany. DAVID MALAN: sentitzen dut? TIFFANY: Tiffany. DAVID MALAN: Tiffany. Ados. Tiffany izan malloced 5 balio du. Goazen sortu. Bat, hau da, nahiko erraza da ere, baina kontuan hartu dezagun eragiketak ordena orain. Nahiko erraza izan da Taylor amaieran. 9 baino gutxiago, jakina da, 5. zenbakian eta, beraz, David ditugu, Tiffany ditugu, eta zer da zure izena? JAKE: Jake. DAVID MALAN: Jake. Tiffany, Jake, eta David. Norena da lehen eguneratu behar du lehenengo? Zer ikusi, zer egin nahi duzu? Ez da, pare bat modu posible, baina ez da ere modu gehiago oker bat edo. Ikusleak: kontatuta hasi. DAVID MALAN: kontatuta hasi. Nor dago kontatuta hemen, ba? Ikusleak: Lehenengoa. DAVID MALAN: OK. Beraz, lehenengo hasi eta non egiten duzu Nahi eguneratzeko David eskuetan izan? Ikusleak: Hacia 5ean. DAVID MALAN: OK. Beraz, David, bost puntu edo Tiffany hemen, eta orain? Ikusleak: Tiffany 9 puntu? DAVID MALAN: Perfect, hegazti-en izan ezik Burua mota besterik erori egin da, ezta? Zer da gaizki delako Argazki hau literalki? Ikusleak: Nothing seinalatuz. DAVID MALAN: Ezer ez da orain Jake seinalatuz. Nik literalki umezurtz utzi dugu 9 eta 17, eta literalki dugu memoria hori guztia leaked, zeren David eskua eguneratzeko lehen, hori da Fina neurrian zuzentasunez duenez orain Tiffany seinalatuz, baina inork ez balute den Jake amaitzen prospektiba gero, galdu genuen Zerrenda hori oso-osorik. Hargatik desegin. Beraz, hori gauza ona izan behar da bidaia baino gehiago, baina dezagun zuzentzeko orain. Zer egin behar dugu lehenengo ordez? Bai? Ikusleak: Tiffany 9 at seinalatu behar? DAVID MALAN: ezin dut zuregana hurbilduko hori lortzeko. Nor 9 at seinalatu behar? Ikusleak: Tiffany. DAVID MALAN: Ondo da. Beraz Tiffany 9 lehen puntua beharko lukete. Beraz Tiffany hartu behar balio berdina dagoelako on David den, badirudi une batez erredundanteak, baina hori da orain delako, bigarren urratsa, Daviden eskuz eguneratu ahal izango dugu Tiffany egiten diete erreferentzia, eta, ondoren, bada Mota besterik garbi dugun gauza bat ireki hau da udaberri-mota bagina bezala, orain dela-sartzeak zuzena da hori. Beraz, bikain. Beraz, gaur egun ia ez gara han. Dezagun txertatzeko final bat 20 balio bezala balio. Final boluntario bat malloc bagenu? Goazen sortu. Beraz, hau da, apur bat gehiago delikatua. Baina benetan, kodea gaude idatziz, ahoz nahiz, besterik mordo bat izatea bezala da baldintzetan orain, ezta? Baldintza bat izan dugu dagokion egiaztatzen Amaieran, agian, hasieran. Begizta nolabaiteko behar dugu erdian lekua aurkitzeko. Beraz, egin dezagun hau zer da zure izena utzi? ERIC: Eric. DAVID MALAN: Eric? Eric. Urte askotarako. Beraz, 20 ditugu. Bost baino gutxiago? No. Bederatzi baino gutxiago? No. 17 baino gutxiago? No. ONDO DA. Hemen kidea da eta Zure izenak dira berriz ere? SUE: Sue. DAVID MALAN: Sue. ALEX: Alex. DAVID MALAN: Sue, Alex, eta? ERIC: Eric. DAVID MALAN: Eric. Zeinen eskuak eguneratzen lehen urratsak emateko behar? Ikusleak: Eric. ONDO DA. Beraz, Eric non amaitzen behar? 22 etan. Ona. Eta orain zer? Sue gero Eric amaitzen dezake eta orain, you guys bada besterik gela batzuk, eta hori gauza ederra egiteko ikusmen, orain txertatzeko egin dugu. Beraz, galdera bat kontuan hartu orain baina eskerrak, beraz, gure boluntarioek askoz. Oso ondo egiten. Gorde dezakezu, nahi izanez gero. Eta ederra parting opari bat bada dugun bakoitzaren gustuko duzuna estresa baloi bat hartu. Utz iezaguzu me honetan behera. Beraz, zer eramateko da? Hau dela dirudi harrigarria izango da gaur egun dugun heinean alternatibo bat aurkeztu bati array hori ez da hain ezinik tamaina finko batzuk array bat. Dinamikoki hazi daitezen. Baina genuen bezala askoz Nik aste ikusi Iraganean, inoiz ez dugu ezer lortuko, doan, bezala, ziur aski, ez merkataritza-off hemen. Beraz, bat lotuta hankaz batekin zerrenda, dinamismoa da hau? Gaitasun hori eta hazten Egia, egin izan dugu ezabatu eta behar den bezala txikitu ahal izan genuen. Zer prezioa dugu ordainduz gero? Birritan askoz espazio, lehenik bezala. Begiratzen baduzu argazki hartan, jada ez Nago zenbaki osoen zerrenda bat gordetzeko. Zerrenda naiz gordetzeko Osoko zenbaki plus erakusleak. Beraz, leku kopurua bikoiztu egin naiz. Orain, agian hori ez da, hala nola, akordio handi bat da, 4 byte, 8 byte, baina zalantzarik zitekeela gehitu Datu multzo handiak sortu. Zer arazotxo bat? Bai? Ikusleak: izan dugu zeharkatuko banan-banan. DAVID MALAN: Bai. Horiek zeharkatzeko bat-banan daukagu. Zer sortu, eman genuen super hau ezagutzen duzu komenigarria kortxetea ezaugarririk idazkera, egokiago ausazko sarbidea izenez ezaguna, non besterik ez dugu salto dezake banakako elementu bat baina orain, bada, oraindik izan nuen Nire boluntarioak hemen, aurkitu nahi nuen 22, ezin dut besterik parentesi zerbait zerbait salto. Den zerrendan baino gehiago begiratu behar dut, askoz Gure adibide linealki bezala, 22 zenbakia aurkitu. Beraz, prezio bat ordaindu behar ez garela ematen du. Baina, hala ere, ezin dugu Arazoa. Izan ere, let me aurkeztu besterik entzunezkoak pare bat. Beraz duzun behera egon bada Mather en jantokia duela gutxi, gogoratzen dituzu, beren Hau atsegin erretiluak pila, hauek mailegatu dugu Klase aurretik Annenberg. Beraz, erretiluak pila honetan, nahiz eta, ordezkaria da benetan informatikako datu-egitura bat. Ez dago datu-egitura bat da informatikako pila bat bezala ezagutzen da, oso nicely erabaki bera zehazki bisuala honetarako. Beraz erretiluak hauek guztiak ez badago bat erretilua baina zenbaki bat bezala, eta nahi nuen zenbakiak gordetzeko, I Behera bat jarri izan hemen, eta hemen beste bat jarri behera izan dut, eta jarraituko zenbakiak pilatzeko beste bat, eta zer da gainean honi buruz lagungarri izan daitezkeen da zer duten inplikazioa da Datuen egitura honen? Zein zenbaki dezakezu tira I lehen komenigarria? Azen han jartzen dena. Beraz, hau da, zer litzateke ere deitzen dugun ordenagailu LIFO datuak egitura zientzia. Iraungo, lehena inprimatu. Eta zergatik luze baino lehen ikusiko dugu baliagarriak baina izan daiteke gaur egun, besterik kontuan hartu jabetza. Eta ergelak mota da uste baduzu jantokia, nola ez du horri buruz. Aldi bakoitzean zuten erretiluak garbi eta jarri freskoena direnak gainean, Aurretik garbi bat izan dezakezu baina, azkenean, oso zikinak eta hautsez oso behean erretilua inoiz ez baduzu benetan horren beheko lortzeko pila, duzulako besterik mantentzeko berria jarriz eta gainean garbi direnak. Gauza bera gerta liteke Supermerkatu batean gehiegi. Arasa bat baduzu esnea eta denbora CVS guztietan edo duenarentzat esne gehiago lortzen, shove besterik ez duzu esne du Dagoeneko atzealdean behar duzu eta berriak jarri nahi izanez gero, aurrean, batzuk nahiko zakarra izan joan zaren Datuen egitura amaieran esnea, da beti delako behealdean edo baliokidean beti da atzealdean. Baina ez pentsatu beste modu bat Datu eta esate baterako, hau Hornigaia. Oraindik pertsonen bat nork atsegin lerro Apple dendak kanpo produktu berri bat dator out, ziurrenik zaren Ez pila datuak bat erabiliz egitura duzulako alienatzeko litzateke besteek nor da Hornigaia jostailu berri batzuk erosteko. Baizik eta, seguruenik ari zaren erabiliz zer nolako datuak egitura edo zer nolako sistema mundu errealean? Zorionez lerro bat da, edo gehiago Behar bezala edo gehiago British-bezala, ilaran joaten da. Eta bihurtzen da ilara bat da, gainera, informatikako datu-egitura, baina ilara bat dauka oso bat Jabetza ezberdinetan. Ez da LIFO. Iraungo, lehena inprimatu. Jainkoa debekatzeko. Egin beharrean FIFO. Lehen ere, lehen egindako. Eta hori gauza ona da zuzentasuna 'mesedetan zalantzarik denean Hornigaia zu eman super goizaldean. Iritsi duzun lehen ezkero, ateratzeko lehenengo baita nahi. Eta, beraz, datu horiek guztiak egiturak, ilarak eta pilak eta besteen sortak, bihurtzen duzu hau bezalako array bat besterik ez dela pentsa dezakezu. Array bat da, agian, tamaina finko bat 4, baina nahiago izan polita mota besterik ezin dugu pilatzen bada erretiluak ia infinituki altu badugu erretiluak edo zenbakiak asko dituzte. Beraz, agian nahi dugu lotutako zerrenda bat hemen erabili, baina merkataritza-off izango da potentzialki memoria gehiago behar dugula, denbora pixka bat gehiago hartzen du, baina ez dugu ez pila altuera mugatu, askoz Mather bistaratzea kasuan bezala neurria muga dezake pila, eta, beraz, horiek dira diseinu erabakiak edo Jar eskuragarri dauden aukerei azken finean. Beraz, datu hauekin egiturak, hasi dugu goiko mugetatik berria potentzialki ikusten Zer Aurretik zegoen super azkarra eta bertan utziko dugu gaur off eta non ra iritsi espero zaitugu Asteazkenean da, dugu datuen a begiratzen hasteko gurekin bilatu ematen dizu egitura Egunkariaren amaieran denboran datuak bidez berriro. Eta, hori gogoratzen, aste zero ikusi genuen eta bilaketa bitarra edo arrail duena eta konkistatzeko. Honez oraindik atzera eta hobeto datozen, Asteazken honetarako Grial Santua Etorri izango da benetan exekutatzen datu-egitura edo teorikoki etengabeko denbora, zeinaren Ez du axola zenbat milioika edo bilioika gauza Datuen egitura dugun, izango da eramango gaituzte denbora etengabe, agian urrats bat edo bi urrats edo 10 urrats, baina urrats zenbakiak etengabeko Datuen egitura horren baitan bilatu. Hain zuzen ere, Santo Grial izango baina hori Asteazkenean on gehiago. Ikusi ya gero. [Musika jotzen]