[Musika jotzen] DAVID J. MALAN: Ondo da. Hau CS50 da. Eta hori aste 5 hasiera da. Eta konturatuko ahal izango duzu bezala, material batzuk da apur bat gehiago lortzeko konplexua, trinkoagoa gutxi. Eta oso erraza da, batez ere, Nik ohitura aspalditik, behera scribble gehien saiatzen den ezer egin dugu, klasean ari gara esaten. Baina konturatzen, hori ez da, beharbada, planteamendu pedagogiko ideal material-mota honetan ikasteko to, eta material oro har. Eta, beraz, pozik gaude iragarriko CS50 horren Gheng egin Gong prestatzen hasi da ohar multzo kanonikoa ikastaroa egiteko, itxaropena zein den, hau da, horien ez bakarrik gisa balioko erreferentzia eta baliabide bat materiala berrikusteko eta joan material bidez atzera agian dute ihes egin duzun lehenengo aldia inguruan, baina halaber, beraz, zure buruak izan daiteke gehiago behera, denean baino up denbora ateratzen da hitzaldia, baliteke ihardun duzu, beraz, gehiago pentsakor, gisa gehiago scribbly aurka. Esan, zer aurkitu duzu Webgunean dokumentuak horrelako da. Eta, adi, goiko ezkerreko, ez dago ez bakarrik edukien taula bat, baina baita denbora kodeak dagoela berehala izango duzu jauzi dagokion zati den video online ere. Eta zer Chang hemen egin hau da, funtsean, dokumentatu hori zer gertatu zen hitzaldia bereziki. Eta hitzaldi asko daude Dagoeneko online orain URL honekin. Eta jarraituko dugu gainerako bidaltzeko Aste honen amaieran by horiek, beraz, aprobetxatu baliabide hori. Beraz ADO gehiagorik gabe, itzuli zuritu hasi ginen izan dela geruza denbora pixka katea. Eta zer kate bat esaten dugu egia esan, azken astean da? Beraz char izarra. Eta char izarra, bai, zer Benetan esan nahi zuen? Beno, denbora honetan guztian, nik badugu dira funtzio bat deituz, getString, eta gordetzeko bezala bueltan llamado getString balioa batean aldagai deitzen s mota kate dira idazten dugu kode lerro han goian. Eta bakarra da denean ikusten dut nire idazkera hemen magnified egiten konturatzen naiz, besterik gabe nola atrocious hau da. Dena dela, Demagun duten, eskuineko aldean da, hala ere, zentzuzko zer da irudikatze izan hau guztia gertatzen ari getString denbora. getString, jakina, kate bat jasotzen du. Baina, benetan zer esan nahi du? Zatia daukala esan nahi du sistema eragilearen memoria funtzio bat deituz, malloc deitu. Baina hori aurrerago gehiago. Eta, ondoren, populates zatia memoria duten letrekin erabiltzaileak ditu idatzi, eta ondoren, noski, null pertsonaia bat, edo backslash zero oso amaieran. Bien bitartean, ezkerreko aldean istorio hau, denbora honetan guztian, izan dugu aldagai bat deklaratzen, z bezala. Eta aldagai hori gaur egun erakuslea deika hasiko da. Ez da horren barruan kaxa bat da katea jarri dugu, Daven, per se, baizik jarri dugu karratu horretan ezker zer on kutxa? Bai? IKUSLEEN: helbide non memorian kokatzen da. DAVID J. MALAN: Zehazki. Non Daven helbide memorian dago. Eta ez non Daven guztietan dago, per se, baina zehazki, helbide zer da? Bai? IKUSLEEN: Lehen pertsonaia. DAVID J. MALAN: lehen karakterea Daven, izan ere, kasu honetan ere, Zegoenik dut arbitrarioki eta unrealistically 1, OX1, besterik gabe esan nahi du 1 kopuru hamaseitarrean. Baina ziurrenik joan kopurua askoz handiagoa izan behar du baliteke marraztu dugu 0x bat aurrizki gisa batera, karaktere hamaseitar bat ordezkari. Eta ez dugulako behar jakin non Daven pertsonaiak gainerako daude, baita zer diseinu sinplea erabaki hori duela urte asko egin zen? Bai? IKUSLEEN: Backslash 0. DAVID J. MALAN: Bai, hain zuzen. Backslash 0 ematen dizu, bada ere denbora lineala, katea zeharkatzeko, ezkerretik eskuinera oinez, loop, edo pixka batekin begizta, edo antzeko zerbait duten, eta zehazten du, ene, hemen kate partikular honen amaieran da. Beraz, besterik gabe, helbide batera at kate baten hasieran, oso-osorik sartzeko aukera izango dugu hura, berriz, hori guztia delako, kate bat besterik ez du char izar bat izan da. Beraz, zalantzarik gabe fina da erabiltzen jarraitzeko CS50 liburutegia eta abstrakzioa hau, nolabait esateko, baina zaitugu Hasteko zehazki ikusteko zer gertatzen da denbora honetan guztian azpian. Beraz, adibide honetan gogora ekarri ahal izango duzu, gehiegi, azken aldiz, alderatu 0, eta ez dute benetan alderatu. Baina hau konpondu hasi ginen. Baina agian birziklatzeko bat, Baliteke norbaitek interesatzen zait pink elephant batean gaur, halaber Chang egindakoak? Nola aurrean zu? [INAUDIBLE]. Goazen sortu. Eta, bien bitartean, zatoz gisa, dezagun une bat besterik ez kontuan hartu zer kode hori benetan egiten ari zen. Bi aldagai geratuko da sortu top, s eta t, eta getString deituz. Hau ez da oso user-friendly programa bat, ez du esango dizu delako zer egin. Baina dezagun, besterik gabe, bere gain hartzen ari gara mamitsuena parte bideratua. Eta gero egiten dugu, s berdin bada berdinen t, printf esan behar da, gauza bera idatzi duzu. Hello. Zein da zure izena? Janelle: Janelle. DAVID J. MALAN: Janelle, politak zu ezagutzeaz. Beraz, zure erronka at elefante horretarako eskua da lehenengo marraztu digu zer da irudi bat Ari lehen bi horiek ordezkatuta lerroak. Beraz, s eta t izan liteke pantailan nola ordezkatuta? Eta zuk zuzenean marraztu berarekin hatza pantaila handi honetan. Beraz, ez da bi halves da Ekuazio horren alde bakoitzean. Beraz, ez dago s ezkerrean da, eta ondoren, eskuin hegaletik GetString. Eta gero ezkerreko hemen t, eta, ondoren, eskuin hegaletik GetString. Beraz, nola hasiko genuke irudi bat marrazten duten adierazten du zer ari den gertatzen hemen memoria, esango zenuke? Eta utzi azaldu let me joan ahala zer egiten ari zaren. Janelle: OK. Beno, lehenik eta behin, galdetuz behar da: sarrera katea lortzeko. Eta store-- litzateke Oh, barkatu. DAVID J. MALAN: Ados. Good. Eta hau da, deitu zer? Oh, OK. Mantendu egingo da. Nik ez dut esan nahi eteteko. Janelle: Barkatu. Beraz sarrera sartu litzateke helbidea ez horretako ziur. Ezin dut zehazki gogoratzen zenbakia, baina uste dut 0 batekin hasten zen. DAVID J. MALAN: That guztiak ondo, zenbakiak egin nuen delako, beraz, ez da erantzunik izan. Janelle: 0 arku hasita. DAVID J. MALAN: Ados, beraz, elementu 0. Noski. Janelle: Eta gero bazen besterik gabe, bi letra bezalako DAVID J. MALAN: Ados, zuk itzuli. Janelle: Beraz elementu 0, eta orduan elementu 1 edo elementu 2. DAVID J. MALAN: Eta zein pieza Irudian ari zaren oraintxe marrazten? GetString deia? Edo e-deklarazioan? Janelle: adierazpenek s, uste dut. Oh, getString, litzateke delako izango da sartu [bakoitzean sartu? eremua. ?] DAVID J. MALAN: Ongi. Zehazki. Nahiz eta hau modu eraginkorrean arren baten array, abisuaren itzultzen, bueltan dugu kate bat, ahal dugun kate hori erabiliz 01 eta 2 sartu indizea. Teknikoki, horiek dira ziurrenik helbideak banakako by irudikatzen, baina hori da isuna. Beraz, eman dezagun, besterik gabe, azkar ahal badut non utzi dugu birbidali Azken aldiz, bat bada kateak g zen b e a, backslash 0, horrela ordezkari gabe ren sarrera, nola liteke s ordezkatzen dugu orain? Honek memoria hori bada itzultzean getString arabera? Janelle: Jakin al daiteke arku bat ordezkatzen duen? DAVID J. MALAN: arku bat eginda? Beno, ez. Demagun, besterik gabe, pictorially, dezagun joan besterik ez me aurretik eta proposatzen duten, hau s bada, hau bueltan getString balioa da. Eta marrazten dituzun honetan, 0, 1, 2, eta horrek arrazoizkoa da zeharo, garelako Ahal katea sartu indizea, esaterako. Baina besterik ez koherentea izan Azken aldiz, utzi aurrera me eta arbitrarioki hori proposatzeko helbide 1 da, hau helbide 2 da, hau helbide 3, eta abar. Eta, beraz, besterik ez super izateko argi eta garbi, zer ari den gertatzen s joan horren ondorioz Kodea lehen lerroa, esango zenuke? Janelle: Helbidea 1? DAVID J. MALAN: Zehazki. Beraz jorratuko 0x1. Eta bitartean, utzi aurrera me eta bikoiztu zer egin duzun, askoz eta nire t gehitzeko hemen. Idatzi gabe banintz berriz ere, bigarren aldiz, denean getString dituzten galdetutakoan, non, jakina, da gabe joango gara? Beno, presumably-- Janelle: hemen bezala? DAVID J. MALAN: Bai. Janelle: Edo baita ere da kutxak berean? DAVID J. MALAN: proposatzen me, bai, zehazki, kutxak gehigarri hauetan beraz. Baina zer da gakoa orain, hau da, nahiz eta horiek nahiko hurbil nintzen marrazten ditudan arren elkarrekin 0x1, hau da errealitatean 0x2--, orain hau helbidea 0x10 izan daiteke, esate baterako, eta 0x11, 0x12 eta, eta abar. Eta, beraz, hori horrela bada, Zer gertatzen da hor bukatzen den t joan? Janelle: 0x10? DAVID J. MALAN: Zehazki. Beraz, 0x10. Eta, beraz, gaur egun, azken galdera. Dute, orain arte, lan egin behar izan duzu elefante bat gogorrena beraz, oso urrun. Honekin, tira I Kodea bada berriz bere egiten dut, hiru lerroan, s berdin berdin t, zer naiz benetan alderatuz Marraz hemen dugu? Janelle: bi helbideak? DAVID J. MALAN: Zehazki. Beraz s berdinak berdina esaten dut t? Bestela esanda, ez da 1-berdintasuna 10 berdina? Eta jakina, bistako erantzuna da orain, ez. Eta beraz, programa hau da, azken finean, zer, esango zenuke inprimatu dute? Janelle: Jakin al daiteke, gauza bera idatzi duzu? DAVID J. MALAN: Beraz, s 1 da eta t 10 da? Janelle: gauzak ez datoz bat. DAVID J. MALAN: Zehazki. Gauza desberdin idatzi duzu. Guztiak eskubidea. Beraz txalo txanda, ahal izango banu, hemen. [Txaloak] Hau mingarria izan zen. Ezagutzen dut. Nicely egin. Beraz, gaur egun ikus dezagun ezin dugu bada tease gain fix zer zen. Eta jakina, noiz this-- konpondu dugu gaur egun dut green-- ere adierazten Osagarri pare bat egin dugu hemen. Lehenik eta behin, besterik behatu gisa egiaztatu, lehen naiz egiaztapena s null berdinen bada eta t berdin nulua. Eta besterik gabe, argi izan, orduan agian s edo t izan null hau atsegin kodea da? Noiz liteke s edo t izan nulua. Bai? IKUSLEEN: [INAUDIBLE]. DAVID J. MALAN: Zehazki. Erabiltzaileak katea bada idatzi da bidea oso luzea memoria sartzen dira, edo zenbait bitxi korner horrelako kasuan, , GetString ikusten dugu, hitzez hitz gaur egun, bere dokumentazioan, dioen bezala null itzuliko da a Sentinel balio berezia, edo, besterik moduko ikur berezi bat horrek esan nahi du zerbait gaizki joan da. Beraz, egiaztatu nahi dugu , noiz bihurtzen da delako nulua duten balioa oso arriskutsua da. Askotan, zerbait egin behar dituzten saiatu baduzu null funtzio bat pasatuz inplikatuz sarrera gisa, funtzio hori instance-- for agian oso huts egingo du eta, horrekin batera, hartu behera zure programa osoa. Beraz, hirugarren lerro honetan orain behatu bat besterik ez da egiaztatu, error egiaztapena, izango bada. Hori da gaur egun ohitura ona egiteko Gurekin edonoiz sartu dugu saiatu balio bat erabili duten liteke, potentzialki, izan nulua. Orain, laugarren lerroan hemen, "Bada strcmp (s, t)," ondo, zer da aipatuz hori? Beno, esan genuen hau izan zen oso labur bat funtzio izeneko katea konparatzeko. Eta bere bizitza helburua da alderatu haren aurka bere lehen argumentua bigarren, baina ez haien helbideak dagokionez, nahigabe egin dugu une bat bezala Duela gorri kodea, baina baizik eta bi horiek konparatzeko humanly intuitibo batean kateak hau alderatuz, honen aurka bide, hau, honen aurka, eta aurka orduan gelditzen bada eta bat edo nire behatzak, bai backslash bat 0 hits. Beraz, norbaitek urte abian jarritako strcmp Gurekin ezartzeko funtzionalitate Espero dugun ahaztuak genuke dute besterik Bi balio simple alderatuz. Orain Egia, marrazki gordetzen dut Zenbakiak hainbat hauek guztiak. Baina errealitatea da, izan ditut horiek denbora guztian egiten du. Eta beraz, utzi joan besterik ez me aurretik eta zirriborratzen horiek Puntu bat egin behar dela, amaieran Egunaren eta aurrera, ez gabiltza benetan axola buruz joan zer helbideak gauzak, egia esan, memorian. Beraz, ez dut horiek tira joan zenbaki mota hainbeste jada, Besterik abstraktu hau bat naiz kanpoan a little more geziak besterik errespetatzen. Beste era batera esanda, s erakuslea bada, ondo, dezagun marraztu besterik ez da, hitzez hitz, erakuslea gisa, gezi bat seinalatuz bertatik beste zerbait, eta ez gehiegi buruz gehiago kezkatu Helbide hauek minutia eta horrek, berriro ere, hala egin nuen. Baina ikusiko dugu helbide horiek, batzuetan, kodea arazteko denean. Orain berriz, programa honetan crear konponketak, noski, alderatuz arazo hori bi kateak horiek. Baina beste arazo bat sartu dugu. Hau kopia batetik zen Azken aldiz programatu, Horren bidez, kapitalizatzea saiatzen nintzen Kate bat lehenengo pertsonaia. Baina zer zen sintoma Azken aldiz ikusi dugu Erabiltzaile batek balio bat idatzi, bezala gabe minuskulaz, s, orduan s esleitzen dugu t sartu, hirugarren lerroan ez bezala, eta, ondoren, saiatu behar dut larriz t tarte 0? Zein izan duen eragina t tarte 0 hemen aldatzen? IKUSLEEN: s astindu zituen. DAVID J. MALAN: Bai, S aldatu dut, bai. Zer izan zen benetan joan delako? Beno, utzi nuen garbitzeko bada me ikusi Argazki hau sortu, honela. S bada, berriz ere, hitza g, a, b, e, backslash, 0 eta s marrazki jarraituko dugu kaxa bat bezala hemen, baina helbideak ez gehiago. Geldi dezagun gauzak egiteko sortu. Demagun irudi bat marraztu besterik gabe mundu errazteko. Noiz t deklaratzen dut kate t-rekin, duten memoria zatia sortzen. Square gertatzen 32 izan ordenagailuak gehienetan bit. Izan ere, bada inoiz duzun bat entzun ordenagailua 32 biteko arkitektura bat izatea, benetan fancy-hitz egin, hori besterik esan nahi du, 32-bit helbideak erabiltzen ditu. Eta tekniko bat alde batera utzita ere, Duzun inoiz bada galdetu Horregatik ordenagailu zaharretan, duzu benetan bada zopa horiek sortu RAM asko duten saiatu, liteke gehienez ere bakarrik dute lau RAM gigabyte, baita hori delako, literalki, zure ordenagailu zaharrari Could bakarrik 4 eta altua zenbatu milioi, 4 milioi byte, zen 32-bit erabiliz delako helbideak zenbakiak. Baina, nolanahi ere, honetan Adibidez, ipuin askoz errazagoa. t erakuslea beste besterik ez da, edo benetan char izar bat, kate aka. Eta nola egin argazki hau eguneratu nahi dut orain kodea duen bigarren hori, puntuaren ostean, dot, dot? When I egin kate t s koma berdin, nola aldatuko du irudi honek? Bai? IKUSLEEN: [INAUDIBLE]. DAVID J. MALAN: Bai. Zehazki. Gezi bat jarri besterik ez dut egin duen t helbide berera kutxa, en lehen letra bera eman. Edo teknikoki, hau bada lasaia zen, oraindik 0x1 at, bagina bezala izan nuen da 0x1 hemen eta 0x1 hemen. Baina, berriro ere, nork zaintzen helbideak buruz? Besterik Ideia hori orain garrantzizkoena da. Beraz, hau da, zer gertatzen ari den hemen. Beraz, jakina, egiten baduzu t tarte 0, zein array idazkera da, of noski eta Egia, itxura bezala array bat baino gehiago dago hemen, baina gaur egun ez dago gauza bitxi hau. Programazio hizkuntza dela jakin, C, ezaugarri hau eskaintzen dizu, Horren bidez, t badago ere bat erakuslea, edo s erakuslea da, oraindik erabili ezagutzen duten dezakezu, kortxetea eroso idazkera lehen elementu batera joateko, edo bigarren elementua, edo edozein elementu erakuslea duten seinalatuz , izan ere, ustez, hura da, kasu honetan bezala, array batzuk seinalatuz. Beraz, nola ez, hau konpondu dugu? Egia, hau da, non bat lortu da little jasanezinak lehen begiratuan. Baina hemen bertsio berria eta hobea da. Beraz, lehenik eta behin, dut CS50 liburutegia kentzeko, besterik ez du s busti da, hain zuzen ere char izar bat, sinonimo besterik ez. Eta t char izar bat ere. Baina zer gertatzen da on- eskuineko lerro horren alde non t esleitzen zaio balio bat? Zer da malloc? Zer da strlen da? Zer da sizeof (char)? Zergatik demontre ez du line itxura, beraz, konplexua? Zer ari da egiten goi-mailan da? Zer da gordetzeko it t? Bai? IKUSLEEN: ari esleitzean bat zenbait memoria espazioaren zenbatekoa. Da gorde, uste dut, letrak [INAUDIBLE]. DAVID J. MALAN: Perfect. Perfect. Honez jakin bat esleitzean memoria-lekuaren gordetzeko, ustez, etorkizunean gutunak. Eta, batez ere, malloc da, beraz, zer itzuli? IKUSLEEN: [INAUDIBLE] emandako erabiltzaileak DAVID J. MALAN: Zehazki. Memoria horren helbidea itzuliz, bertan esaten modu fancy bat da, helbide itzultzen memoria horren lehenengo byte. Onus da on gogoratu dit zenbat memoria I actually esleitu edo malloc eskatuko da. Orain zenbat da hori? Beno, nahiz eta ez izan arren parentesi asko hemen, malloc argumentu soil bat besterik hartzen. Eta S strlen zehazten ari naiz, beraz, eman me byte ugari dago, s daude, baina, gehitzeko. Zergatik? Bai? IKUSLEEN: backslash 0. DAVID J. MALAN: Zehazki. Lortu dugu garbikuntza txiki bat egin. Beraz, ez backslash bat delako 0, hobeto gogoratuko litzaidake. Bestela, goaz kate bat sortu nahi duten ez du amaierako berezia duten. Bien bitartean, besterik super izateko anal, sizeof (char) daukat, badaezpada norbaitek nire exekutatzen ez CS50 tresnaren kodea, baina agian beste ordenagailu batean guztiz non chars byte dira, konbentzio, baina bi byte, edo zerbait hura baino handiagoa. Besterik super izan, super akatsak averse. Nahiz eta, egia esan, hori da, ziurrenik 1 bat izango da. Orain, bere aldetik, aurrera dut eta kopiatu katea, t tarte i t tarte s berdin. Eta izango da azken astean atzeratu dut Iturri-kodeak zer gertatzen den ikusteko. Baina funtsezko eramateko, eta Arrazoi kodea jarri dut orain berdean, azken lerro hori delako da, t tarte 0 funtzioak toupper, eragina du Capitalizing zein katea? t edo / s? Kode azken lerro horretan. Just T, zer da delako Denbora honetan gertatu zen, Azken urrats hori apur bat desegin badut, zer ari da gertatu, noiz malloc deitu dut, Funtsean zatia memoria bat eskuratu dut jatorrizkoaren tamaina berdina da, duten aritmetikoa delako egin nuen. I gordetzeko naiz en helbide t zatia memoria hori. Nahiz eta itxura polita nahiz eta polita, polita eta hutsik, errealitatea da hor, zer zaitugu mantendu deituz, zabor balio hemen. Zatia memoria hori oso gerta Ondo izan dira aurretik erabili, Segundo batzuk, duela minutu batzuk. Beraz, ez zitekeen erabat zenbakiak izan edo letrak ez, besterik gabe, nahigabe. Baina ez dira baliozko, I arte populatu neuk zatia memoria honen Benetako chars batera, jo dut duten do begizta ez da. Ondo da? Beraz, orain, unerik Hiru adibide horiek ziren azken aldiz itxuraz hautsi, Swap Adibide honetan, funtzio honetan Zentzu horretan lan egin a eta b trukatuko dela. Baina ez da beste zer zentzu batean lan egiteko? Bai? IKUSLEEN: [INAUDIBLE]. DAVID J. MALAN: Zehazki. Funtzio hau deitu banintz adibidez another-- batetik, nagusia, non bezalako funtzio bat Aldagai bat, x eta y daukat, nik bezala joan den astean egin zuen, bera, eta pasatu dut x eta y , Trukatu eta gero deitu Swap-- honetan, noski, bertsio zuzena da da, zer ari gara buruz see-- ez du lan. Beraz, zer fix da? Beno, eta, beraz, besterik gabe, ahal izango argia, utzi aurrera me and-- ematen dit inork bigarren hemen, eta ikusiko duzu dut azkena, erakutsi ahal bada bertan in-- Ea dut aurkitu dezakezun utzi izango da benetako fast-- Ados honetan, [INAUDIBLE]. Ados, ez da. Beraz, alde batetara komandoak besterik ez naiz idazten. At berreskuratu nahi dut Adibide azken unera azken aldiz, eta horrek orain Swap ez deritzo. Beraz Swap ez da bertan utzi ditugu azken aldian, Horren bidez, hasieratu I 1 x eta 2 y. Gero deitu dut Swap, 1 eta 2 igaroz. Eta ondoren, funtzio hau zentzu batean lan egin zuen, baina iraunkor gutxi izan duen x eta y eragin. Beraz, esku artean, galdera da, nola orain Egia esan, konpondu dugu arazo hau? Zer da esku artean irtenbidea? Beno, swap.c, zein da gaur egun berrian, nabarituko desberdintasun pare bat. x eta y berdinak dira. Baina, zer da argi eta garbi line 25 inguru desberdinetan? Berrikuntzak ez, gogoratzen baduzu zer begiratu orain dela segundo bat bezala? IKUSLEEN: [INAUDIBLE]. DAVID J. MALAN: Bai. Beraz ampersands pieza berri bat sintaxia, ez bakarrik programa honetan, baina baita orokorrago CS50. Orain arte, ez dut uste ikusi dugu, edozein adibide edo benetan haiei buruz hitz egin inolako Xehetasun,, baino agian, preemptively beste atalean, hau bezalako ampersand bat. Beno, bihurtzen da ampersand bat da sintaxia berrien azken piezen ikasten goaz. Guztiak esan nahi da aldagai batzuen helbidea. Zer helbidean bizi da x? Baina zer gertatzen helbidea y bizi? Bada delako aurretik oinarrizko arazo zen duten x eta y pasa ari ziren kopiak, benetan zer egin nahi dugun bezala ematen da Swap altxor bat bezala duten non x eta y benetan eramaten du mapa RAM daude, eta, beraz, Swap mapa jarrai dezaketela eta joan lekuan x edo y spot markatzen eta berezko balioez aldatuko 1 eta 2 ez. Beraz Swap apur bat ere aldatu egin behar da. Eta hasiera batean, agian hau Badirudi apur char izar antzeko bat. Eta halaxe izan da. Beraz, erakuslea zer motako datu-da, oinarritutako nabarmendutako zati honetan? Beraz, int bat da. Beraz, jada ez da int bat, int baten helbidea da. Eta, era berean, b orain va int baten helbidea izan nahi du. Beraz, orain Swap deitu Main dut, Ez dut Swap 1 eta 2 oparituko. Emateko atsegin dut Idi-zerbait eta idi-zerbait, hori baita bi helbideak Beren benetako kokapenak Swap nire ordenagailuaren memorian. Beraz, gaur egun, nire gainerako ezartzeko Tad bat aldatu behar. Zer da, jakina, desberdina orain hiru kode lerro horiek? Ez dago madarikatua izar horiek guztiak leku baino gehiago, eskubidea? Beraz, zer gertatzen da hemen? Bai? IKUSLEEN: jakina da [INAUDIBLE]. DAVID J. MALAN: Zehazki. Beraz, testuinguru honetan, eta hau ez zen diseinu onena erabakia, admittedly, Duela urte. Testuinguru honetan, non In besterik ez duzu izar bat, eta ez duzun datu mota bat dute, int bezala, berehala ezkerrera, ordez berdintasun-ikurra duzu, argi eta garbi, Testuinguru honetan, esan duzu izar bat, horrek esan nahi du joan helbide hori bat da. Jarraitu Altxor-mapa, nolabait esateko. Eta bitartean, 37 lerro, gauza bera esan nahi du. Helbide bat joan, eta zer jarri? Whatever egin da kokapen hori b zehazten du. Bestela esanda, joan b. Talde balio hori. Batera joan eta, berdin, per sinatzeko, esleitzeko operadorea, jarri balio hori ez. Era berean, int temp int bat da. Ezer temp buruz aldatu behar da. Da Annenberg from ordezko baso bat besterik ez da esne batzuk edo laranja-zukua da. Baina behar dut, esan b joateko. Helmuga duten joan eta balioa jarri temp daude. Beraz, zer orduan gertatzen da? Noiz benetan deitu dut oraingoan Aurrera ezazu, bada Lehenengo erretilu hau hemen adierazten Main, bigarren erretilu hau Swap adierazten du, Ampersand x eta ampersand y pasatzen dut tik Trukatu Main, aski argi izan, zer hau pila marko jasotzen ari da? Bai? IKUSLEEN: [INAUDIBLE]. DAVID J. MALAN: Zehazki. X helbidea eta y helbidea. Eta horiek pentsa dezakezu posta-helbideak bezala. 33 Oxford Street eta 35 Oxford Street, eta zuk bi eraikin mugitu nahi kokaleku horiek dira. Ideia barregarria moduko da, baina hori da dena esan nahi dugu helbidea arabera. Non dago munduko ahal bi ints horiek aurkituko dituzu? Munduko Non egin ahal izango dituzu Bi eraikin horiek aurkitzeko? Beraz, azkenean, bada, denbora dut hori guztia egin ondoren Gaur egungo iturburu-kodea sartu eta konpilatu Swap eta run ./swap, azkenik, alde Lehen aldiz ez benetan ikusten dugun nire balioak dute, hain zuzen ere Izan trukatu arrakastaz. Eta orain, guk ere hartu en hau, esan, gdb ohar. Goazen fitxategi berdinean sartu. Dezagun aurrera me eta exekutatu ./swap of gdb. Eta orain, Swap ere, naiz joango gara I Animatu eta break puntu bat ezarri nagusian. Eta orain ez naiz joango Animatu eta programa exekutatu. Eta orain ikusten dugu nire kodea linea hartan pausatu. Animatu eta inprimatu dut joan bada x, zer behar ikusten dut hemen? Galdera bat da. Esan berriro? IKUSLEEN: [INAUDIBLE]. DAVID J. MALAN: Beraz, ausazko zenbakiak, agian. Agian zortea lortu dut, eta hori da, atsegina eta erraza, 0 bezala. Baina agian ausazko zenbaki batzuk ere. Kasu honetan, zortea dut. Gertatzen besterik ez da 0 izan. Baina, egia esan, zorte, delako ez arte dut idatz hurrengo eta, ondoren, inprimatu x duela Kode-lerro, line 19, exekutatu. Bien bitartean, I idatzi bada hurrengo berriro, eta orain y inprimatu, 2 ikusteko noa. Orain, aurrera idazten badut, nik joan get apur bat nahasgarria da, orain delako, printf da agertzen joan pantailan, egiten zuten bezala. x 1 da. Berriro egin dezagun. Eta orain, hemen non gauzak interesgarria. Swap edo are pauso deitu aurretik I sartu, dezagun begiratu apur bat. x da, berriro ere, 1. Y da, behatu ikastaro azkarra egiaztatu, 2, beraz, ez da zaila ez. Baina zer da ampersand x? Erantzuna, nik funky mota bila. Baina int parentesi artean izarra besterik ez da BPG-ren hau esaten modu helbidea da. Ez da int bat, baten erakuslea da int, edo bestela helbide bat bezala ezagutzen. Zer da crazy gauza hau? Inoiz zerbait ikusi dugu Nahiko lehenago bezala. Beraz, hau nire ordenagailuaren ere helbidea da non x bizitzeko gertatzen oroimenez. Idi-zerbait da. Eta hau da, Egia, zergatik Hasi dut geziak marrazten, Zenbakien ordez, benetan zaintzen duelako Zure int duten jakin batean dagoen helbide hori handi hori. Baina bffff0c4, horiek guztiak dira hain zuzen ere digituak hamaseitarra bertan f bidez dira 0. Beraz, ez gara gehiegi Ohar joan zer gauza horiek dira luze. Baina y inprimatu badut, jakina, ikusten dut 2. Baina ampersand y, helbide honetan ikusten dut. Eta, adi, bitxia da, nola urrun dira x eta y? Helbide gehienak bazter ditzakezu. Lau byte. Eta hori koherentea gure lehenago erreklamatzeko nola big int bat da? Lau byte. Beraz, dena Hornigaia sortu bezala nicely, agian duzu espero bezala, memorian. Beraz, gaur egun, dezagun, besterik Aurreratu Istorio honen amaieran. Dezagun aurrera eta urrats idatzi, to Swap funtzioa murgiltzea. Orain konturatu, bat idazten badut, ez da x helbidea berdina. B dut idazten bada, berdin-berdina da y helbidea da. Beraz, zer behar ikusten dut badut esan, joan helbide bat? Beraz, inprimatu izar bat. Beraz, izar bitartez joan, testuinguru honetan. Ampersand esan zer da helbidea. Beraz, bide bat 1 star. Eta inprimatu izar b ematen dit 2. Eta utzi du bere gain hartzen zidan, oraingoz, gutxienez kodea idatzi dituela hasten orain exekutatu izan daiteke arrazoitu bidez, modu horretan. Baina ideia hori berrirakurtzeko egingo dugu luze baino lehen. Beraz Swap bertsio honetan da orain, zuzena eta aukera ematen du datu-mota jakin hau swap digu. Beraz, zalantzarik izanez gero Swap on? Izar On? Helbide On? Eta ikusiko duzu, batera arazo multzo 4, ordenatzeko, baina arazo multzo 5, zalantzarik gabe, nola horiek erabilgarria gauzak dira eta askoz gehiago haiekin eroso, ondorioz. Ezer guztiak? Guztiak eskubidea. Beraz, malloc da, berriro ere, funtzio hori duen memoria, memoria bideratzen esleipena. Eta zergatik da erabilgarria? Beno, denbora honetan guztian, duzun bada malloc erabiliz. Gaur egun nola uste baduzu lanak GetString, ustez, hori Izan norbaitek eskatuz pusketa bat memoria, edonoiz erabiltzaile motak kate bat ere, zalantzarik gabe, ez baikara ez zekien, CS50 langile gisa, nola big kateak horiek gizakiak dira idatzi behar izan liteke izango da. Hargatik, lehen aldiz, hasteko zuritu back nola CS50 liburutegia lanak, adibide pare bat modu hori baita han. Ireki dut gedit Beraz bada eta ireki scanf 0, kode hau ikusteko goaz. Scanf 0, eta web orrian eskuragarri gaur, kode lerro gutxi dauka Hemen, 14 20 bidez. Eta ikus dezagun zer egiten ari da. Int, x izeneko bat adierazten du. Dio zerbait bezala, zenbaki mesedez. Eta orain esaten du, scanf% i, & x. Beraz, ez dago gauza berri mordo bat dago. Baina scanf, mota pentsatu duzu ren printf kontrakoa bezala. printf, jakina, pantailara grabatuak. scanf Erabiltzaile batetik bilaketen moduko teklatua zerbait berak idatzitako ditu. % I besterik ez printf bezalakoa da. Horrek esan nahi du, espero du Erabiltzaile int zenbakia idazteko. Eta orain, zergatik ez dut uste duzu egon scanf & x pasatzen liteke? Bada scanf of bizitzan helburuarekin zerbait lortzeko erabiltzaileari, zer esanahia da pasatuz, eta x, orain? Bai? IKUSLEEN: [INAUDIBLE]. DAVID J. MALAN: Zehazki. Whatever I, giza, idatzi, nire sarrera da kokaleku horretan gorde egingo da joan. Ez da nahikoa, gogoratzen, besterik x gainditu, dagoeneko dugu ikusi dut delako, denbora edozein aldagai gordin bat besterik ez pasatzen duzu, Int bat bezala, beste funtzio batzuk, Ziur, hori aldatu ahal izango da aldakorra da, baina ez betirako. Ezin da Main eragina izan. It bere kopia lokal propioa bakarrik alda daiteke. Baina, horren ordez, ez duzu ematen dit benetako int du, baina didazu norabide int dela, nik orain, scanf izanik, ziur aski, hori jarraitu ahal dut jorratu eta zenbaki bat jarri ez beraz, sartzeko aukera izango duzu, baita. Beraz, programa hau exekutatu, ikus dezagun. Egin scanf 0 dot barra, scanf 0. Eta orain, zenbaki bat idazten I bezala 50, 50 esker. Orain bezala, zenbaki bat idatzi dut bada negatiboak 1, negatiboa 1 da. Orain zenbaki bat idazten dudanean 1,5 bezala, hm. Zergatik ez ikusi egin zuen nire programa me? Beno, besterik gabe, delako, esan nion Int bat bakarrik espero behar da. Guztiak eskubidea. Beraz, honen bertsio bat da. Dezagun gauzak Notch bat eta proposatzeko, hori ez da ona. Eta hortxe adibide oso sinple bat dago idatziz kodea nola hasi ahal izango dugu beste pertsona hori ustiatu daiteke edo Gauza txarra eginez hondatu. Beraz line 16, hain antzekoak espirituz baino lehen, baina ez naiz geratuko oraingoan int. Naiz geratuko da char star, kate aka. Baina, benetan zer esan nahi du? Beraz ez badut address-- zehaztu eta I deituz naiz arbitrarioki, buffer, baina s deitu izan dut, simple-- izateko eta, ondoren, egin behar dut, niri azaltzeko, , ezin duzu oinarritutako aurreko aldean bada logika, zer da scanf 18 linea egiten, % s pass eta buffer bada, bertan helbide bat da? Zer da scanf, aplikatzea baduzu zehatza bera logika 0 bertsioan bezala, Hemen egiten saiatu egingo da, noiz Erabiltzaile mota zerbait egin? Bai? IKUSLEEN: [INAUDIBLE]. DAVID J. MALAN: Zehazki. Scanf, logika lehenago, katea hartzen joan giza idatzi in-- Orain bat, kate bat, ez da zenbaki bat, ustez, berak cooperates-- bada eta nik hori jarri saiatzeko joan memoria Kate edozein dela helbidean buffer zehazten du. Eta hori handia da, buffer delako hain zuzen ere ekarri helbide bat izan behar du. Baina aldarrikatzen dut programa hau buggy batean modu oso larriak, zer balio dagoelako lehenetsita bufferreko? Zer egin dut hasieratu sartu? Zer zatia oroimenaren? Ez daukat, ezta? Beraz, I esleitu ditudan arren bat char izar hori s jada ez deitu, nik ordez deitu, buffer-- beraz dezagun marrazteko aldagai izen-abizenak orain bezala buffer-- ez badut hemen GetString edo malloc deitu, eraginkortasunez horrek esan nahi du buffer besterik zabor balio batzuk. Orain zer esan nahi du? Duten scanf Esan dut esan nahi du erabiltzaileak kate bat espero. Eta zer ezagutzen duzu? Whatever gauza hau seinalatuz zaie eta galdera ikurra marraztu dut, baina, egia esan, berau izan da joan OX1, 2, 3, antzeko zerbait ezta? Akastunak balio batzuk da hori besterik gertatzen ez aurretik izan. Beraz esanda, ez da buffer besterik ez da bagina bezala memorian zerbait seinalatuz. Ez dut ideiarik ere zer. Beraz, idazten dudanean gabe ere bada orain, joan da jartzea g-a-b-e / 0 ez saiatzeko. Baina nork daki zer den? Eta iraganean, edozein denbora ukitu saiatu gara horrek ez du parterik memoria guri, zer gertatu den? Edo ia aldi bakoitzean. Segmentazioa errua, ezta? Gezi hau, ideia ez daukat non da seinalatuz. ausazko balio batzuk besterik ez da. Eta, jakina, zuk interpretatzen bada ausazko balio bat helbide gisa, ra joan zaren ausazko helmuga batzuk. Beraz gabe gerta daiteke, hain zuzen ere crash nire programa kasu honetan hemen. Beraz, zer egin dezakegu hori, ia txarra? Hirugarren hau kontuan hartu eta scanf azken adibidea. Bertsio hau da, zer zentzu hobea? Eroso bazara aurreko arazoa, hau da, hobeto. Zergatik? IKUSLEEN: [INAUDIBLE]. DAVID J. MALAN: Ongi. Beraz line 16 kasu honetan hobea da, zentzu honetan esplizituki ari gara memoria batzuk esleitzean. Ez dugu malloc erabiliz, Astean 2 erabiltzen ari gara array bat besterik ez geratuko hurbilketa. Eta nik kate bat dela esan baino lehen besterik karaktere array bat da, beraz, hau da, erabat legitimoa. Baina, noski, gisa , kontutan duzun tamaina finkoa, 16. Beraz, programa hau da, erabat seguru, I idazten baduzu pertsonaia bat, kateak ere, bi pertsonaia kateak, 15 karaktere kateak. Baina bezain laster idazten hasi naiz 16 bezala, 17, 18, 1.000 karaktere-kateak, non dago kate hori amaituko da? Honez amaitzeko neurri batean hemen. Baina gero, nork daki zer gehiago mugak gainditzen da array zehatz honetan? Da Dut bagina bezala hemen deklaratu 16 kaxak. Beraz marraztu beharrean 16 guztiak, zaitugu bakarrik itxurak ditudan marraztuta I 16. Baina gero saiatzen naiz kate bat irakurri hori askoz luzeagoa, 50 pertsonaiak bezala, Jarriz hasteko noa a, b, c, d, x, y, z. Eta hau da, ustez memoria beste segmentu batzuk hori, berriz, eragin ditzakezu nire programa, kraska Nik ez delako eskatu Ezer 16 besterik byte baino gehiago. Beraz, nork zaintzen? Beno, hemen CS50 liburutegia da. Eta hau gehienek besterik ez da up goiko argibide bezala. CS50 liburutegia, denbora honetan guztian, lerro 52 lerro hau izan du. Typedef Ikusi dugu, edo ikusiko duzu typedef pset 4, besterik sortzen batean sinonimo zeinaren char izar gehiago izan daitezke Besterik gabe, kate gisa aipatzen. Beraz, hau da, bat prestakuntza gurpilak gutxi Klikowsky erabili dugu kanpaia azpian. Bitartean, hemen funtzioa da, getchar. Orain, antza denez, ez gorputza ez da. Eta hain zuzen ere, I mantendu bada korritzea, ez dut benetan ikusteko edozein inplementazio Funtzio horiek. Behatu kontrol gisa, zergatik da hori? IKUSLEEN: [INAUDIBLE]. DAVID J. MALAN: Bai. Beraz, hau Goiburu-fitxategia da. Eta goiburu fitxategiak dituzten prototipoak, gehi beste gauza batzuk, badirudi, typedefs bezala. Baina CS50.c, ere bertan dugu inoiz ez zaie eman duzu, baina berriro CS50 tresnaren egon guztiak oraingoan, sakona bere karpetak barrutik, nabarituko ez dagoela da bat osoa funtzio sorta hemen. Izan ere, goazen behera joan. Dezagun ahaztu horietako gehienak, oraingoz. Baina joan behera getInt to eta ikusi getInt nola funtzionatzen duen. Beraz, hemen getInt da. Eta inoiz benetan zaintzen bada nola int lanak, hemen haren dokumentazioa da. Eta gauza artean dio da kontatzen da zer balio-barrutia ere itzuli ahal izango da. Funtsean negatiboa 2 milioi 2 positiboa milioi, eman edo hartu. Eta bihurtzen da, hau guztia denbora, inoiz ez dugu, nahiz eta izan da egiaztatu, zerbait oker joan ezkero, bihurtzen da hori guztia oraingoan, getInt ditu Izan berezi bat itzuli konstante, ez nulua, baizik INT_MAX, hau da, programatzaile bat besterik ez konbentzio. Hemen esan nahi du balioa berezi bat da. Ziurtatu hori egiaztatzeko, aski kasu horretan zerbait oker. Baina ez dugu inoiz lanik Orain arte horrekin, berriro ere, hau delako ekarri zuen errazteko. Baina nola getInt eskuratzeko inplementatu du? Beno, inork, ez du argumenturik hartzen du. Badakigu. Int bat itzultzen ditu. Badakigu. Beraz, nola funtzionatzen kanpaia azpian da? Beraz, ez da itxuraz infinitua begizta, gutxienez, itxura. Ohartu getString erabiltzen ari gara. Beraz, interesgarria da. getInt gure funtzioa, getString deiak. Eta orain zergatik agian hori horrela balitz? Zergatik nago defentsa izateaz Hemen line 165 in? Zer izan line gertatuko 164, argi izan behar du? Lehen bezala erantzun bera da. Agian besterik memoria izan. Zerbait gaizki getString batera, lortu dugu hori kudeatu ahal izateko. Eta arrazoia ez dut itzultzeko null dela, teknikoki, null erakuslea da. getInt int bat itzuli du. Beraz, arbitrarioki dut erabaki, funtsean, 2 milioi duten, eman edo hartu, va balio berezia izan duten inoiz ezin dut benetan erabiltzaileak lortzeko. Da bakarrik balio noa bat errore-kode bat irudikatzeko alferrik. Beraz, orain, gauzak apur fancy bat. Eta ez da funtzio bera nahiko lehen bezala, baina oso antzekoa da. Oharra Beraz, hemen deklaratzen dut, lerro 172, biak bat int n eta char c a. Eta gero, funky lerro hau erabiltzen dut, sscanf, eta horrek bihurtzen da ez du teklatuaren bidez katea bilatu. Lehendik dagoen kate bat nabarmentzen da, erabiltzaileak dagoeneko idatzi ditu. Dagoeneko Beraz getString, deitu nuen eta horrek esan nahi du memoria Kate daukat. sscanf da, zer duzu litzaidake parsing funtzio bat deitu. Itxura katea dut at It idatzitako, pertsonaia pertsonaia arabera, eta zerbait erabilgarria egiten du. Kate hori line gordetzen. Eta hori gertatzen soilik ezagutzen dut babeskopia eta hemen esaten, oi, OK, Ez denbora honetan, baina lerro deitu nuen. Eta orain, hau da, pixka bat desberdinak. Baina hori eraginkorra esan nahi du, arrazoiak direla eta zertxobait beharko dugu gure eskuetan olatuen gaur egun, ari garela egiaztatzea Ikusten erabiltzaileak idatzitako bada eta int eta, agian, beste pertsonaia bat. Erabiltzaileak idatzitako bada int bat, da joan n gordetzeko, naiz delako hau helbidea igaroz, trikimailu berria gaur ikusi dugu. Erabiltzaileak ere idatzitako bada bezalako 123x ere, x duten amaitzeko bat joan Pertsonaia c letra. Orain bihurtzen da sscanf dela me esango dizu, adimentsuan, zenbat aldagai sscanf zen Arrakasta osoz bete. Beraz, logika honen arabera, bada funtzioa Ezartzeko, naiz da getInt, baina dut egiaztapena, potentzialki, erabiltzailearentzat int bat idatzi dute beste zerbait, eta jarraian, zer egin sscanf en nahi dut Itzultzen den balioa benetan nahi izan? Helburua da iritsi bada besterik erabiltzaileak int bat? Beraz itzultzen sscanf bada 2, zer esan nahi du? Erabiltzaileak idatzitako antzeko zerbait, hitzez hitz, 123x, zein zentzugabekeria besterik ez da. Errore baldintza bat da, eta Dugu hori egiaztatu nahi dut. Beraz, hau ere erabiltzaile mota bada, by logika hori, zer egiten duen sscanf itzultzeko, litzateke esan duzu? Beraz, 2 itzuli da, zeren 123 Hona hemen joango gara, eta x da azkenean hemen joan. Baina ez dut nahi x bete ahal izateko. Sscanf izateko bakarrik arrakasta nahi dut bere aldagaiak lehen betez. Eta beraz, horregatik dut nahi sscanf 1. Eta hori buru gainean pixka bat bada oraingoz, hori guztiz fina. Konturatzen ordea, bat GetInt eta GetString balioak dela heck bat egiten ari gara akats asko hau honela egiaztapena dela, orain arte, nahiko askoz ahal duzun ezer idatzi zure teklatua at, eta harrapatu egingo dugu. Eta, zalantzarik gabe, egin langileak, behin betiko ez akats bat iturburu izan zure programa, zeren markagailuarekin gaude ergelak guztien egiaztapena duen erabiltzaile batek egin ditzake gauzak, kate bat idazten denean bezala int benetan nahi dituzun. Beraz, orain etorri egingo dugun long-- hau itzuli aurretik baina denbora honetan guztian, GetString eta GetInt izan kanpaia hau erabiliz azpian egon helbideak memoriaren oinarrizko ideia. Beraz, gaur egun, dezagun gauzak egiteko bat little more user-friendly. Gogoratuko denez, hegazti astetik time-- bada nire sagua beraz cooperate-- izango Kode hori, izan genuen bertan Egia, nahiko zentzu gabekoa. Kode hau ez da ezer lortzen erabilgarria, baina adibidea izan zen irakasle dela Parlante izateko irudikatzeko erabilitako zer gertatzen zen batean programaren memoria inplikatuz. Hargatik retell honetan super istorioa laburki. Lehen bi lerro hauek, in English, zer, esango zenuke? Just in arrazoiz giza, baina zertxobait hitz teknikoz, hartu labankada. IKUSLEEN: [INAUDIBLE]. DAVID J. MALAN: Ados, ari zaren ezarri Zure x eta y aldagaiak helbideak. Ez da nahiko, izan ere, x eta y ez dira zentzu tradizionala aldagaiak. x eta y helbideak dira edo helbidea gordeko du. Hargatik hau behin ere saiatu horrek. Ez da hasiera txarra, baina. Bai? IKUSLEEN: [INAUDIBLE]. DAVID J. MALAN: Ongi. Uste dut garbitzailea dira apur bat. Bi erakusle, bi zenbaki osoen deklaratzea. Eta horiek x eta y deitzen ari gara. Edo marraztu bagenitu honen irudi gisa, berriz, gogora ekarri nahiko besterik gabe, hori guztia lehen lerroan ari gara egiten koadro bat marrazten da hau bezalako, zabor-balio batzuk, eta x deituz, eta, ondoren, Hau atsegin box beste, zabor balio batzuk bertan, berau y deituz. Nik bi deklaratu dugu erakusleak, azken finean, int baten helbidea gordetzen ditu. Beraz, hori da dena. Beraz, hegazti hau egin da, buztina besterik ez dirudi. Eta Nick mota besterik bilduta geziak, ari ez bagina bezala, edozein lekutan seinalatuz bereziki, delako, besterik gabe ari dira zabor balio. Oraindik ez esplizituki hasieratu dute bereziki, edozein lekutan. Orain hurrengo lerroa kodea, abisuaren, hau da gaurkoan. Arrazoiz erabiltzaileak errespetatzen, beraz, baina ingelesez zertxobait teknikoa, zer kodea ari ildo hau? Bai? IKUSLEEN: [INAUDIBLE]. DAVID J. MALAN: Perfect. Hamarkadaren zatia esleitzean memoria hori int baten tamaina da. Eta hori erantzun erdia da. Eskubidea Erantzun duzu adierazpen erdiak. Zer da gertatzen Ezkerreko berdin ikurra alde? Bai? IKUSLEEN: Eta lagapen x aldagai horri? DAVID J. MALAN: Eta lagapen x aldagai horri. Beraz, laburpena, eskuinaldean bideratzen den Int bat gordetzeko adina memoria. Baina malloc zehatzago esanda helbidea itzultzen memoria zatia dela, eta zuk dut of besterik proposatu lortzen x gordetzen. Beraz, zer Nick zuen azken aldiz Binky da erakuslea duten arrastaka atera zuen, buztina, orain seinalatu memoria zatia zuri batean int baten tamaina berdina da. Eta hori ere ekarri lau byte adierazteko. Orain, hurrengo kode lerro Hau egin, izar x lortzen 42. Beraz, 42 da zuzenean Eskuinaldean, bizitzaren zentzua. Ezkerraldean, izar x zer esan nahi du? Hori ere izan liteke gone-- hori da OK. Ados. IKUSLEEN: Funtsean, [INAUDIBLE] joan DAVID J. MALAN: Ongi. IKUSLEEN: [INAUDIBLE]. DAVID J. MALAN: Zehazki. Ezkerraldean esan x joan. x helbidea da. Da 33 Oxford Street, edo OX1 bezalakoa da. Eta izar x esan nahi joan jorratu eta zer jarri? 42. Beraz, hain zuzen ere, hori da Nick zehazki zer egin. Hasi by zuen, funtsean, adimen hatz bat seinalatuz x, gezi jarraituz eskuineko kutxa zuri albo, eta 42 zenbakia jarri ez. Baina gero gauzak got a little arriskutsuak, ezta? Binky en bere burua galtzen. Star y funtzioak 13, zorte txarra, zer esan nahi du? Beraz, izar y bitartez joan helbidera y en. Baina zer y in helbidea? Ondo da, zabor-balioa da, ezta? Galdera marka bat marraztu dut. Nick uzkurtuta gezi gisa atera da. Eta ahalik eta azkarren saiatu behar baduzu egin star y, joan ez esaten, baina ez da legitimoa helbidea, akastunak kokapena zenbait da, programa da huts egingo. Eta hegazti-burua joan hegaz joan da hemen, ez. Beraz, azken batean, programa honetan lauak out flaw zen. Buggy programa bat izan zen. Eta konpondu beharra zegoen. Eta modu bakarra, benetan, konpondu izango litzateke, esate baterako, lerro hau, bertan ez dugu, nahiz iristeko, zeren Programa kraskatu goizegi. Baina hau konpondu nahi izanez gero, zer efektua egiten y x berdinak izan du? Beno, funtsean, y puntu at edozein dela ere, balio x seinalatuz. Beraz Nick ipuina ere, edo Binky ipuina, bai x eta y seinalatuz ziren memoria zatia zuria, beraz, azkenik, duzunean ez star y funtzioak 13 berriro, azkenean 13 jarriz egokia kokalekua. Beraz, lerro hauek guztiak ezin hobeto zilegia, batek ezik, noiz gertatu zen aurretik benetan esleitzen y balio batzuk. Orain, zorionez, ez duzu den guztietan zehar arrazoia izan DLL Suite Fix norbera-ren. Dezagun aurrera eta ireki Terminal-leiho bat hemen sortu eta ireki, une bat besterik ez, programa super labur bat halaber Ordena pointless da. Itsusi da. Ez du ezer baliagarria lortzeko. Baina gai frogatzen du oroimenaren eta, beraz dezagun begirada bat. Main, super simple. Itxuraz funtzio bat deitzen da, f, eta, ondoren, 0 ematen du. Mota da hard nahaspila hau sortu arte. Beraz, nahiko ona da nagusia, orain arte. Beraz, f problematikoa da. Eta besterik ez direla hartaz Ahalegin izendatzen sartu Hemen, kodea foku mantentzeko. f bi lerro ditu. Eta ikus dezagun zer ari den orain gertatzen ari da. Beraz, alde batetik, hemen eta utzi me egiteko aurreko koherentea honetan alde batetik, adibide, ezkerreko aldean dagoen zer egiten, ingelesez? It is-- IKUSLEEN: erakuslea bat sortzea. DAVID J. MALAN: erakuslea bat sortu int bat eta deituz x. Beraz, kutxak horietako bat sortzen da Ukipen-pantailan mantentzen dut marrazkia. Eta orain, eskuin-eskua albo, malloc, noski, Zatia memoria esleitzean da. Eta besterik gabe, argi eta garbi, nola memoria askoz da itxuraz esleitzean, baduzu besterik motatako math egin hemen? Beraz, 40 byte da. Eta badakit bat ezagutzen dut bakarrik delako int, CS50 tresnaren, gutxienez, lau byte da. Beraz, 10 4 40. Beraz, honen x batekin gordetzeko, helbide 40 ints lehen out duten dute, esleitutako lekua back, , atzera, atzera. Eta hori zer da malloc buruz gakoa. Ez du memoria pixka bat hartu hemen, apur bat hemen, hemen apur bat. You zatia memoria bat ematen du, contiguously, eragilearen sistema. Orain honi buruz zer, x bracket 10 funtzioak 0 itzultzen? Kode-lerro arbitrarioak. Ez du ezer baliagarria lortzeko. Baina interesgarria da, x parentesi 10-- delako? Bai? IKUSLEEN: [INAUDIBLE]? DAVID J. MALAN: x parentesi 10 ez dute nulua izan. Null banakatzea bakarrik sartzen da jokoan kateak, kate baten amaieran. Baina pentsamendu onak. Nola big array hau da, nahiz eta I esleitu arren Nik 40 byte? 0 bederatzi bidez, ezta? 10 ints da, guztira. 40 byte, baina 10 ints, indexatutako 0 0 eginez. Beraz, zer x bracket 10 da? Egia esan, zenbait zabor balioa ezezaguna da. Ez niri dagozkio memoria da. Ez luke egon naiz ukitzen duten byte 41 zenbakia, 42, 43, 44. Zertxobait noa urrunegi. Eta hain zuzen ere, I exekutatu bada hau programa, agian oso ondo huts. Baina, batzuetan, zortea lortu dugu. Eta, beraz, besterik ez erakusteko this-- eta Egia, duzu aurretik jakin inoiz ez hobeto esanda dezagun hau exekutatu. Ez da benetan huts. Baina aldatu dut hau, bada Esate baterako, 1.000 bezalakoa izan, hau benetan egiteko nahita, ikus dezagun gara daitezke, oraingoan huts egiten du. Ados, ez zuen huts egin. Nola 100.000 buruz? Dezagun remake, eta orain berrabiarazi. Ados. Phew. Guztiak eskubidea. Beraz, itxuraz, berriz, hauek memoria segmentu, nolabait esateko, dira arrazoiz handi, beraz, ahal dugun zortea behin eta berriro. Baina, azkenean, behin barregarria lortuko duzu eta benetan joan urrun pantailan, memoria ukitu benetan, benetan ez da zurea. Baina, Egia, horiek bugs era doaz eta zailagoa izango dela irudikatu zeure. Baina zorionez, programatzaile gisa, dugu horretarako tresna egokiak gurekin ahalbidetzen duten. Beraz, hau da, agian, inork programak ugliest of, are gdb irteera baino uglier. Baina beti lerro bat du edo duten super baliagarriak diren bi. Valgrind laguntzen duen programa da programa bat arazteko ez duzu, per se, baina aurkitu memoria-lotutako arazoak, zehazki. Automatikoki exekutatu zure kodea emango duzu, eta, gutxienez, bi gauza bila. One, ez zuen zerbait egin nahi duzu touch memoria bezalako ustekabeko ez duzula sartzen? Kasu horietan aurkitzen lagunduko dizu. Eta bi, laguntzeko izango da izeneko zerbait aurkituko duzu memoria filtrazioak, bertan daukagu ez zaio inolako kasurik, xalotasunez, denbora pixka bat eta blissfully. Baina bihurtzen da, guztiak Denbora horretan, betiere, getString izeneko dituzun beraz, gure programak askotan, eragilearen galdetzen ari zaren memoria-sistema, baina edozein oroitzapena duzu inoiz emanez atzera, unalloc egiten, edo free, da gisa da deitzen. Ez, inoiz ez dugu delako hala egiteko eskatuz duzu. Baina denbora honetan guztian, programak ditudan C idazten dute memoria leaking, eragilearen eskatuz gero eta gehiago sistema kateak eta whatnot memoria, baina inoiz gozamenerako atzera. Eta orain, hau pixka bat da oversimplification baten, baina exekutatu inoiz duzun bada, zure Mac edo Zure PC nahiko zenbait denbora, irekitzeko programak asko, agian programak itxiz, eta nahiz eta zure ordenagailuan ez du huts egin du, hainbeste motelagoa da lortzean, nahiz eta benetan gisa memoria asko erabiliz edo baliabideak, nahiz eta, Oraindik ez baduzu, are teklatua ukitu, duten jolasten liteke baina ez always-- Could izan programek duten exekutatzen ari zaren beraiek memoria filtrazioak dute. Eta OS eskatuz gero eta mantendu dute memoria gehiago, baina ahaztu, eta, Ez da benetan erabiliz, baina beraz memoria hartuz doa agian hori da nahi beste programa batetik. Beraz, azalpen bat komuna da. Orain hemen non Valgrind-en irteera guztiz gutxiago dutenei atrocious eta erosoago alike. Baina interesgarriena stuff eskubidea sortu da hemen. Niretzat baliogabea idazteko kontatzea da lau tamaina programa honetan gertatzen den bezala, bereziki, line 21 memory.c at. I joan bada linea 21, hm, ez dago hain zuzen ere, lau tamaina baliogabea idazteko da. Zergatik lau tamaina? Beno, zenbaki hau eta hura ezer izan daiteke int bat da. Beraz, lau byte da. Beraz, lau byte naiz jarriz non ez dute dagozkio. Horixe Valgrind da benetan me kontatzea. Gainera, ere izango da esan dit, ikusi dugu, hau exekutatzen duzun bezala etorkizuneko pset batean, eta gero memoria, hain zuzen ere leaked dituzun , Behar dut I deitu delako malloc, baina ez daukat benetan , izeneko kasu honetan, free, azkenean ikusi dugu malloc aurkakoa da. Beraz, gaur egun, nire ustez, azken adibide bat. Beraz, hau da, pixka bat gehiago urrutira, baina agian arrazoirik larriena izan memoria ibili, eta programak arrazoia askok edo / eta web zerbitzariak, baita egun ere, hartzen dira baino gehiago guys txarra nonbait Interneten nor dira nolabait paketeak akastunak bidaliz zure zerbitzaria Zure kontuak hondatu nahian, edo zure datuak hartu, edo, besterik gabe, oro har, makina bat baino gehiago hartu. Buffer gainezkatze, gisa Izenak berak, bitarteko Ez int bat, baina buffer bat gainezka. Eta buffer bat fancy modu bat besterik ez da esanez memoria mordo bat da. Eta hain zuzen ere, kate bat deitu dut buffer, s beharrean aurretik. Buffer bat bada delako, YouTube zentzuan bezala, edo edozein unetan bideo bat ikusten ari zarenean, Ikusi ahal izan duzu agian hitza buferra du, dot, dot, dot. Oso gogaikarriak. Eta bakarrik esan nahi Zure bideo jokalari hori da asko jeitsi nahian byte, asko byte Internetetik bideo batetik. Baina motela da, beraz, saiatzen ari da horietako sorta bat deskargatu buffer bat, edukiontzi bat, beraz, bete nahikoa bytes duzu ondoren, ahal dela, erakusten duzun bideoan, Etengabe gelditzea gabe. Baina bihurtzen da, ahal duzun big honetara buffer bat. Baina saiatu datuak askoz hau jarri da, eta oso gauza txarrak gertatuko. Beraz, adibidez, utzi ditzagun Adibide behin betiko esaldi hau. Hau beste programa bat da hori, hasiera batean, ez du ezer super erabilgarria egin. Honez Funtzio nagusia lortu da duten funtzioa f deiak. Eta funtzio hori, f, hemen, duela char array bat, c izeneko, tamaina 12koa. Eta gero hau erabiliz strncpy izeneko funtzio berria. Bihurtzen da, sinple honekin, Kode-lerro Sinplea da, bi lerro, nire programa osoa egin dugu, eta, beraz, nire ordenagailua osoan, eta nire erabiltzaile-kontua, eta nire hard gidatzeko inori babesik gabeko nork daki, eta nahikoa da exekutatu Komando-lerro jakin bat programa honetan argudioa. Bestela esanda, bada txarra lasaia honetan argvargv [1] barrutik jartzen idatziz teklatuaren bat oso bereziki landutako at kate, ez abc, 123, baina, funtsean, Sinbolo bitarra exekutagarria ordezkatzen dituzten kodea, idatzi zuen edo programa bat, programa sinple honek, hau da, dituzten Milaka programa ordezkaria duten antzera zaurgarria, daresay, berak azken batean ezabatu ahal guztiak Nire disko gogorrean fitxategiak, lortu gonbita keinukariak zuen edo zuen, beraz, komando idatzi, bere kabuz, fitxategi guztiak email neure buruari. Ezer egin ahal izango dut, berak edo kode honekin berak egin dezake. Ez du nahiko konpondu honek oraindik dugu. Eta hain zuzen ere, nik joan irudi txiki bat suposa Hau atsegin, zein dugu laster etorriko guztiak hobeto ulertzeko. Baina, gaur egun, dezagun azkenean azkenak zer da, zorionez, apur bat gehiago Ulergarria xkcd txantxa, hurrengoan berrekiteko arte. Guztiak eskubidea. Ikusi duzu, asteazkenean. [Musika jotzen] HIZLARIA: Eta orain, sakona pentsamenduak, Daven Farnham arabera. Memoria pila batean jauzi bezalakoa da igande arratsalde urrezko hostoak. Haizea Herrigintza, tossing zure hair-- oh, egunak when-- galdu dut [Barreak]