[Zenelejátszási] [Videó lejátszás] -Ő Hazudott. -Miről? -Nem Tudom. -Szóval Mit tudunk? -Ez A 09:15, Ray Santoya volt az ATM. -Igen. Tehát a kérdés az, hogy mi csinált a 09:16? -Shooting A 9 milliméteres valamit. Talán látta a mesterlövész. -vagy Volt vele dolgozni. Várj. Menjünk vissza egy. -Mit látsz? -Bring Az arcát, teljes képernyőn. -His Szemüveget. -Van Egy reflexió. -Ez A Nuevitas baseball-csapat. Ez a logó. -És Ő beszél Aki visel, hogy kabát. [Lejátszás vége] DAVID MALAN: Rendben. Ez CS50, és ez egy kicsit Az [hallhatatlan], amellyel te belekóstoltak a problémát az alábbi négy. Ma elkezdünk nézni egy kicsit Mélyen meg ezeket a dolgokat nevezett mutató, amely annak ellenére, hogy egy szép misztikus téma, kiderül, hogy ez lesz hogy az eszköz, ami által elkezdődhet és összeszerelés sokkal kifinomultabb programokat. De megcsináltuk a múlt szerdán útján néhány claymation első. Szóval ez, sokan emlékeznek, Muci és szoktunk rá hogy vessen egy pillantást a programot, hogy Nem igazán semmi érdekes, de ez nem válik egy kevés probléma. Így kezdődik ma, miért nem sétálunk gyorsan át néhány ilyen lépéseket, próbáld eltávozni az emberi feltételek Pontosan mi folyik itt és hogy ez miért rossz, majd lépni és valóban kezdjék építeni valamit ezzel a technikával? Szóval ezek voltak az első két sort ebben a programban és a laikus szempontból, hogy mi a következő két sort csinál? Valaki, aki meglehetősen kényelmes A mi nyilvánította a képernyőn? Mi ez a két sor csinál? Ez még nem minden, hogy eltér a héten az egyik, de van néhány új speciális szimbólum. Igen? Vissza ott. Közönség: deklarálása mutatók? DAVID MALAN: Mondd még egyszer? Közönség: deklarálása mutatók? DAVID MALAN: deklarálása mutatók és nézzük finomítani egy kicsit. Közönség: [hallható] címet x és y majd. DAVID MALAN: És akkor foglalkozzon. Tehát konkrétan mit csinálunk A mi nyilvánító két változó. Ezek a változók, bár folynak hogy int típusú csillag, amely Pontosabban azt jelenti, fognak tárolni A címe int, illetve, X és Y. Most vannak-e olyan értékek? Vannak-e olyan konkrét címeket ezekben két változó ebben az időpontban? Nem. Ez csak az úgynevezett szemetet értékeket. Ha éppen nem rendelhet változó, bármi is volt a RAM-ban korábban fog tölteni nullákkal és az is, mind a két változó. De még nem tudjuk, mik ezek, és ez az, lesz kulcsa, hogy miért Muci elvesztette a fejét a múlt héten. Szóval ez volt a claymation megtestesülése ennek a ahol éppen most két változó, kis kör alakú darab agyagot, hogy képes tárolni változók, de mivel A bebugyolálva nyilak azt sugallják, ők valójában nem mutat hogy bárhol ismert. Így aztán volt ezen a vonalon, és ez a új volt a múlt héten, a malloc memória elosztása, ami csak egy divatos módon megmondani az operációs rendszer, a Linux vagy Mac OS és Windows, Hé, adj egy kis memóriát, és csak annyit kell mondani az operációs rendszer az, ami, ha megkéri azt a memóriát. Ez nem fog törődni, hogy mit fogsz csinálni vele, de nem kell mondani az operációs rendszer, amit útján malloc. Igen? Közönség: Mennyi? DAVID MALAN: Mennyi? Mennyit byte, és így, ez megint, egy kitalált példa, csak azt mondja, adj akkora, mint egy int. Most, akkora, mint egy int négy bájt vagy 32 bit. Tehát ez csak egy módja mondván, hé, operációs rendszer, adj négy bájt memóriát hogy tudom használni a rendelkezésemre, és konkrétan mit jelent malloc visszatérés tekintetében E darab négy bájt? Közönség: Cím? DAVID MALAN: A címet. A címe, hogy darab négy bájt. Pontosan. És így ez az, ami végső soron tárolt x és ez az, amiért nem igazán érdekel, mi a számát cím, függetlenül attól, hogy OX1 vagy OX2 vagy valamilyen rejtélyes hexadecimális címet. Mi csak érdekel képileg hogy ez a változó x ma rámutatva, hogy darabja a memóriát. Tehát a nyíl mutatja a mutatót, vagy Közelebbről, egy memória címét. De ismétlem, nem tipikusan érdekel mik azok tényleges címek. Most, ebben a sorban az mi laikus szempontból? Csillagok x egyre 42 pontosvessző. Mit is jelent ez? Akarsz menni? Ne vakarja a nyakát. Közönség: A címe az x a 42. DAVID MALAN: A címe az x 42. Nem egészen. Olyan közel, de nem egészen, mert ott van a csillag, ami előtaggal ez x. Tehát meg kell dobnia egy kicsit. Igen? Közönség: Az az érték, a pointer x mutat 42. DAVID MALAN: OK. Az érték, amit a mutató x rámutatva, hogy, mondjuk, legyen 42, vagy másképpen fogalmazva, a csillag x mondja, menj bármilyen címet van x, függetlenül attól, hogy 1 Oxford Utca vagy 33 Oxford Street vagy OX1 vagy ox33, bármi hogy a numerikus cím, csillagos x a dereferencing x. Így megy arra a címre, és aztán a szám 42 van. Tehát ez lenne egyenértékű módon ezt mondja. Szóval ez minden rendben, majd mi lenne a kép az alábbiak szerint, ha felvettünk A 42 darab, hogy négy byte jobb oldali, de Ez a vonal, ahol a dolgok elromlott és Muci feje bukkant le ezen a ponton, mert rossz dolgok történnek, amikor Ön dereference szemetet értékek vagy hivatkozás feloldási érvénytelen mutatók, és azt mondom érvénytelen mert ezen a ponton a történet, mi van belül y? Mi az értéke y alapú az elmúlt pár lépésre? Igen? Az mi? Közönség: Egy cím. DAVID MALAN: Egy cím. Meg kell egy címet de én inicializált ez? Szóval még nem. Tehát mi tudjuk, hogy ott? Ez csak néhány szemetet értéket. Ez lehet bármilyen címet nulláról 2 milliárd ha van két giga RAM, vagy nulla, hogy 4 milliárd, ha már Van négy gigabájt RAM-mal. Ez valami szemetet értéket, de a probléma hogy az operációs rendszer, ha nem adott Önnek hogy darab memória kifejezetten hogy akarsz menni, ez általában fog okozni, hogy mit láttunk egy szegmentációs hiba. Tehát valójában, valakinek, aki küszködött problémákkal munkaidőn vagy problémákat, hogy a több általában megpróbálja kitalálni, szegmens hiba, hogy általában azt jelenti, te megható egy szegmense memória, hogy nem kell. Te megható memória az operációs rendszer nem megengedett, hogy megérintse, hogy ez megy túl messzire a tömb vagy most kezdődik, hogy ez azért van, mert megható memória, hogy csak némi szemetet értéket. Ennek során csillagos x itt fajta definiált működést. Soha ne csináld, mert esélye van, a program csak fog zuhanni, mert azt mondod, menj erre a címre és fogalmam sincs, hol ezt a címet valójában. Tehát az operációs rendszer valószínűleg fog zuhanni a programot Ennek eredményeként, és valóban, ez mi történt ott, hogy Muci. Így végül, Muci rögzített ezt a problémát ezzel. Annak érdekében, hogy a program maga hibás volt. De ha valami haladjanak előre és végre ez a vonal helyett, y értéke x csak azt jelenti, amit cím egy x is betette y. És így képileg, most már képviselik ezt a két nyíl Az x és y mutatóeszköz hogy ugyanazon a helyen. Szóval szemantikailag, x egyenlő hogy Y mert e két tárolja ugyanazon címét, ergo mutatva 42, és most, amikor azt mondod csillagos y, megy a címet y, ez egy érdekes mellékhatása. Tehát az a cím y az ugyanaz, mint a címet x. Tehát ha azt mondod megy a címet y és módosítsa az értéket 13, aki mást az érintettek? X, D pont, hogy úgy mondjam, kell érintettek. És valóban, hogyan Nick felhívta kép A claymation volt, hogy pontosan. Annak ellenére, hogy követjük a mutatót y, mi végül ugyanazon a helyen, és így ha voltunk nyomtatni out X vagy Y a pointee, akkor mi lenne látni az értéke 13. Most azt mondom, hogy pointee összhangban van a videó. A programozók, hogy én tudás, sosem azt a szót pointee, azt, ami hegyes a, de a következetesség A videó, rájönnek ez minden, ami volt, jelentette be, hogy a helyzet. Szóval minden kérdésre claymation vagy mutatókat vagy malloc csak még? Nem? Minden rendben. Tehát minden további ado, vessünk egy pillantást A ahol ez ténylegesen óta használják egy ideje. Szóval ezt már CS50 könyvtár Ez van mindezen funkciókat. Már használt GetInt sokat, getString, Valószínűleg GetLongLong korábban az én PSET egy vagy úgy, de mi ténylegesen folyik itt? Nos, vessünk egy gyors pillantást a motorháztető alatt egy program, amely inspirál miért adunk a CS50 könyvtár, sőt, mint a múlt héten, kezdtük, hogy ezeket képzés kerekek le. Szóval ez most rendezve A halál utáni, hogy mi már folyik belsejében CS50 könyvtár, még akkor is, most kezdenek mozogni előle a legtöbb program. Tehát ez a program neve scanf 0. Ez szuper rövid. Csak van ezeket a sorokat, de bevezet olyan függvény scanf hogy mi történt valójában látni Egy pillanatra belsejében a CS50 könyvtár, bár egy kicsit más formában. Szóval ez a program on-line 16 kijelenti változó x. Szóval adj négy bájtot int. Ez már mondtam felhasználó, számú kérjük, majd ez egy érdekes vonal ténylegesen összeköti a múlt héten és ez. Scanf, majd észre, hogy vesz egy formátumstringek, mint a printf, % i: az int, majd tart egy második érv, amely úgy néz ki, egy kicsit funky. Ez jelet x, és felidézni, mi csak láttam egyszer a múlt héten. Mit jelet x képviseli? Mit jelet tenni a C? Igen? Közönség: Az címét. DAVID MALAN: Az címét. Szóval ez az ellenkezője A csillag üzemeltető, míg a csillag üzemeltető azt mondja, menj Erre a címre, a jelet üzemeltető mondja, kitalálni a címe ez a változó, és így ez a kulcs, mert scanf célja az életben hogy átvizsgálja a felhasználó közreműködött a billentyűzet, attól függően, hogy bármit ő típusok, majd olvasd el, hogy felhasználói input egy változó, de láttam az elmúlt két hétben hogy ez a swap hogy megpróbálta könnyedén végrehajtani Csak törve. Emlékezzünk vissza, hogy a swap, ha csak kijelentette, A és B, ints, mi nem sikerült cserélni a két változó belső swap Csakúgy, mint a tej és a HL, de amint swap-vissza, mi volt az eredmény tekintetében hogy x és y, az eredeti értékek? Semmi. Igen. Semmi sem történt abban az időben, mert csereügyletek változtatni csak a helyi másolatot, ami azt, valamennyi Ebben az időben, amikor mi már lett átadva érvek a funkciók vagyunk csak múló példányban ezeket az érveket. Meg lehet csinálni, hogy amit akarsz velük, de ők fognak nincs hatással az eredeti értékeket. Tehát ez problémás, ha szeretnénk, hogy a funkció, mint a scanf az életben, amelynek célja, hogy átvizsgálja A felhasználó által megadott a billentyűzetről majd töltse ki az üres, így a beszélni, hogy van, hogy egy változó, mint az X érték, mert ha én lennék hogy csak át x scanf, ha figyelembe vesszük a logikája utolsó héten, scanf tehet, amit akar egy példányát x, de nem tudta tartósan megváltoztatni x hacsak nem ad scanf egy kincses térképet, hogy úgy mondjam, ahol x jelzi a helyet, ahol átadjuk az x címét, hogy scanf lehet menni, és valójában a változás az x értékét. És így valóban minden hogy ez a program nem ha én scanf 0, az én forrás 5m könyvtár, hogy scanf 0, dot perjel scanf, száma Kérjük 50., köszönöm a 50. Szóval ez nem olyan érdekes, de mi történik valójában az, hogy amint hívom scanf itt, az x értékét alatt folyamatosan változott. Most úgy tűnik, ez szép és jó, és valójában ez Úgy tűnik, mintha nem igazán kell A CS50 könyvtár már egyáltalán. Például Fussunk ezt még egyszer itt. Hadd nyissa meg újra a második. Próbáljuk számos kérjük és ahelyett, hogy 50, mint korábban, mondjuk, nem. OK, ez egy kicsit furcsa. OKÉ. És csak valami ostobaságot itt. Tehát úgy tűnik, nem kezelni hibás helyzeteket. Tehát meg kell minimálisan kezdete hozzá néhány hibajavítási meggyőződni arról, hogy a felhasználó rendelkezik beírtam a tényleges szám, mint 50, mert látszólag gépelés szavak nem érzékeli problémának, de valószínűleg kell. Nézzük meg ezt a verziót most, hogy kísérletem újraimplementálni getString. Ha scanf van mindez funkcionalitást beépítve, Miért is lett belekóstoltak ezekkel képzés kerekek, mint getString? Nos, itt van talán a saját egyszerű változata getString ahol egy héttel ezelőtt azt mondta volna, adj egy húr, és hívják buffer. Ma megyek kezdődik csak mondván char csillag, amely visszahívás, ez csak egyet jelent. Úgy néz ki, rémisztőbb, de ez pontosan ugyanaz a dolog. Szóval adj egy változó nevű puffer hogy fog tárolni egy string, mondja a felhasználó húr kérjük, majd, mint korábban, próbáljuk kölcsönkérni ezt a leckét scanf % s ez alkalommal majd át a puffer. Most, gyors józanság csekket. Miért nem mondja jelet puffer ebben az időben? Következtethetett az előző példában. Közönség: Char csillag egy mutatót. DAVID MALAN: Pontosan, mert ebben az időben, char csillag már egy mutató, cím, definíció szerint az, hogy a csillag ott. És ha scanf elvárja egy címet, elegendő csak át a puffer. Nem kell mondani, és jelet puffer. A kíváncsiak, amit lehetett ilyesmire. Ez volna mást jelent. Ez ad egy mutatót hogy egy mutató, ami valójában Érvényes dolog C, de Most pedig nézzük, hogy ez egyszerű és tartsa a történet következetes. Én csak átutazóban a puffer és ez helyes. A probléma azonban az, ez az. Hadd menjek előre, és futtatni ezt programot, miután úgy fordítják le. Tedd scanf 1. A fenébe is, én fordító által fogása hibámat. Adj nekem egy percet. Csengés. Mondjuk scanf-1.c. OKÉ. Ott vagyunk. Kell nekem. CS50 ID a különböző konfigurációs beállítások hogy védenek meg magát. Kellett, hogy tiltsa le azokat a futó csengés kézzel ebben az időben. Tehát húr kérjük. Megyek előre, és írja menni A kedvenc hello world. OK, null. Ez nem az, amit beírtam. Tehát ez azt jelzi, hogy valami baj van. Hadd menjen előre, és írja egy nagyon hosszú sora. Köszönöm a semmis és nem tudom, ha én leszek képes összeomlik ez. Próbáljuk egy kicsit másolatot paszta és hátha ez segít. Csak illessze be egy csomó ezt. Ez mindenképpen egy nagyobb húr, mint máskor. Nézzük csak igazán megírni. Nem. Basszus. A parancs nem található. Szóval ez nem függ össze. Azért, mert én beillesztett néhány rossz karakter, de ez kiderül, nem fog működni. Próbáljuk ezt még egyszer, mert ez több móka, ha valóban összeomlik ez. Nézzük írja ezt, és most én vagyok szeretne másolni egy nagyon hosszú karakterlánc és most lássuk, ha összeomlását okozhatja ezt a dolgot. Figyeljük meg kihagytam terek és Új vonalak pontosvessző és az összes funky karakter. Belép. És most a hálózat csak, hogy lassú. Tartottam lenyomva a Command-V túl hosszú, világos. Basszus! A parancs nem található. OKÉ. Nos, a lényeg az, Ennek ellenére a következő. Tehát mi történik valójában ezzel a nyilatkozattal char csillagos puffer on line 16? Szóval mit kapok ha kijelentem, egy mutatót? Minden kapok egy négy bájtos érték úgynevezett puffer, de mi van benne belőle abban a pillanatban? Ez csak néhány szemetet értéket. Mert minden alkalommal, amikor, hogy egy változót C, ez csak néhány szemetet értéket, és még csak most kezdünk megbotlani ez a valóság. Most, amikor elmondom scanf, menj erre a címre és tedd, amit a felhasználó által. Ha a felhasználó által helló világban, nos, hová tegyem meg? Puffer egy szemetet értéket. Szóval ez olyan, mint egy nyíl ami mutatva ki tudja, hol. Talán ez mutatva Itt az emlékezetemben. És így amikor a felhasználó típus hello world, A program megpróbálja tenni a karakterlánc hello world backslash 0 abban a darab memória. De nagy valószínűséggel, de Nyilvánvalóan nem 100% -os valószínűséggel A számítógép fog majd lezuhan A programot, mert ez nem emlék számára lehetővé kell tenni, hogy megérintse. Tehát röviden, ez a program hibás Pontosan ez az oka. Én alapvetően nem mit csinál? Milyen lépéseket kell kihagytam, mint kihagytuk a Muci első példája? Igen? Közönség: Memóriakiosztási? DAVID MALAN: Memóriakiosztási. Én valójában nem kiosztott minden memória, hogy a húr. Így tudjuk javítani ezt a pár módon. Az egyik, tudjuk, hogy ez egyszerű és valóban, most már elkezdenek látni összemosódásának A sorok között, amit Egy tömb, amit egy string, amit egy char csillag, mit egy sor karakter van. Itt egy másik példa bevonásával húrok és értesítés amit tettem on-line 16, ahelyett, hogy hogy az átmeneti lesz egy char csillag, a mutató egy darab memória, Megyek nagyon proaktívan ad magamnak egy puffer 16 karakter, és valóban, ha ismeri a kifejezést pufferelés, Valószínűleg a világ a videók, ha egy videó pufferelés, puffer, bomlástermékeket. Nos, mi a kapcsolat itt? Nos, Inside YouTube és belsejét videó lejátszók általában egy tömb ami nagyobb, mint 16. Lehet, hogy egy sor mérete egy megabájtos, talán 10 megabájt, és ebbe a tömb nem a böngésző letölt egy csomó bájt, egy csomó megabájt videó, és a videó lejátszó, YouTube vagy akárki, kezdődik olvasás a byte-tömb, és minden alkalommal, amikor megjelenik a szó pufferelés, puffer, ez azt jelenti, a játékosnak ütött a vége, hogy a tömb. A hálózat olyan lassú, hogy ez nem történt újratöltötte a tömb több bájt és így kiestél bitek megjelenítéséhez a felhasználónak. Tehát puffer egy találó kifejezés itt, hogy ez csak egy tömb, egy darab memóriát. És ez javítani fogja mert kiderül, hogy tudod kezelni tömbök, mintha ezek címek, jóllehet puffer csak egy szimbólum, ez egy karakterek sorozata, buffer, ez hasznos a számomra, a programozó, akkor át a nevét körül mintha ez a mutató, mintha volt a címe egy darab A memória 16 karakter. Szóval ez azt mondani, tudom át A scanf pontosan ez a szó és így most, ha én ezt a programot, hogy scanf 2, pont perjel scanf 2, és írja be a hello world, Adja meg, hogy time-- Hmm, mi történt? Karakterlánc kérjük. Mit csináltam rosszul? Hello world, puffer. Helló Világ. Ah, tudom, mit csinál. OKÉ. Szóval ez olvasás fel amíg az első helyet. Úgyhogy csalnak egy pillanatra, és azt mondják, én csak azt akartam, hogy írja valami Nagyon hosszú, mint ez egy hosszú mondat ez egy, kettő, három, négy, öt, hat, hét, nyolc, kilenc, 10, 11, 12, 13, 14, 15, 16. OKÉ. Ez valóban egy hosszú mondat. Szóval ez a mondat hosszabb 16 karakter és így amikor elütöttem Enter, mi fog történni? Nos, ebben az esetben a történet, én kijelentette, puffer hogy ténylegesen a tömb 16 karakter kész. Tehát egy, két, három, négy, öt, hat, hét, nyolc, kilenc, 10, 11, 12, 13, 14, 15, 16. Tehát 16 karakter, és most, amikor én olvasott valami ilyesmi ez egy hosszú mondatban, hogy mi fog történni a hogy fogok olvasni, ez egy hosszú S-E-N-t-e-N-C-E, mondat. Tehát ez szándékosan egy rossz dolog, hogy én íráshoz túl határait én tömb, határain túl én puffer. Nem tudtam, hogy szerencsés és a program folyamatosan a futás és nem érdekel, de általában elmondható, hogy ez valóban összeomlik a programom, és ez a hiba az én kódolta a pillanatban lépek határain túl Az, hogy a tömb, mert én Nem tudom, ha ez szükségszerűen fog zuhanni vagy ha én csak megyek, hogy szerencsés. Szóval ez azért problémás, mert a ebben az esetben, úgy tűnik, hogy a munka és nézzük kísérteni a sorsot itt, annak ellenére, Az IDE tűnik elviselni egy kicsit of-- Ott vagyunk. Végre. Tehát én vagyok az egyetlen, amelyik képes látni. Szóval most volt egy nagyon szórakoztató gépelés ki egy nagyon hosszú tényleges kifejezésre hogy minden bizonnyal meghaladta 16 byte, mert gépelt ebben az őrült hosszú többsoros kifejezést, majd észre, hogy mi történt. A program megpróbálta azt kinyomtatni majd kapott egy szegmentációs hiba és szegmentációs hiba az, amikor ilyesmi történik és az operációs rendszer azt mondja Nem, nem érintheti meg, hogy az emlékezet. Mi fog ölni A program összesen. Szóval ez úgy tűnik problémásnak. Már javult a program, amelynek értelmében legalább van némi memóriát, de ez úgy tűnik, hogy esetükben A funkció getString hogy kapok húrjait véges hosszúságú 16. Tehát ha azt szeretnénk, hogy támogassák tovább mondatokat, mint 16 karakter, mit csinálsz? Nos, akkor növelheti a mérete puffer 32 vagy azt, hogy úgy tűnik, olyan rövid. Miért nem csak, hogy ez 1000, de álljon vissza. Mi a válasz ösztönösen a Csak elkerülve ezzel a problémával azáltal, hogy én puffer nagyobb, mint 1000 karakter? A végrehajtási getString így. Mi a jó vagy rossz itt? Igen? Közönség: Ha kötődnek egy csomó A tér és nem használja, akkor nem adják ki ismételten, hogy a tér. DAVID MALAN: Abszolút. Ez pazarló, mivel ha nem valóban szükség van 900 e bájt és mégis kérsz 1000 Összesen egyébként, te csak fogyaszt több memóriát a felhasználó számítógépén, mint meg kell, és miután az összes, néhány akkor már találkozott az életben, hogy ha éppen futó rengeteg program és ők eszik fel sok memória, ez valóban befolyásolja a teljesítményt és a felhasználói élményt a számítógépen. Szóval ez a fajta lusta megoldás, az biztos, és fordítva, ez nem csak pazarló, mi a probléma továbbra is, még akkor is, ha tehetem puffer 1000? Igen? Közönség: A karakterlánc hossza 1001. DAVID MALAN: Pontosan. Ha a string hossza 1001, Ön pontosan ugyanazt a hibát, és érvem, én Csak akkor teszi 2000- de nem tudom, előre, hogy mekkora legyen, és mégis, én le kell fordítanod a programot előtt hagyta ember használja, és töltse le azt. Szóval ez pontosan az a fajta dolog, hogy a CS50 könyvtár próbálkozás hogy segítsen bennünket, és mi csak pillantásra néhány, a mögöttes végrehajtása itt, de ez CS50 dot C. Ez a az a fájl, ami már a CS50 IDE Mindezen hetekben, hogy van már használja. Ez előre összeállított és akkor már használ ez automatikusan természeténél rendelkező dash L CS50 zászló csengés, de ha nézd végig az összes ezeket a funkciókat, itt getString, és csak, hogy ha egy íze, mi folyik itt, vessünk egy gyors pillantást a viszonylagos összetettségét. Ez nem egy nagyon hosszú funkciót, de nem tettük meg kell gondolni minden nehéz erről hogyan megy a szerzés szálakat. Tehát itt az én puffer és én látszólag inicializálás null. Ez, természetesen, a ugyanaz, mint a char csillag, de én úgy határozott, végrehajtása CS50 könyvtár hogy ha megyünk teljesen dinamikus, Nem tudom előre, hogy mekkora egy húr a felhasználók fognak akarnak. Így fogok kezdeni csak egy üres stringet és fogok felépíteni annyi memória, ahogy kell, hogy illeszkedjen a felhasználó húr és ha nincs elég, én fogom kérni Az operációs rendszer több memóriát. Megyek mozgatni a húr egy nagyobb darab memória és megyek, hogy kiadja, vagy szabad a kellően nagy darab memória és mi csak megy Ehhez iteratív. Tehát egy gyors pillantást, Itt csak egy változó amellyel fogom nyomon követni A kapacitása én puffer. Hány byte tudok illik? Itt egy változó n és amely fogom tartani követni, hogy hány bájt ténylegesen a puffer vagy a felhasználó által beírt. Ha nem láttam ilyet, akkor meghatározhatja, hogy egy változó, mint egy int aláíratlan, amely mint a neve is sugallja, azt jelenti, hogy nem negatív, és miért lenne Én soha akarom zavarni, meghatározva hogy egy int nem csak egy int, de ez egy unsigned int? Ez egy nem-negatív int. Mit jelent az [hallhatatlan] jelent? Közönség: Ez leírja mennyiségben memóriával rendelkezik, amely lehet [hallhatatlan]. DAVID MALAN: Igen. Tehát, ha azt mondom, előjel nélküli, ez valójában így egy kis extra memória és úgy tűnik, egyfajta buta, de ha Van egy kis plusz memóriát, hogy azt jelenti, hogy kétszer annyi értékeket is képviseli, mert ez lehet egy 0 vagy egy 1. Emiatt alapértelmezés szerint int nagyjából negatív 2 milliárd egészen akár pozitív 2 milliárd. Ezek nagy tartományok, de ez még mindig egyfajta pazarló ha csak érdekel méretű, ami csak ösztönösen kell lennie, nem-negatív, vagy pozitív vagy 0, illetve akkor, miért pazarolja 2 milliárd lehetséges értékei negatív számok ha te soha nem fog használni őket? Tehát azzal, aláíratlan, most én is int között 0 és mintegy 4 milliárd. Tehát itt csak egy int C okokból nem fogunk bejutni csak most hogy miért ez egy int helyett Egy karakteres, de itt van a lényeg, hogy mi folyik itt tovább, és néhányan közületek Lehet, hogy használ, például a fgetc funkció még PSET négy vagy azt követően, majd meglátjuk, hogy ismét problémát meg öt, fgetc szép, mert ahogy a neve fajta, fajta arcanely sugallja, ez egy függvényt, amely kap egy karaktert, és így, mi alapvetően eltérő arról, hogy mit csinálunk a getString a mi nem használjuk scanf ugyanúgy. Mi csak kúszik végig lépésről-lépésre mint amit a felhasználó beírt, mert mi mindig hozzá egy char, és így mindig biztonságosan nézd meg egy karaktert egy időben, és A mágikus kezd itt történni. Megyek lépjünk le a a közepén ez a funkció csak azért, hogy röviden bemutassuk ezt a funkciót. Hasonlóan van egy malloc függvény, van A realloc függvény, ahol realloc Lehetővé teszi átcsoportosítása egy darab memória és hogy ez nagyobb, vagy kisebb. Tehát hosszú történet rövid és hullám kezem a mai, tudom, hogy mit getString csinál, az ez a fajta A varázslatosan növekvő vagy csökken a puffer, mint a felhasználói típus ő karakterlánc. Tehát, ha a felhasználó beír egy rövid karakterlánc, ezt a kódot egyszerre csak annyi memória, hogy illeszkedjen a húr. Ha a felhasználó tartja gépelési mint én újra és újra és újra, nos, ha a puffer kezdetben ez a nagy és a program felismeri, hogy várj egy percet, én vagyok a hely, ez lesz a kettős a méret a puffer majd kétszer a puffer mérete és a kód, hogy nem a duplázás, Ha megnézzük, hogy itt, ez Csak az okos egysoros. Lehet, hogy nem látta ezt a szintaxist előtt, de ha azt mondod csillagos egyenlő, ez ugyanaz, mint a mondván kapacitás alkalommal 2. Tehát így csak megduplázva a kapacitás a puffer majd elmondja realloc adni arról, hogy sokkal több memóriát. Most, mint egy félre, ott más funkciók itt hogy nem fogunk nézni bele a részletekbe Más, mint megmutatni a GetInt, használjuk getString a GetInt. Megnézzük, hogy ez nem null, amely visszahívás, a különös érték azt jelenti, valami elromlott. Elfogyott a memória. Jobb ellenőrizze, hogy. És térjünk vissza egy őrszem értéket. De majd elhalasztja a megjegyzéseket, hogy Ezért aztán használja ezt unokatestvére scanf nevű sscanf és kiderül, hogy sscanf, vagy string scanf, Lehetővé teszi, hogy egy pillantást a sor, hogy A felhasználó begépelte, és segítségével elemezni lényegében és mire vagyok keresnek itt van Én mondom sscanf, elemzik, amit a felhasználó beírt és győződjön meg róla% i, van egy egész szám, és nem fogunk bejutni ma pontosan, hogy miért van még egy% c ide, de ez dióhéjban lehetővé számunkra, hogy érzékeli, ha a felhasználó begépelt valami hamis szám után. Tehát az oka, hogy GetInt és getString megmondja, hogy újra, újra, újra azért van, mert az összes hogy a kód is írtam, ez a fajta nézi a felhasználó által megadott ügyelve arra, hogy teljesen numerikus vagy ez egy tényleges úszó pont értéke vagy hasonló, attól függően, hogy milyen értéket működik, amit használ. Hűha. OKÉ. Hogy volt egy falatot de a lényeg itt hogy az ok volt azok Segédkerekekkel azért van, mert a legalacsonyabb szinten, ott is csak annyi dolog, hogy elromolhat, hogy szerettünk volna a megelőző jellegű kezelni ezek a dolgok minden bizonnyal a legkorábbi héttel az osztály, de most PSET négy és öt PSET és túl fogja látni, hogy ez inkább hozzátok te, hanem te sokkal alkalmasabb megoldásának ilyen jellegű problémák magad. Bármilyen kérdésre getString vagy GetInt? Igen? Közönség: Miért megduplázódik a kapacitás a puffer ahelyett, hogy csak növekvő ez a pontos összeget? DAVID MALAN: Jó kérdés. Miért lenne dupla kapacitás a puffer szemben hogy csak növeli, hogy néhány állandó érték? Ez egy tervezési döntés volt. Mi csak úgy döntött, hogy mert hajlamos egy kicsit drága időt bölcs kérni az operációs rendszer a memória, mi nem akarnak a végén kapok a helyzet a nagy húrok hogy mi volt kérve Az OS újra és újra és újra és újra gyors egymásutánban a memória. Szóval csak úgy döntött, valamivel önkényesen de reméljük ésszerűen, hogy, tudod mit, hadd próbálja túltenni magunkat és csak tartani duplájára úgy, hogy minimalizáljuk a mennyiségű alkalommal meg kell hívni malloc vagy realloc, de összesen ítélet hívja hiányában tudva a felhasználók mit érdemes írja be. Mindkét módon lehetne vitatható. Vitathatatlanul jó. Szóval vessünk egy pillantást egy pár Más mellékhatások memória, dolgok rosszra és eszközök, amelyek segítségével Használja elkapni az ilyen jellegű hibákat. Kiderült, mindannyian, noha check50 nem mondta meg annyira, Készítettem hibás kód, mivel a héten az egyik, még ha minden check50 tesztek telt el, és akkor is, ha te és a TF szuper benne, hogy A kód működik rendeltetésszerűen. A kód már hibás, vagy hibás, hogy mindannyian, használják a CS50 könyvtár, már szivárog a memória. Már azt kérdezi az operációs rendszer a memória a legtöbb programok írtál, de akkor már sosem adta vissza. Már úgynevezett getString és GetInt és GetFloat, de getString, akkor már Soha nem nevezett unGetString vagy adjon Húrt vagy hasonló, de láttunk hogy getString nem foglalható memória útján malloc vagy ennek funkciót realloc, ami csak nagyon hasonló szellemben, és mégis, mi már kérve az operációs rendszer memória és a memória, újra és újra de soha nem adja vissza. Most, mint egy félre, kiderül, hogy amikor egy program leáll, mind a memória automatikusan felszabadul. Szóval ez nem volt egy hatalmas üzlet. Ez nem fog megtörni a IDE vagy lelassítani a dolgokat, de amikor programokat csinálni Általában szivárog a memória és ők fut sokáig. Ha valaha is láttam a kis hülye strandlabda Mac OS vagy a homokóra Windows ahol ez a fajta lassítása vagy a gondolkodás vagy a gondolkodás vagy csak tényleg elindul hogy lassú a csúszás, ez nagy valószínűséggel lehet Az eredmény egy memóriavesztés. A programozó, aki írta A szoftver, amit használ kérje az operációs rendszer memória néhány percenként, óránként. De ha fut a szoftver, akkor is, ha ez minimalizálni a számítógép órákig vagy napokig, lehet, hogy kérdezed egyre több memória és soha nem használja és így a kód lehet, vagy programok lehet, hogy szivárog a memória, és ha szivárogni kezd a memória, ott kevesebb memória más programok, és a hatás az, hogy lassú mindent le. Nos, ez messze az egyik A legkegyetlenebb programok akkor lehetőség futtatni CS50 amennyiben mivel a kimenete még ezoterikus, mint csengés vagy a tenni vagy bármely parancs vonal programok általunk futtatott előtt, de Szerencsére ágyazott kimenete van néhány szuper hasznos tanács, amely hasznos lesz akár PSET négy vagy biztosan PSET öt. Tehát valgrind egy olyan eszköz, hogy lehet használni, hogy nézd A memóriavesztés a programban. Ez viszonylag egyszerű futni. Futtatja valgrind majd, sőt bár ez egy kicsit bőbeszédű, dash dash szivárgás ellenőrzés megegyezik a teljes, majd pont perjel és a program nevét. Tehát valgrind majd futtatni a programot és a legvégén a program futás előtt kilép és ad egy másik gyors, ez lesz elemezni a programot, miközben ez már fut és megmondja, ugye szivárog memóriát és ami még jobb, Megérintette memória nem a tiéd? Ez nem lehet elkapni mindent, de ez Elég jó fogása a legtöbb dolog. Tehát itt egy példa az én üzemelés ez a program, amelynek távon valgrind, A program neve memória, és megyek hogy kiemelje a vonalak, amelyek végül érdekes számunkra. Szóval van még zavaró hogy már törölték a diát. De nézzük meg, mi ez a program képes megmondani nekünk. Ez képes mondja a dolgokat mint érvénytelen írása 4-es méretű. Más szóval, ha megérinti a memória, konkrétan 4 byte memóriát hogy nem kellett volna, valgrind lehet mondani, hogy. Érvénytelen írása 4-es méretű. Ön megérintette négy bájt hogy nem kellett volna. Hol csináltad ezt? Ez a szépség. Memória pont c 21-es vonal az, ahol elrontottam, és ez az, amiért ez hasznos. Hasonlóan GDB, ez segíthet pont akkor a tényleges hiba. Nos, ez az ember egy kicsit többet bőbeszédű, ha nem zavaró. 40 bájt 1 háztömbnyire határozottan elveszett veszteség rekord 1 1. Az mit jelent? Nos, ez csak azt jelenti, amit kértél 40 bájt és soha nem adta vissza. Hívtál malloc vagy hívott GetString és az operációs rendszer kaptál 40 bájt, de soha nem felszabadult, vagy megjelent, hogy az emlékezet, és az igazat megvallva, még sosem mutatják Ön hogyan adja vissza a memória. Kiderült, hogy van egy szuper egyszerű függvény úgynevezett szabad. Egy paramétert, a dolog akarsz felszabadítani, vagy adja vissza, de 40 bájt, úgy tűnik, ebben a programban szűnt meg sorban 20 memória pont c. Nézzük ezt a programot. Ez szuper haszontalan. Ez csak azt mutatja az adott hiba. Szóval vessünk egy pillantást. Itt a fő és legfontosabb, értesítés, hívások függvényét f, majd visszatér. Szóval nem olyan érdekes. Mit f csinálni? Figyeljük meg én nem zavarta a prototípus. Azt akartam, hogy a kódot a lehető legkisebb legyen. Így tettem f feletti fő- és ez rendben van, természetesen, A rövid programok, mint ez. Tehát f nem tér vissza semmit, és nem nem vesz semmit, de ez nem erre a célra. Kijelenti, ugyanúgy, mint A Muci például egy mutatót nevű x, hogy folyik tárolni a címét egy int. Szóval ez a bal oldali. Angol, mi a jobb oldalon csinál? Bárki? Mit csinál ez nekünk? Igen? Közönség: [hallható] szor akkora, mint egy int ami 10-szer, hogy a [nem hallható] DAVID MALAN: Jó és hadd foglaljam össze. Tehát kiosztani elég hely a 10 egészek vagy 10, mi a mérete egy int, ez négy bájt, ezért 10-szer 4 40, így a jobb oldalon, hogy én már kiemelendő, hogy nekem 40 bájt és tárolja a címe az első bájt be x. És most végül, és itt, ahol ez a program hibás, mi baj vonalon 21 alapján, hogy a logika? Mi a baj a 21-es vonal? Igen? Közönség: Nem lehet indexként x [hallhatatlan]. DAVID MALAN: Igen. Nem kellene indexként x ilyesmi. Szóval nyelvtanilag, az rendben van. Mi a szép az, mint ahogy lehet kezelni a tömb neve mintha ez egy mutatót, hasonlóan tud kezelni egy mutatót, mintha ez tömb, és így tudok szintaktikailag mondjuk x konzol valamit, x konzol i, de a 10 problematikus. Miért? Közönség: Mert ez nem befelé. DAVID MALAN: Nem belül, hogy a darab a memóriát. Mi a legnagyobb értéket kellene szándékozik azokban szögletes zárójelben? 9, 0-tól 9. Mivel a nulla indexelés. Tehát 0-tól 9 jó lenne. Konzol 10 nem jó, és de idézni azonban, minden alkalommal Úgy tűnik, hogy megpróbálja CS50 IDE baleset beírja a hamis értékek, ez nem mindig együtt, sőt, gyakran szerencséd lesz, csak azért, mert a operációs rendszer nem észre, hogy alig észrevehetően át néhány darab memória, mert tartózkodott belül technikailag a szegmensben, de erről bővebben egy operációs rendszerek osztály, és így valami ilyesmi nagyon könnyen lehet nem derül fény. Készítsünk programot, sosem fog zuhanni következetesen de talán egyszer egy kicsit. És így próbáljuk valgrind Erre, és itt ahol mi kap elárasztják által a kimeneti pillanatra. Tehát, hogy a memória valgrind szivárgás ellenőrzés egyenlő full dot perjel memória. És itt miért Ígérem ez elborít. Itt van, amit valgrind, itt van, amit egy programozó, néhány évvel ago- döntöttem, hogy lenne egy jó ötlet A kimeneti kinézni. Szóval van értelme ennek. Tehát egészen a bal oldali oldalán ok nélkül folyamat azonosítója a program mi csak futni, az egyedi azonosítót A program már csak futott. Mi hagyni, hogy honnan A dia, de van néhány hasznos információt itt. Nézzük felfelé a csúcsra. Itt, ahol elkezdtük. Tehát ez nem olyan sok kimenet. Itt van, hogy az érvénytelen írási A 4-es méretű on-line 21. Nos, mi volt 21-es vonal? 21. sor pontosan ezt, és van értelme hogy én vagyok az érvényesen írásban 4 byte, mert én vagyok próbál tenni ezt az egész, ami lehet bármi, ez most történik, hogy nulla, de próbálom tedd olyan helyre hogy nem tartozik rám. Sőt, itt lent, 40 bájt egy blokkok biztosan elveszett a rekord 1. Ennek oka, hogy amikor hívom malloc Itt igazából nem szabad a memóriát. Szóval hogyan lehet ezen javítani? Hadd menjen előre, és egy kicsit biztonságosabb és nem 9, és hagyod, ide szabadon x. Ez az új funkció a mai. Ha most ismételni, hogy a memória dot perjel, Fussunk valgrind rá újra, maximalizálására ablakban, és nyomja meg az Entert. Most, hogy ez jó. Temetik el a jó hírt minden ennek az értéknek. Minden halom blokkok szabadok voltak. Majd gyere vissza, amit a kupac van, de nincs szivárgás lehetséges. Szóval ez is csak egy eszköze a szerszámkészlet amellyel elkezdhetjük keresd a hibákat, mint ezt. De lássuk, mi Több lehet baj itt. Nézzük átmenet most valóban egy probléma megoldására. Mint félre, ha ez enyhíti a kicsit zavart, vagy feszültség, ez most vicces. Igen. Ez elég jó. Mivel pointerek címek és általában a konvenció írt hexadecimális. Ha, ha, ez vicces most. Akárhogy is, úgyhogy most ténylegesen megoldani a problémát. Ez már szuper, szuper alacsony szintű eddig, és mi valójában nem hasznos dolgokat ezekkel az alacsony szintű részleteket. Szóval mi vezetett néhány hét ezelőtt fogalma egy tömbben. Egy sor szép volt, mert nehéz, hogy tisztítsák meg a kódot mert ha azt akartuk, hogy levelet Program több diák vagy több név és házak alvás és főiskolák és minden adott, tudnánk tárolni mindent többet tisztán belső tömb. De javaslom, egyetlen hátránya Egy tömb eddig. Akkor is, ha nem ért magad a programban, csak ösztönösen, mi az a rossz dolog Körülbelül egy tömböt, talán? Hallom, néhány zúg. Közönség: Nehéz A méret megváltoztatásához. DAVID MALAN: Nehéz A méret megváltoztatásához. Nem tudod megváltoztatni a méretét egy tömb, sőt, önmagában C. Társíthatja másik tömb, mozgatni mindent a régit az új, és most van egy kis szabad hely, de ez nem olyan, mint egy nyelv, mint a Java vagy Python vagy tetszőleges számú egyéb nyelv, amellyel néhányan ismerős lehet, ahol csak tartani hozzá dolgokat orrvérzésig, hogy a végén egy tömb. Ha van egy sor méret 6, azaz a mérete, és annyira tetszik az ötlet korábban amelynek puffer egy bizonyos méretet, meg kell kitalálni ki a kapun milyen méretű akarsz, hogy legyen? Ha hiszem, túl nagy, te kiesik hely. Ha hiszem, túl kicsi, akkor nem tudja tárolni az adatokat, legalább nélkül, sokkal több munkát. Így ma, hála a mutatók, tudjuk kezdeni összefűzni a saját egyéni adatszerkezetek, és Sőt, itt van valami, hogy néz ki egy kicsit rejtélyes első pillantásra, de ez mit fogunk hívni kapcsolódik listát, és a neve egyfajta összefoglalót azt. Ez egy listát a számok, vagy Ebben az esetben, egy listát a számok, de lehet, hogy egy listát a semmit, de ez kapcsolódik egymáshoz útján nyilak, és csak akkor gondolom milyen technikával fogunk tudni hogy az összefűzés, Valahogy úgy, mint a pattogatott kukorica egy szál, Egy láncolt listák téglalapok itt? A számok? Mi a mögöttes nyelvi elemmel? Közönség: Egy mutató. DAVID MALAN: Egy mutató. Tehát minden ilyen nyilak itt jelent egy mutató, vagy csak egy címet. Más szóval, ha azt akarom, tárolni egy listát a számok, Nem tudom csak tárolni, ha akarom a képesség, hogy növekszik és összezsugorodik én adatstruktúra egy tömbben. Szóval kell egy kis több finomsággal, de észrevettem, hogy ez a Képet fajta sugallja hogy ha épp most van kis téma összekötő mindent együtt, Valószínűleg nem is olyan nehéz, hogy legyen hely A két ilyen téglalap vagy két ilyen csomópontok, kezdjük nevezve őket, tedd egy új csomópontot, majd néhány új téma, csak árok a három csomópont össze, az első, az utolsó, és az egyik, hogy az imént beillesztett középre. És valóban láncolt lista, eltérően egy tömb, dinamikus. Fejlődik, és tőle telhetőt zsugorodik, te pedig nem Tudnunk kell, vagy érdekel, előre, hogy mennyi adatot leszel tárolására, de kiderült, hogy van, hogy egy kicsit óvatos, hogyan valósítható ez. Tehát először nézzük meg, hogyan kívánjuk megvalósítani Egy ilyen kis téglalap. Ez könnyen megvalósítható egy int. Csak azt mondom int n, majd az kapsz 4 bájt int, de hogyan jutok int, nevezzük n, majd egy mutatót, nevezzük következő. Nevezhetnénk ezeket a dolgokat, amit csak akarunk de szükségem van egy egyéni adatok szerkezetét. Igen? Közönség: Ampersand [hallható]. DAVID MALAN: Szóval jelet fogjuk használni, hogy kap a címét egy csomópont potenciálisan. De szükségünk van egy másik jellemzője C érdekében hogy nekem a képesség, hogy Az egyéni téglalap, ezt a szokást változó, ha úgy tetszik, a memóriában. Közönség: A struktúra. DAVID MALAN: A struktúra. Emlékezzünk a múlt héten, mi vezetett struct, ez a viszonylag egyszerű kulcsszó amely lehetővé teszi számunkra, hogy a dolgok, mint ez. C nem jött adat szerkezet az úgynevezett hallgatói. Jön az int és float és char és Ilyen, de ez nem jön hallgató, de mi is létrehozhatunk egy diák adatok típusát, egy diák struktúrát, ezzel a szintaxis itt. És látni fogod ezt újra és újra. Szóval ne aggódj megjegyzi a kulcsszavakat, de a kulcsszót, amely fontos csak az a tény, hogy azt mondtuk struct és akkor mi nevezte hallgatói és belső A tanuló egy név és egy házat vagy egy kollégiumi vagy hasonlók. És így most ma, hadd javasolni ezt. Adtam egy pár szót, de ha azt akarom, végrehajtani ezt a téglalapot, ami Van is egy int és pointer, tudod mit, én vagyok lesz arra, hogy egy struct nevű csomópontot. Én is, belül is, azt fogja mondani hogy egy csomópont, a téglalap, van egy int és mi fogjuk hívni n és van egy következő mutatót. És ez egy kicsit bőbeszédű, de ha belegondolunk, A nyilak, amelyek a képen Egy perce van, hogy milyen adatokat típus? Amennyiben minden egyes ilyen nyilak mutat hogy milyen típusú adatot szerkezete? Ez nem mutat, csak egy int önmagában. Ez rámutatva, hogy a egész téglalap alakú dolog és hogy téglalap alakú dolog, azt mondta, az úgynevezett csomópontot. És így ilyen van, hogy rekurzív határozza meg ezt, mint hogy egy csomópont, azt mondjuk, tartalmazni fog egy int hívott n és egy mutató az úgynevezett jövő és a típusú adatstruktúra, amelyre hogy mutató láthatóan lesz struct csomópont. Tehát ez idegesítően bőbeszédű és igaz, hogy pedáns, Az ok, hogy miért nem Csak mondom ezt, ami őszintén szólva úgy néz ki, sokkal olvashatóbb, azért van, mert emlékeztetnek arra, hogy C Read dolgok fentről lefelé, balról jobbra. Ez nem csak megkapjuk a pontosvessző hogy a kulcsszó csomópont valóban létezik. Tehát, ha azt akarjuk, hogy ez a fajta ciklikus hivatkozási belsejében az adatok szerkezete, meg kell tennünk ezt, ahol mondjuk struct csomópont tetején, amely ad nekünk egy hosszabb módon írja le ezt a dolog, akkor belülről azt mondjuk struct csomópont, majd a legutolsó sort azt mondjuk, rendben, C, mellesleg, csak hívja ezt az egész átkozott dolog, amit egy csomópont, és megáll a kulcsszó struct összesen. Szóval ez csak egyfajta szintaktikai trükk, hogy végső soron lehetővé teszi számunkra, hozzon létre valamit, ami úgy néz ki, mint ez. Tehát, ha azt feltételezzük, most már tudjuk végrehajtja ezt a dolgot C, hogyan is ténylegesen kezdeni áthaladó ez? Nos, sőt, minden, amit meg kell tennie, hogy ismételget balról jobbra, és csak fajta helyezze csomópontok vagy törölni csomópontokat vagy keressen a dolgokat, ahol azt akarjuk, de ehhez, menjünk előre, és a a dolgok egy kicsit valóságosabb, mert ez már szuper alacsony szintű eddig. Bárki szó szeretnék lenni az első? OKÉ. Gyere fel. Mi a neved? David: David. DAVID MALAN: David. Örvendek. Nekem is. Minden rendben. És szükségünk van egy 9-es szám. Nem olyan jó, mint az első, talán. OK, 9-es szám. A 17-es szám, kérem. Térjünk vissza egy kicsit távolabb. 22-es számú, kérjük, és Mit szólnál hátrébb ha látom semmilyen kezek az összes fény, vagy nincs. Valaki éppen önként ott. Szeretné, hogy jöjjön fel? Az alkar erőszakkal megy fel. OK, 17. 22. 26 jön le. Bárki mást szeretne forcefully-- Gyere fel. Tényleges önkéntes. Szóval nagyon gyorsan, ha ti is rendezni magatokat akárcsak a csomópontok a képernyőn. Köszönöm. És akkor lesz 26. Rendben, gyors bemutatkozás. Szóval én Dávid és te is? David: David. DAVID MALAN: És te? Jake: Jake. Sue: Sue. ALEX: Alex. Raphael: Raphael. Taylor: Taylor. DAVID MALAN: Taylor. Kitűnő. Tehát ezek a mi önkéntesek ma és megy előre és shift egy kicsit, hogy így, és csak megy előre, és tartsa tartja a számokat, mint te vagy a első jele, és bal kézzel, megy előre, és csak végrehajtja Ezek a nyilak, csak úgy, hogy a bal kéz szó mutatva, amit meg kell mutatni a, és adj magadnak egy kis szobába úgy, hogy akkor vizuálisan látni a karod ténylegesen mutatva, és akkor csak pont fajta a földre rendben van. Tehát itt van egy csatolt lista egy, két, három, négy, öt csomópontok kezdetben, és vegyük észre itt van ez a különleges mutatót az elején, aki kulcsot, mert van, hogy nyomon követhesse A teljes hosszúságú lista valahogy. Ezek a srácok, bár ők maradt jobbra, háttal a memóriában, ezek valójában bárhol lehet a számítógép memóriájában. Szóval ezek a srácok lehet állva bárhol a színpadon és ez jó, amíg ők valóban mutatott egy másik, de a dolgokat tiszta és egyszerű, akkor Csak felhívni őket balról jobbra, mint ez, de ott lehet masszív rések között azokat a csomópontokat. Most, ha azt akarom, hogy valóban szúrhatunk új érték, menjünk előre, és erre. Van egy lehetőség most hogy válasszon egy másik csomópont. Mondja el, kezdjük el a mallocing 55. Vajon valaki bánja, hogy malloc? OK, gyere fel. Mi a neved? Szivárvány: Rainbow. DAVID MALAN: Rainbow? Minden rendben. Malloc Rainbow. Gyere fel. Tehát most már tennünk magunknak Algoritmikusan ahol tudunk rakni 55. Szóval mindannyian tudjuk, nyilván, ahol valószínűleg tartozik, ha megpróbálunk tartani ezt a rendezve és ha a srácok is eltarthat egy lépjen vissza, így nem esik le a színpadon, az nagyszerű lenne. Tehát tulajdonképpen, Rainbow, kezdje újra itt vagy velem, mert mi, mint a számítógép most is csak az egyik változót egy időben. Tehát, ha ez az első csomópont. Figyeljük meg, ő nem egy csomópont, ő csak egy mutató, és ezért ő húzott lenni csak akkora, mint egy mutatót, és nem az egyik ilyen teljes téglalapok. Mi is így fogjuk ellenőrizni az egyes iteráció 55 kevesebb, mint 9? Nem. 55 kevesebb, mint 17? Nem. Kevesebb, mint 22? Kevesebb, mint 26? Kevesebb, mint 34? És így most, nyilván Szivárványos tartozik a végén. Tehát, hogy világos legyen, és milyen volt a neve, Taylor? Taylor: Taylor. DAVID MALAN: Szóval körében Taylor bal és a Rainbow keze van, akinek a keze meg kell mutatni, hogy mi a beillesztése érdekében 55 ebbe a listán? Mit kell tennünk? Igen? Közönség: Taylor kezét kell mutatnia balra. DAVID MALAN: Pontosan. Tehát behelyezése csomópont a végén a lista nagyon egyszerű, mert Taylor csak meg kell mutatni, ahelyett, hogy a földre vagy hívjuk meg null, null egyfajta hiánya pointer vagy egy speciális nulla mutatót, te fog mutatni a bal kezét a Rainbow majd Rainbow, Hol kell a bal kéz talán pont? Lefelé. Ez nem jó, ha a kezét a rendezés rámutatva le itt, vagy valami olyan milyen módon. Hogy úgy kellene tekinteni egy szemetes értéke, de ha ő mutat Néhány ismert érték, akkor hívják nulla vagy nulla, ez rendben van mert van egy kifejezés ebben az és tudjuk, hogy a lista most elkészült. Tehát mi a másik viszonylag egyszerű eset? Tudnánk malloc 5? Gyere fel. Mi a neved? Tiffany: Tiffany. DAVID MALAN: Sajnálom? Tiffany: Tiffany. DAVID MALAN: Tiffany. Minden rendben. Tiffany már malloced melynek értéke 5. Gyere fel. Ez egy viszonylag könnyű is, de nézzük műveletek sorrendjét most. Ez elég könnyű volt Taylor a végén. 5. számú természetesen kevesebb, mint 9, és így már David, van Tiffany, és mi volt a neve? Jake: Jake. DAVID MALAN: Jake. Tiffany, Jake, és David. Kinek a kezét frissíteni kell az első? Mit akar itt csinálni? Van egy pár lehetséges módon, de van még egy vagy több rossz módon. Közönség: Kezdje balszélső. DAVID MALAN: Kezdjük a bal szélső. Ki a bal szélső itt akkor? Közönség: First. DAVID MALAN: OK. Így kezdődik az első és hol frissíteni kívánt Dávid kezében lenni? KÖZÖNSÉG felé: az 5. DAVID MALAN: OK. Dávid pedig pont ötkor vagy Tiffany itt, és most? Közönség: Tiffany rámutat, hogy a 9? DAVID MALAN: Tökéletes, kivéve Muci a fej csak a fajta leesett, ugye? Mert mi a baj ez a kép szó? Közönség: Semmi sem mutat. DAVID MALAN: Semmi sem rámutatva, hogy Jake most. Már szó árván 9 és 17. között, és most szó szerint kiszivárgott mindezt memóriát, mert frissítése Dávid kezében először, hogy ez finom, amennyiben ez helyes mutatva Tiffany most, de ha senki nem volt előrelátás rámutatni Jake, akkor elvesztettük a teljes egészében ezt a listát. Úgyhogy visszavonni. Szóval ez egy jó dolog, hogy megbotlani de nézzük most már megfelelő. Mit tegyünk először helyette? Igen? Közönség: Tiffany kell mutatnia a 9? DAVID MALAN: Nem tudok kap, hogy közel áll hozzád. Ki kell emelnem a 9? Közönség: Tiffany. DAVID MALAN: Rendben. Tehát Tiffany először pontot a 9. Szóval Tiffany kell venni egy azonos értéket David, amely úgy tűnik, redundáns egy pillanatra, de ez rendben van, mert most, a második lépésben tudjuk frissíteni Dávid kezében rámutatni Tiffany, majd ha mi csak egyfajta tiszta dolgokat mintha ez a fajta tavasz-szerű, Most, hogy egy helyes szerelést. Így kiváló. Tehát most már majdnem ott vagyunk. Nézzük helyezzen be egy végleges értéket, mint az érték 20. Ha tudnánk malloc egy végső önkéntes? Gyere fel. Tehát ez az ember egy kicsit trükkösebb. De tényleg, a kód vagyunk írás, bár verbálisan, olyan, mint átélni egy rakás Az, ha olyan feltételeket teremteni, ugye? Volt olyan állapot ellenőrizve, hogy tartozik a végén, talán az elején. Szükségünk van valamilyen hurok megtalálni a folt közepén. Tehát lássuk, hogy a mi a neved? ERIC: Eric. DAVID MALAN: Eric? Eric. Örvendek. Tehát van 20. Kevesebb, mint öt? Nem. Kevesebb mint kilenc? Nem. Kevesebb, mint 17? Nem. OKÉ. Ő ide tartozik, és a neveket ismét van? Sue: Sue. DAVID MALAN: Sue. ALEX: Alex. DAVID MALAN: Sue, Alex, és? ERIC: Eric. DAVID MALAN: Eric. Kinek a kezében van szüksége, hogy folyamatosan az első? Közönség: Eric. OKÉ. Szóval Eric kell mutatni hol? A 22. Jó. És most mi következik? Sue majd pont Eric és most, ha srácok csak hogy néhány szoba, ami rendben van vizuálisan, most tettünk a szerelést. Úgyhogy most egy kérdés vizsgálatára, de Köszönöm szépen, hogy önkénteseink. Nagyon jól sikerült. Tudod tartani azokat, ha úgy tetszik. És van egy szép búcsú ajándék, ha azt minden tetszik, hogy a stressz labdát. Hadd át ezt le. Tehát mi a elvihető e? Úgy tűnik, ez a csodálatos amennyiben mi most bevezetett alternatívájaként tömb, ami nem annyira korlátozódik hogy egy sor néhány fix méretű. Ezek dinamikusan növekszik. De hasonlóan láttunk hétig Korábban soha nem kap semmit ingyen, mint biztosan van egy trade-off itt. Tehát egy fejjel egy csatolt listán, ez a dinamika? Ez növekedni tudjon, és őszintén szólva, tudtunk volna törlés és mi csökkenhet, ha szükséges. Milyen árat fizetünk? Kétszer annyi helyet, először. Ha megnézzük a képet, már nem vagyok tárolására listáját egészek. Én tárolására listáját egészek plusz mutatók. Úgyhogy megduplázva a helyet. Most, talán ez nem is olyan egy nagy dolog 4 bájt, 8 bájt, de minden bizonnyal hozzá fel nagy adathalmazok. Mi egy másik hátránya? Igen? Közönség: Meg kell keresztezik őket egy-az-egyben. DAVID MALAN: Igen. Van bejárására őket egy-az-egyben. Tudod mit, feladtuk a szuper kényelmes funkció a szögletes zárójel jelölést, pontosabban néven véletlenszerű hozzáférés, ahol tudunk csak ugrani egy egyedi elem de most, ha még mindig volt én önkéntesek itt, ha akartam, hogy megtalálják a száma 22, nem tudok most ugrás konzol valami ilyesmi. Van, hogy nézd át a listán, sok mint a mi keresés példák lineárisan, hogy megtalálják a szám 22. Tehát úgy tűnik, hogy nagy árat fizetett ott. De mindazonáltal egyéb problémák megoldásához. Sőt, hadd mutassam be Csak pár látvány. Tehát, ha már le Mather étkezőjében közelmúltban, emlékezzünk csak vissza, hogy a A felhalmozott dobozokat, mint ez, kaptuk kölcsön ezeket re Annenberg osztály előtt. Tehát ez a halom tálcák, bár, reprezentatív ténylegesen A számítástechnika adatok szerkezetét. Van egy adatstruktúra számítástechnika néven egy köteg, amely nagyon szépen alkalmas arra, hogy pontosan ez a vizuális. Tehát, ha minden egyes ilyen tálcák nem egy tálca de mint egy számot, és azt akartam, tárolni számokat, azt sodorhatják egy itt, és tudtam tenni egy másik idelent, és továbbra is egymásra számok a tetején egy másik, és mi potenciálisan hasznos erről az, hogy mi a következménye Ezen adatok szerkezet? Melyik szám lehet kihúzni első legkényelmesebben? A legutóbb az egyik fel ott. Szóval ez az, amit neveznék a számítástechnika LIFO adatszerkezet. Tart, first out. És majd meglátjuk nemsokára miért hogy hasznosak lehetnek, de most, csak úgy a tulajdon. És ez elég hülyén, ha úgy gondolja, arról, hogy a ebédlőben csinálja. Minden alkalommal, amikor tiszta tálcák és tedd a legfrissebb felülre, akkor lehetett volna egy korábban tiszta de végül nagyon piszkos, poros tálca legalján ha soha nem kap az aljára, hogy verem, mert csak folyamatosan üzembe az új és a tiszta is a tetején. Ugyanez megtörténhet egy szupermarketben is. Ha van egy vitrinben A tej és minden alkalommal CVS vagy aki többet kap tejet, csak dugjon a tejek már van hátra, és teszel az újak elöl, fogsz néhány elég csúnya tej végén az adatstruktúra, mert mindig alul, vagy egyenértékűen ez mindig hátul. De van egy másik módja annak, hogy gondoljon sorakozó adatok és például ez. Ha egy olyan ember, aki szereti sorakoznak kívül az Apple boltokban ha egy új termék jön ki, akkor valószínűleg Nem használ verem adatok szerkezete, mert azt elidegeníteni mindenki más, aki sorakozó vásárolni néhány új játékot. Inkább akkor valószínűleg a milyen adatstruktúra vagy milyen rendszer a való világban? Remélhetőleg ez egy sort, vagy több megfelelően, vagy több brit-szerű, egy sorban. És kiderül, egy sorban is adatszerkezethez számítástechnika, de egy sorban van egy nagyon másik tulajdonságot. Ez nem LIFO. Tart, first out. Isten ments. Ez helyett FIFO. Először, first out. És ez egy jó dolog A méltányosság kedvéért természetesen, ha éppen bélés up szuper kora reggel. Ha odaér az első, akkor akarjuk, hogy ki az első is. És ezért az összes ilyen adatok struktúrák, a sorban állást és halmok és fürtök mások, kiderül, akkor lehet gondolni ezt csak egy tömbben. Ez egy tömb, talán fix 4-es méretű, de ez lenne legyen kedves a jó, ha tudnánk csak gyarapodnak tálcák szinte végtelenül magas, ha Van, hogy sok tálca vagy számokat. Így talán akarunk készítesz egy listát itt, de a trade-off lesz potenciálisan, hogy szükségünk van több memória, Beletelik egy kis időt, de nem korlátozzák a magassága a verem, hasonlóan Mather vitrinben korlátozhatja a méret a verem, és így ezek tervezési döntések vagy rendelkezésre álló lehetőségek számunkra végül. Tehát ezek az adatok struktúrák, kezdtük vannak új felső korlátot potenciálisan milyen volt korábban szupergyors és hol fogjuk hagyni off ma, és hol akkor remélem, hogy a szerdán, akkor elkezdi nézni egy adat struktúra, amely lehetővé teszi számunkra keresni keresztül adatokat napló végén újra. És láttuk, hogy emlékszem, a héten nulla és egy bináris keresés, osztás és meghódítani. Ez jön vissza, és még jobb, A szent grál erre szerda az lesz, hogy dolgozzon ki a adatszerkezet fut igazán vagy elméletileg állandó, s eközben nem számít, hány millió vagy milliárd dolgok van az adatstruktúra, akkor hogy minket állandóan időt, talán egy lépéssel vagy két lépésben, vagy 10 lépésben, de állandó számokat lépések keresgélni, hogy az adatok szerkezetét. Hogy valóban lesz a szent grál de erről bővebben szerdán. Viszlát akkor. [Zenelejátszási]