1 00:00:00,000 --> 00:00:10,970 >> [Musiikki soi] 2 00:00:10,970 --> 00:00:12,536 >> DAVID J. MALAN: Okei. 3 00:00:12,536 --> 00:00:13,392 >> [Naurua] 4 00:00:13,392 --> 00:00:14,240 >> Tervetuloa takaisin. 5 00:00:14,240 --> 00:00:14,990 Tämä on CS50. 6 00:00:14,990 --> 00:00:16,890 Ja tämä viikon lopussa viisi. 7 00:00:16,890 --> 00:00:20,020 Ja tähän asti olemme aika paljon on itsestään selvänä, että 8 00:00:20,020 --> 00:00:23,480 olemassa tätä kääntäjä, kalahtaa, että olet on vedonnut käsiteltävänä olevalla 9 00:00:23,480 --> 00:00:27,100 muuta työkalua nimeltään Make, että jotenkin maagisesti muuntaa lähdekoodin 10 00:00:27,100 --> 00:00:31,350 osaksi kohdekoodi, nollia ja ykkösiä siitä, että tietokoneet CPU, central 11 00:00:31,350 --> 00:00:33,410 käsittely-yksikkö, itse asiassa ymmärtää. 12 00:00:33,410 --> 00:00:36,770 Mutta näyttää siltä, ​​siellä on numero, joka on takana tapahtuu huppu 13 00:00:36,770 --> 00:00:38,690 tulon ja lähdön välillä. 14 00:00:38,690 --> 00:00:41,800 >> Ja haluaisin ehdottaa, että liha että vuonna hieman tarkemmin osaksi 15 00:00:41,800 --> 00:00:45,130 nämä neljä vaihetta, on jotain kutsutaan esikäsittelyä, jotain 16 00:00:45,130 --> 00:00:48,300 nimeltään compiling, mitä olemme nähneet, jotain kutsutaan kokoonpano, ja 17 00:00:48,300 --> 00:00:49,420 jotain kutsutaan yhdistää. 18 00:00:49,420 --> 00:00:53,270 Joten asti, eräillä ohjelmia, meillä on ollut terävä sisältää. 19 00:00:53,270 --> 00:00:56,650 Viime aikoina meillä on ollut joitakin teräviä määrittelee vakioita. 20 00:00:56,650 --> 00:01:00,660 Joten käy ilmi, että ne asiat, jotka edessä on hash symboli tai 21 00:01:00,660 --> 00:01:04,150 ruutumerkki ovat esikäsittelijänä direktiivejä. 22 00:01:04,150 --> 00:01:07,960 Se on vain hieno tapa sanoa se koodiriviä, joka on todella 23 00:01:07,960 --> 00:01:12,280 muunnetaan jotain muuta ennen tietokone edes yrittää muuntaa 24 00:01:12,280 --> 00:01:13,800 ohjelma nollia ja ykkösiä. 25 00:01:13,800 --> 00:01:19,000 >> Esimerkiksi terävä sisältää standardin I / O. H, aika paljon vain tarkoittaa mennä 26 00:01:19,000 --> 00:01:24,010 eteenpäin, nappaa tiedostojen sisällöstä stdio.h ja liittää ne oikeassa. 27 00:01:24,010 --> 00:01:25,880 Joten ei nollia ja ykkösiä tässä vaiheessa vielä. 28 00:01:25,880 --> 00:01:27,470 Se on oikeastaan ​​vain vaihdon. 29 00:01:27,470 --> 00:01:30,790 Ja se on tehty aikana ns esikäsittely vaiheessa, kun 30 00:01:30,790 --> 00:01:34,230 todella ajaa kalahtaa tai erikseen Tee useimmissa tapauksissa. 31 00:01:34,230 --> 00:01:36,950 Kaikki tämä on tapahtunut Ensimmäinen automaattisesti toistaiseksi. 32 00:01:36,950 --> 00:01:38,800 >> Sitten tulee Kokoamisvaihe. 33 00:01:38,800 --> 00:01:40,920 Mutta olemme yksinkertaistettu kokoelma. 34 00:01:40,920 --> 00:01:45,060 Kääntäminen ohjelma todella tarkoittaa ota se jotain C, 35 00:01:45,060 --> 00:01:48,430 lähdekoodi olemme kirjallisesti, alas jotain kutsutaan kokoonpanoon. 36 00:01:48,430 --> 00:01:52,900 Assembly kieli on alemmalla tasolla kieli, joka onneksi emme 37 00:01:52,900 --> 00:01:55,480 ovat paljon tilaisuus kirjoittaa tällä lukukaudella. 38 00:01:55,480 --> 00:01:59,100 Mutta se on alimmalla tasolla mielessä, että voit kirjaimellisesti alkaa kirjoittaa 39 00:01:59,100 --> 00:02:04,270 lisätä ja vähentää ja lisääntykää ja lataa muistista ja tallentaa muistiin, 40 00:02:04,270 --> 00:02:08,259 hyvin yksinkertainen ohjeita tietokoneen, alla huppu, 41 00:02:08,259 --> 00:02:09,639 todella ymmärtää. 42 00:02:09,639 --> 00:02:14,930 >> Lopuksi, kokoaminen vie että kieli on nollia ja ykkösiä, että olemme olleet 43 00:02:14,930 --> 00:02:16,190 kuvaavat näin pitkälle. 44 00:02:16,190 --> 00:02:19,270 Ja todella lopuksi, siellä on niin sanottu yhdistää vaihe, jossa jaamme 45 00:02:19,270 --> 00:02:22,360 katso vain hetken, jossa yhdistyvät oman nollia ja ykkösiä nollilla ja 46 00:02:22,360 --> 00:02:24,870 niitä muita ihmisiä ennen olet luonut. 47 00:02:24,870 --> 00:02:26,660 >> Joten pitää tätä erittäin yksinkertainen ohjelma. 48 00:02:26,660 --> 00:02:27,560 Se oli viikko 1. 49 00:02:27,560 --> 00:02:29,610 Se vain sanoi, Hello World, ruudulla. 50 00:02:29,610 --> 00:02:30,920 Ajoimme tätä kautta kalahtaa. 51 00:02:30,920 --> 00:02:33,200 Tai me juoksimme sen läpi Make joka juoksi kalahtaa. 52 00:02:33,200 --> 00:02:36,170 Ja tulostetaan aikaan, jossa joitakin nollia ja ykkösiä. 53 00:02:36,170 --> 00:02:38,100 Mutta näyttää siltä, ​​siellä on välivaihe. 54 00:02:38,100 --> 00:02:40,460 Jos menen tänne - oho, ei haluavat nähdä hänet vielä. 55 00:02:40,460 --> 00:02:44,800 Jos menen tänne minun laite ja minä avata hello.c täällä 56 00:02:44,800 --> 00:02:46,160 on, että sama ohjelma. 57 00:02:46,160 --> 00:02:48,600 Ja mitä aion tehdä minun terminaalin ikkuna täällä aion 58 00:02:48,600 --> 00:02:51,430 ajaa kalahtaa sijaan Make, joka automatisoi kaikki neljä 59 00:02:51,430 --> 00:02:52,870 nämä toimenpiteet meille. 60 00:02:52,870 --> 00:02:58,620 Ja aion tehdä kalahtaa-S ja sitten hello.c ja kirjoita. 61 00:02:58,620 --> 00:03:00,590 >> Ja saan vilkkuu nopeasti jälleen, mikä on hyvä. 62 00:03:00,590 --> 00:03:05,280 Ja nyt hieman isompi ikkuna, Aion avata gedit täällä. 63 00:03:05,280 --> 00:03:09,610 Ja aion avata tiedosto, kääntyy pois, kutsutaan hello.s tämän 64 00:03:09,610 --> 00:03:11,870 sisältää että konekielellä Aiemmin viittasin. 65 00:03:11,870 --> 00:03:15,060 Ja tämä on mitä kutsutaan kokoonpano kieli, melko alhainen 66 00:03:15,060 --> 00:03:18,470 ohjeet, että Intel CPU tai mikä se on, että on sisällä 67 00:03:18,470 --> 00:03:19,350 ymmärtää. 68 00:03:19,350 --> 00:03:24,480 Ja mov on liikkeellä. puhelu on soittamalla, erittäin alhainen toiminto. 69 00:03:24,480 --> 00:03:26,380 sub on vähennä. 70 00:03:26,380 --> 00:03:30,370 >> Joten kun sinulla on tietty CPU sisällä tietokoneen, mikä tekee siitä 71 00:03:30,370 --> 00:03:34,300 erillisiä, verrattuna muihin suorittimia markkinoilla, on mitä ohjeita se 72 00:03:34,300 --> 00:03:39,460 ymmärtää ja usein kuinka tehokas se on, kuinka nopeasti se on suorittamalla joitakin 73 00:03:39,460 --> 00:03:40,380 näitä ohjeita. 74 00:03:40,380 --> 00:03:45,150 Nyt lisää tästä, voit ottaa Ensi syksynä CS61 Collegessa. 75 00:03:45,150 --> 00:03:48,170 Mutta tässä meillä on esimerkiksi muutama tunnisteet, jotka saattavat näyttää tutulta. 76 00:03:48,170 --> 00:03:50,150 hello.c on ohjelman nimi. 77 00:03:50,150 --> 00:03:51,070 >> . Teksti - 78 00:03:51,070 --> 00:03:54,190 siellä ei ole paljon mielenkiinnosta juuri nyt muistaa, että teksti 79 00:03:54,190 --> 00:03:59,190 segmentti, sillä maanantaina on missä muistia ohjelma todella päätyy. 80 00:03:59,190 --> 00:04:01,330 Niin, että ainakin hämärästi tuttuja siellä. 81 00:04:01,330 --> 00:04:03,730 Tässä on tietenkin mainita meidän päätehtävä. 82 00:04:03,730 --> 00:04:07,220 Vierittämällä, nämä viittaavat asiat sanottu rekisterit, hyvin pieni paloina 83 00:04:07,220 --> 00:04:09,190 muistin sisällä todellinen CPU. 84 00:04:09,190 --> 00:04:12,930 Ja jos minä selaa jopa edelleen, näen jonkinlaista 85 00:04:12,930 --> 00:04:14,240 epäsuora maininta ASCII. 86 00:04:14,240 --> 00:04:17,120 Ja siellä todellakin on, että merkkijono, Hei, pilkku, maailma. 87 00:04:17,120 --> 00:04:20,079 >> Niin pitkän tarinan lyhyesti, tämä on ollut tapahtuu sinulle, automaattisesti, 88 00:04:20,079 --> 00:04:22,140 alla huppu koko tämän ajan. 89 00:04:22,140 --> 00:04:26,450 Ja mitä on tapahtunut todella kerran olet joutunut kalahtaa, tai tapa 90 00:04:26,450 --> 00:04:29,150 Varmista, saat ensin alkaen lähdekoodia, 91 00:04:29,150 --> 00:04:30,700 ns konekielellä. 92 00:04:30,700 --> 00:04:35,210 Sitten kalahtaa on muuntaa tämä kokoonpano kielen alas nollia ja ykkösiä. 93 00:04:35,210 --> 00:04:38,340 Ja tämä on dian aloitimme keskustelumme viikolla 0. - 94 00:04:38,340 --> 00:04:39,840 ja sitten Viikko 1. 95 00:04:39,840 --> 00:04:44,030 Ja lopuksi, niitä nollia ja ykkösiä yhdistetään nollia ja ykkösiä 96 00:04:44,030 --> 00:04:47,190 Näistä kirjastoista olemme ottaneet itsestäänselvyytenä kuten Standard I / O tai 97 00:04:47,190 --> 00:04:50,010 String Library tai jopa CS50 kirjasto. 98 00:04:50,010 --> 00:04:54,200 >> Joten maalata tätä kuvaa lisää visuaalisesti, meillä on hello.c. 99 00:04:54,200 --> 00:04:57,220 Ja se tietenkin käyttää printf toimivat sanoa, hello world. 100 00:04:57,220 --> 00:05:01,810 Kokoamisvaihe vie alas että tiedosto me vain näki hello.s, vaikka 101 00:05:01,810 --> 00:05:04,290 vaikka se on yleensä poistettu automaattisesti. 102 00:05:04,290 --> 00:05:06,050 Mutta se assembly keskellä vaiheessa. 103 00:05:06,050 --> 00:05:09,750 Ja sitten kun me koota kokoonpano kieli, niin sanotusti, silloin olet 104 00:05:09,750 --> 00:05:10,830 saada nämä nollia ja ykkösiä. 105 00:05:10,830 --> 00:05:13,920 Joten olemme zoomataan tehokkaasti tänään mitä olemme itsestään selvänä, 106 00:05:13,920 --> 00:05:16,430 menemistä lähdekoodia vastustaa koodi. 107 00:05:16,430 --> 00:05:18,850 >> Mutta lopuksi, nyt sama kuva - nyt pistää sen yli 108 00:05:18,850 --> 00:05:20,020 vasemmalla puolella. 109 00:05:20,020 --> 00:05:22,880 Ja huomata, että alkuun on Mainitsin stdio.h. 110 00:05:22,880 --> 00:05:25,030 Se kuvaa, että olemme mukana lähes kaikissa 111 00:05:25,030 --> 00:05:26,250 ohjelmia olemme kirjoitettu. 112 00:05:26,250 --> 00:05:28,830 Ja se, jonka sisällön saada kopio liitetään, 113 00:05:28,830 --> 00:05:30,350 tehokkaasti huipulla koodi. 114 00:05:30,350 --> 00:05:34,170 Mutta näyttää siltä, ​​että tietokoneen järjestelmän jonnekin, siellä on oletettavasti 115 00:05:34,170 --> 00:05:39,150 stdio.c tiedosto, että joku kirjoitti vuotta sitten joka toteuttaa kaikki 116 00:05:39,150 --> 00:05:41,870 toimintoja, jotka on ilmoitettu vuonna stdio.h. 117 00:05:41,870 --> 00:05:45,465 >> Nyt todellisuudessa se luultavasti ole Mac-tai PC-tai jopa 118 00:05:45,465 --> 00:05:47,660 CS50 laite on raaka-C-koodia. 119 00:05:47,660 --> 00:05:52,710 Joku on jo kerätty sen ja mukana . O tiedosto kohdekoodina tai. 120 00:05:52,710 --> 00:05:56,020 tiedosto, joka viittaa jaettu kirjasto joka on ollut esiasennettuna ja 121 00:05:56,020 --> 00:05:57,240 valmiiksi koottu sinulle. 122 00:05:57,240 --> 00:06:01,950 Mutta oletetaan, että on todellakin olemassa meidän tietokone stdio.c rinnakkain 123 00:06:01,950 --> 00:06:02,650 kanssa kalahtaa. 124 00:06:02,650 --> 00:06:04,960 Koodi on laaditaan parhaillaan ja koottu. 125 00:06:04,960 --> 00:06:09,200 stdio.c n koodi on käännetty ja koottu, jotta tämä viimeinen 126 00:06:09,200 --> 00:06:13,730 vaiheeseen, tänne, meidän on jotenkin linkki, niin sanotusti oman nollia ja ykkösiä 127 00:06:13,730 --> 00:06:18,430 hänen tai hänen nollia ja ykkösiä yhdeksi yksinkertainen ohjelma, joka lopulta on 128 00:06:18,430 --> 00:06:20,540 kutsutaan vain Hei. 129 00:06:20,540 --> 00:06:23,340 >> Niin, että kaikki taika, joka on on tapahtunut tähän mennessä. 130 00:06:23,340 --> 00:06:26,430 Ja edelleen ottaa nämä prosessit itsestäänselvyytenä, mutta ymmärtää 131 00:06:26,430 --> 00:06:28,750 siellä on paljon mehukkaita yksityiskohtia takana tapahtuu siellä. 132 00:06:28,750 --> 00:06:31,920 Ja tämä on mitä tekee tietokone, jossa on Intel sisällä 133 00:06:31,920 --> 00:06:33,940 Erityisen selvä. 134 00:06:33,940 --> 00:06:37,020 >> Joten että huomata, jos haluat liittyä meihin lounasaikaan perjantaina, et mene 135 00:06:37,020 --> 00:06:41,570 tavallista paikka cs50.net/rsvp, 13:15 perjantaina. 136 00:06:41,570 --> 00:06:43,400 Ja nyt muutaman ilmoituksia. 137 00:06:43,400 --> 00:06:44,670 Joten meillä on hyviä uutisia. 138 00:06:44,670 --> 00:06:45,970 Ja meillä on huonoja uutisia. 139 00:06:45,970 --> 00:06:47,260 Aloita hyviä uutisia täällä. 140 00:06:47,260 --> 00:06:52,038 141 00:06:52,038 --> 00:06:54,510 >> [Huokauksen] 142 00:06:54,510 --> 00:06:54,710 >> Selvä. 143 00:06:54,710 --> 00:06:56,670 No, se on teknisesti loma, niin se ei ole niin paljon lahja meiltä. 144 00:06:56,670 --> 00:06:58,030 Mutta sitten huonot uutiset tietenkin. 145 00:06:58,030 --> 00:07:00,550 146 00:07:00,550 --> 00:07:01,880 >> [Huokauksen] 147 00:07:01,880 --> 00:07:03,530 >> Vietin paljon aikaa Näiden animaatioita. 148 00:07:03,530 --> 00:07:04,690 >> [Naurua] 149 00:07:04,690 --> 00:07:07,000 >> Tulee tarkistaa istuntoon tulevana maanantaina. 150 00:07:07,000 --> 00:07:08,340 Se tulee olemaan 17:30. 151 00:07:08,340 --> 00:07:11,210 Me muistuttaa sinua kaikki nämä tiedot toteutettiin sähköpostitse kurssin 152 00:07:11,210 --> 00:07:13,470 verkkosivuilla vain pari päivää aikaa. 153 00:07:13,470 --> 00:07:16,610 Se kuvattiin ja saatavilla pian sen jälkeen. 154 00:07:16,610 --> 00:07:19,200 Joten jos et voi tehdä, että maanantai yö paikka, älä huoli. 155 00:07:19,200 --> 00:07:22,270 Kohdat tulevalla viikolla myös keskittyä arvostelu tietokilpailu. 156 00:07:22,270 --> 00:07:25,670 Jos jakso on maanantaina, joka on todellakin yliopisto loma, me 157 00:07:25,670 --> 00:07:26,920 kohtaavat edelleen jaksossa. 158 00:07:26,920 --> 00:07:28,890 Jos et yksinkertaisesti voi tehdä, että osaa, koska olet menossa 159 00:07:28,890 --> 00:07:29,860 pois, se on hieno. 160 00:07:29,860 --> 00:07:33,710 Osallistu sunnuntaina tai tiistaina osan tai tune-in Jasonin osa, joka on 161 00:07:33,710 --> 00:07:35,110 saatavilla verkossa. 162 00:07:35,110 --> 00:07:37,490 >> Joten, lisää huonoja uutisia. 163 00:07:37,490 --> 00:07:41,960 Joten mukaan oppimäärän, meillä on luento ensi perjantaina. 164 00:07:41,960 --> 00:07:43,690 Mutta hyvä uutinen - 165 00:07:43,690 --> 00:07:44,860 selvästi, vietin liikaa aikaa tähän. 166 00:07:44,860 --> 00:07:45,280 >> [Naurua] 167 00:07:45,280 --> 00:07:47,140 >> Me peruuttaa ensi perjantain luentoja. 168 00:07:47,140 --> 00:07:50,590 Niin, että on lahja meille, joten voi todella olla mukava hengähdystauko 169 00:07:50,590 --> 00:07:52,990 välillä tällä viikolla ja kaksi viikkoa siten. 170 00:07:52,990 --> 00:07:57,460 Joten ei luentoja ensi viikolla, vain pieni pieni tietokilpailu, jonka pitäisi olla 171 00:07:57,460 --> 00:07:59,030 saada yhä innoissaan. 172 00:07:59,030 --> 00:08:03,870 >> Joten nyt kiinnitettävä huomiota jotain, joka on todellakin enemmän visuaalista 173 00:08:03,870 --> 00:08:06,990 ja jännittävä ja asettaa vaiheessa mitä tulee olemaan näköpiirissä 174 00:08:06,990 --> 00:08:08,420 vain pari viikkoa aikaa. 175 00:08:08,420 --> 00:08:12,160 Kun ensimmäinen tietokilpailu, me käännä keskittyä ongelmaamme sarjaa toiseen 176 00:08:12,160 --> 00:08:16,710 verkkotunnuksen erityinen ongelma, että tutkintaan tai turvallisuuden paranemiseen. 177 00:08:16,710 --> 00:08:19,550 >> Itse asiassa, perinne tämän ongelman sarja on minulle yksi 178 00:08:19,550 --> 00:08:24,850 opetus kaveri tai viranomaiset voisivat kävellä yli kampuksella ottaen joitakin valokuvia 179 00:08:24,850 --> 00:08:29,450 tunnistettavissa, mutta ei selvää ihmisiä, paikkoja tai asioita, niin joka vuosi I 180 00:08:29,450 --> 00:08:34,520 jotenkin onnistuvat vahingossa poistaa tai lahjoa digitaalisen median kortti 181 00:08:34,520 --> 00:08:35,720 että on sisällä meidän kamera. 182 00:08:35,720 --> 00:08:36,860 Mutta no big deal. 183 00:08:36,860 --> 00:08:39,200 Voin mennä eteenpäin ja kytke että minun tietokone. 184 00:08:39,200 --> 00:08:43,010 Voin tehdä rikosteknisen kuvan siitä, niin puhua, kopioimalla nollia ja 185 00:08:43,010 --> 00:08:46,830 niitä pois, että muistikortti, onko sen SD-kortti tai compact flash-kortti tai 186 00:08:46,830 --> 00:08:48,100 mitä olet perehtynyt. 187 00:08:48,100 --> 00:08:49,300 Ja sitten voimme käsi pois. 188 00:08:49,300 --> 00:08:53,190 >> Ja niin haaste, muun asioita sinulle, on kirjoittaa 189 00:08:53,190 --> 00:08:58,630 C-koodia, joka palauttaa koko joukko JPEG minulle ja paljasti tulee 190 00:08:58,630 --> 00:09:00,190 niitä ihmisiä, paikkoja tai asioita. 191 00:09:00,190 --> 00:09:03,340 Ja me myös puhua, tähän ongelmaan asettaa ja tulevina päivinä, noin 192 00:09:03,340 --> 00:09:04,440 grafiikka yleisemmin. 193 00:09:04,440 --> 00:09:06,140 Olemme käyttäneet niitä, tietenkin, varten puhkeaa. 194 00:09:06,140 --> 00:09:09,080 Mutta olet tavallaan itsestäänselvyys on olemassa näihin korkean tason käsitteitä 195 00:09:09,080 --> 00:09:10,680 suorakulmioita ja suorakaide. 196 00:09:10,680 --> 00:09:12,450 Mutta alla huppu on pikseliä. 197 00:09:12,450 --> 00:09:14,370 Ja sinulla on ollut aloittaa ajatella niitä. 198 00:09:14,370 --> 00:09:18,800 Tai et p-sarja 4 on ajateltava noin kuilu teidän tiilet, miten 199 00:09:18,800 --> 00:09:21,990 nopeasti olet pallo liikkuu eri puolilla näytön puhkeaa. 200 00:09:21,990 --> 00:09:24,830 Joten on tämä käsite pisteitä näytön, joka on 201 00:09:24,830 --> 00:09:26,290 kuvaan jo. 202 00:09:26,290 --> 00:09:29,430 >> Nyt, mitä näet, on kuitenkin mitä saat tietokoneen näytöllä. 203 00:09:29,430 --> 00:09:33,680 Jos olet koskaan katsonut joitakin hyviä tai huono TV, kertoimet ovat ne melko paljon 204 00:09:33,680 --> 00:09:36,280 kohdella yleisöä kuin technophobes jotka eivät oikeastaan 205 00:09:36,280 --> 00:09:37,630 tiedä paljoakaan computing. 206 00:09:37,630 --> 00:09:40,840 Ja niin se on erittäin helppo poliisi etsivä sanoa, voitte 207 00:09:40,840 --> 00:09:41,710 puhdistaa, että minun puolestani? 208 00:09:41,710 --> 00:09:42,710 Tai parantaa, eikö? 209 00:09:42,710 --> 00:09:45,550 Paranna on kuin muotisana eniten tahansa rikollisuuteen liittyvän show. 210 00:09:45,550 --> 00:09:49,240 Ja tosiasia on, jos otat hyvin epäselvä kuva epäilty tekee 211 00:09:49,240 --> 00:09:51,620 jotain pahaa, et voi vain parantaa sitä. 212 00:09:51,620 --> 00:09:53,080 Et voi zoomata loputtomiin. 213 00:09:53,080 --> 00:09:56,350 Et voi nähdä kimaltaa jonkun silmä, joka teki, että 214 00:09:56,350 --> 00:09:59,860 erityisesti rikollisuuden huolimatta esiintyvyys tämän televisiossa. 215 00:09:59,860 --> 00:10:04,110 >> Ja niin on, että nyt motivoida, että tuleva ongelma asetettu vilaus 216 00:10:04,110 --> 00:10:05,765 joitakin osoittaa, jolla voit saattaa olla tuttu. 217 00:10:05,765 --> 00:10:06,500 >> [VIDEOTOISTOSTA] 218 00:10:06,500 --> 00:10:07,835 >> -OK. 219 00:10:07,835 --> 00:10:09,956 Nyt, saada hyvä katsoa sinua. 220 00:10:09,956 --> 00:10:17,060 221 00:10:17,060 --> 00:10:17,766 >> -Hetkinen. 222 00:10:17,766 --> 00:10:18,658 Suorita sen takaisin. 223 00:10:18,658 --> 00:10:19,550 >> -Hetkinen. 224 00:10:19,550 --> 00:10:21,580 Mene oikealle. 225 00:10:21,580 --> 00:10:21,800 >> -On. 226 00:10:21,800 --> 00:10:22,690 Jäätyä, että. 227 00:10:22,690 --> 00:10:23,692 >> -Koko näyttö. 228 00:10:23,692 --> 00:10:23,846 >> -OK. 229 00:10:23,846 --> 00:10:24,154 Jäätyä, että. 230 00:10:24,154 --> 00:10:25,140 >> -Kiristää, että jooko? 231 00:10:25,140 --> 00:10:27,090 >> -Vector kauppaa näillä kaveri jonka takapyörä. 232 00:10:27,090 --> 00:10:29,730 >> -Zoom in täällä tällä paikalla. 233 00:10:29,730 --> 00:10:33,700 >> -Kun oikeat välineet, imaged voi suurentaa ja teroitettu. 234 00:10:33,700 --> 00:10:34,490 >> -Mikä tuo on? 235 00:10:34,490 --> 00:10:35,870 >> -Se on tehostamisohjelma. 236 00:10:35,870 --> 00:10:36,793 >> -Voitko selvittää sen kaikki? 237 00:10:36,793 --> 00:10:38,560 >> -En tiedä. 238 00:10:38,560 --> 00:10:39,090 Katsotaanpa parantaa sitä. 239 00:10:39,090 --> 00:10:41,690 >> -Paranna osa-6. 240 00:10:41,690 --> 00:10:43,510 >> -Olen parantaa yksityiskohtia ja - 241 00:10:43,510 --> 00:10:44,456 >> -Mielestäni on tarpeeksi parantaa. 242 00:10:44,456 --> 00:10:45,402 Vapauta se minun näytöllä. 243 00:10:45,402 --> 00:10:47,300 >> -Paranna heijastus hänen silmässä. 244 00:10:47,300 --> 00:10:49,330 >> -Juostaan ​​tätä kautta kuvanmuokkausteknologia. 245 00:10:49,330 --> 00:10:50,340 >> -Edgar, voit parantaa tätä? 246 00:10:50,340 --> 00:10:52,320 >> -Hetkinen. 247 00:10:52,320 --> 00:10:54,290 >> -Olen työskennellyt tämän pohdintaa. 248 00:10:54,290 --> 00:10:55,560 >> -Joku heijastus. 249 00:10:55,560 --> 00:10:56,440 >> -Reflection. 250 00:10:56,440 --> 00:10:57,940 >> -On heijastus ja miehen kasvot. 251 00:10:57,940 --> 00:10:58,860 >> -Pohdintaa. 252 00:10:58,860 --> 00:10:59,710 >> -On pohdintaa. 253 00:10:59,710 --> 00:11:00,900 >> -Lähennä peiliin. 254 00:11:00,900 --> 00:11:03,500 >> -Näet pohdintaa. 255 00:11:03,500 --> 00:11:04,700 >> -Voitko parantaa kuvan täältä? 256 00:11:04,700 --> 00:11:05,700 >> -Voitko parantaa hänet täällä? 257 00:11:05,700 --> 00:11:06,500 >> -Voitko parantaa sitä? 258 00:11:06,500 --> 00:11:07,380 >> -Voitko parantaa sitä? 259 00:11:07,380 --> 00:11:08,190 >> -Voimmeko parantaa tätä? 260 00:11:08,190 --> 00:11:08,940 >> -Voitko parantaa sitä? 261 00:11:08,940 --> 00:11:10,280 >> -Hetkinen, minä parantaa. 262 00:11:10,280 --> 00:11:11,570 >> -Lähennä oveen. 263 00:11:11,570 --> 00:11:12,180 >> -X10. 264 00:11:12,180 --> 00:11:13,052 >> -Zoom. 265 00:11:13,052 --> 00:11:13,197 >> [Naurua] 266 00:11:13,197 --> 00:11:14,360 >> -Siirrä sisään 267 00:11:14,360 --> 00:11:15,100 >> -Odota, lopeta. 268 00:11:15,100 --> 00:11:15,740 >> -Lopeta. 269 00:11:15,740 --> 00:11:16,290 >> -Taukotilaan. 270 00:11:16,290 --> 00:11:19,390 >> -Kierrä 75 astetta ympäri pystysuora kiitos. 271 00:11:19,390 --> 00:11:19,886 >> [Naurua] 272 00:11:19,886 --> 00:11:24,350 >> -Lopeta, ja takaisin osa noin ovesta. 273 00:11:24,350 --> 00:11:26,330 >> -Got kuva tehostajana joka voi bittikartta? 274 00:11:26,330 --> 00:11:28,990 >> -Ehkä voimme käyttää Pradeep Senin menetelmä kurkistaa ikkunoita. 275 00:11:28,990 --> 00:11:30,680 >> -Tämä ohjelmisto on uusinta. 276 00:11:30,680 --> 00:11:31,676 >> -Kuvake arvo on pois päältä. 277 00:11:31,676 --> 00:11:34,166 >> -Kun oikea yhdistelmä algoritmeja. 278 00:11:34,166 --> 00:11:38,399 >> -Hän on vienyt valaistus algoritmeja seuraavalle tasolle ja voin käyttää niitä 279 00:11:38,399 --> 00:11:38,648 parantaa tämän valokuvan. 280 00:11:38,648 --> 00:11:42,050 >> -Lock-suuremmaksi z-akselin. 281 00:11:42,050 --> 00:11:42,760 >> -Paranna. 282 00:11:42,760 --> 00:11:43,060 >> -Paranna. 283 00:11:43,060 --> 00:11:43,760 >> -Paranna. 284 00:11:43,760 --> 00:11:45,010 >> -Aineita ja parantaa. 285 00:11:45,010 --> 00:11:47,470 286 00:11:47,470 --> 00:11:47,910 >> [END VIDEOTOISTOSTA] 287 00:11:47,910 --> 00:11:51,470 >> DAVID J. MALAN: Eli ongelma Set 5 on mitä on edessä siellä. 288 00:11:51,470 --> 00:11:55,260 Joten me pian saada parempi käsitys siitä, milloin ja miksi voit 289 00:11:55,260 --> 00:11:57,300 ja meidän voi parantaa tällä tavoin. 290 00:11:57,300 --> 00:12:00,090 Mutta ensin Palatkaamme huomiomme joitakin rakennuspalikoita hyvitämme 291 00:12:00,090 --> 00:12:02,250 täytyy pystyä kertomaan, että tarina. 292 00:12:02,250 --> 00:12:05,580 >> Joten muistaa, että olemme tehneet tätä kuvaa Maanantai ja hieman viime viikolla. 293 00:12:05,580 --> 00:12:09,970 Ja tämä kuvaa ulkoasu asioita tietokoneen muistiin, kun 294 00:12:09,970 --> 00:12:11,000 joidenkin ohjelman. 295 00:12:11,000 --> 00:12:14,310 Tech segmentin ylös, muistaa, viittaa todellinen nollia ja ykkösiä 296 00:12:14,310 --> 00:12:16,000 jotka muodostavat ohjelman. 297 00:12:16,000 --> 00:12:19,340 Ei, alla, että jotkut alustettu tai alustamatonta, joka tyypillisesti 298 00:12:19,340 --> 00:12:22,910 viittaa asioita, kuten vakioita tai jouset tai globaaleja muuttujia, jotka ovat 299 00:12:22,910 --> 00:12:24,200 etukäteen ilmoitettu. 300 00:12:24,200 --> 00:12:26,500 On kasaan, mutta tulemme takaisin, että vähän. 301 00:12:26,500 --> 00:12:27,410 >> Ja sitten on pino. 302 00:12:27,410 --> 00:12:30,660 Aivan kuten pino lokerot kahvila, tämä on, jos muisti saa 303 00:12:30,660 --> 00:12:33,610 kerroksittain ja kerroksellinen aina et mitä ohjelmassa? 304 00:12:33,610 --> 00:12:36,380 305 00:12:36,380 --> 00:12:37,730 Mikä on pino käytössä? 306 00:12:37,730 --> 00:12:39,320 >> Niin? 307 00:12:39,320 --> 00:12:40,000 >> Call of toimintoa. 308 00:12:40,000 --> 00:12:42,890 Aina kun soittaa toiminto, se on annetaan suikale muistin sen 309 00:12:42,890 --> 00:12:45,020 paikallisia muuttujia tai parametreja. 310 00:12:45,020 --> 00:12:48,810 Ja kuvallisesti, näemme, että jokaisen peräkkäisten toiminto nimeltään, kun 311 00:12:48,810 --> 00:12:52,520 puhelut B puhelut C puhelut D, ne saada kerroksellinen pinoon. 312 00:12:52,520 --> 00:12:55,630 Ja Kuhunkin viipaletta muisti on lähinnä ainutlaatuinen soveltamisala 313 00:12:55,630 --> 00:12:58,590 tätä toimintoa, joka tietenkin, on ongelmallista, jos haluatte antaa 314 00:12:58,590 --> 00:13:01,850 alkaen toiminnosta toiseen pala tietoja, joita haluat 315 00:13:01,850 --> 00:13:03,500 muuttua tai muuttaa. 316 00:13:03,500 --> 00:13:08,060 >> Joten mikä oli meidän ratkaisu mahdollistaa Toiminta edustaa yksi pino 317 00:13:08,060 --> 00:13:11,390 runko vaihtaa muistin sisällä toisen pinokehyksen? 318 00:13:11,390 --> 00:13:14,590 Miten nämä kaksi puhuvat toisilleen? 319 00:13:14,590 --> 00:13:18,510 Joten tapa osoittimia tai osoitteita, joka taas vain kuvata missä 320 00:13:18,510 --> 00:13:22,280 muistia, jonka tapa tietyn purra numero, erityisesti 321 00:13:22,280 --> 00:13:23,830 arvo voidaan löytää. 322 00:13:23,830 --> 00:13:26,860 Joten muistaa viimeisen kerran liian jatkoimme tarina ja katseli 323 00:13:26,860 --> 00:13:28,280 melko buginen ohjelma. 324 00:13:28,280 --> 00:13:32,900 Ja tämä ohjelma on buginen muutaman syistä, mutta kaikkein huolestuttavaa yksi on 325 00:13:32,900 --> 00:13:34,620 koska se ei tarkistaa, mitä? 326 00:13:34,620 --> 00:13:39,111 327 00:13:39,111 --> 00:13:40,450 >> Joo, se ei tarkista tulo. 328 00:13:40,450 --> 00:13:41,870 Anteeksi? 329 00:13:41,870 --> 00:13:43,880 >> Jos se on yli 12 merkkiä. 330 00:13:43,880 --> 00:13:47,260 Niin kovin fiksusti, soitettaessa memcopy, joka, kuten nimestä voi päätellä, vain 331 00:13:47,260 --> 00:13:50,630 kopioita muisti sen toinen väite sen ensimmäiseen väitteeseen. 332 00:13:50,630 --> 00:13:54,730 Kolmas väite, erittäin fiksusti, on tarkistettava, että et 333 00:13:54,730 --> 00:13:59,400 kopioida useita, tässä tapauksessa pituus bar, merkkien, 334 00:13:59,400 --> 00:14:03,810 otetaan kohde, joka on tämä array C. Mutta ongelma on, että mitä 335 00:14:03,810 --> 00:14:07,230 jos C itsessään ei ole tarpeeksi suuri käsitellä sitä? 336 00:14:07,230 --> 00:14:09,900 Aiot kopioida määrä tavua, että olet saanut. 337 00:14:09,900 --> 00:14:13,040 Mutta mitä oikeastaan ​​on enemmän tavua kuin sinulla on varaa? 338 00:14:13,040 --> 00:14:16,770 >> No, tämä ohjelma erittäin tyhmästi vain sokeasti etenee ottaa mitä se on 339 00:14:16,770 --> 00:14:20,650 annettu, hei kenoviiva 0 on hienoa, jos merkkijono on lyhyt 340 00:14:20,650 --> 00:14:22,040 tarpeeksi, kuten viisi merkkiä. 341 00:14:22,040 --> 00:14:26,470 Mutta jos se on itse asiassa 12 merkkiä tai 1200 merkkiä, näimme viime kerralla 342 00:14:26,470 --> 00:14:29,380 että olet juuri menossa täysin korvata muistin 343 00:14:29,380 --> 00:14:30,470 ei kuulu sinulle. 344 00:14:30,470 --> 00:14:34,390 Ja pahimmassa tapauksessa, jos korvaat että punainen osa on, että soitimme 345 00:14:34,390 --> 00:14:35,380 palata osoite - 346 00:14:35,380 --> 00:14:38,370 tämä on vain, jos tietokoneessa automaattisesti, sinulle takana 347 00:14:38,370 --> 00:14:43,130 kohtauksia, tucks pois 32-bittinen, muistuttaa sitä, mitä osoite pitääkin 348 00:14:43,130 --> 00:14:47,080 palaa, kun foo, tämä toinen toiminto, tehdään täytäntöönpanosta. 349 00:14:47,080 --> 00:14:49,320 Se leipä murunen tapaisena johon se palaa. 350 00:14:49,320 --> 00:14:52,490 Jos korvaat, että mahdollisesti jos olet pahis, voi voi 351 00:14:52,490 --> 00:14:54,750 mahdollisesti ottaa jonkun tietokone. 352 00:14:54,750 --> 00:14:58,020 Ja tulet varmasti kaada useimmissa tapauksissa. 353 00:14:58,020 --> 00:15:01,690 >> Nyt tämä ongelma on vain pahentunut aloimme puhua muisti 354 00:15:01,690 --> 00:15:03,010 hallinta yleisemmin. 355 00:15:03,010 --> 00:15:07,150 Ja malloc, muistin jakamista, on toiminto, että voimme käyttää osoittamaan 356 00:15:07,150 --> 00:15:11,260 muistista, kun emme tiedä etukäteen että ehkä joitakin. 357 00:15:11,260 --> 00:15:13,960 Niinpä esimerkiksi, jos menen takaisin Laitteen tässä. 358 00:15:13,960 --> 00:15:21,010 Ja minä avautuvat viimeisen kerran hello2.c, muistaa tästä ohjelmasta, jossa tarkasteltiin 359 00:15:21,010 --> 00:15:23,500 vähän jotain tällaista, vain kolme riviä - 360 00:15:23,500 --> 00:15:27,940 nimenne, niin merkkijonon nimi vasemmalla, vastaa getString. 361 00:15:27,940 --> 00:15:29,690 Ja sitten me tulostaa sen, käyttäjän nimi. 362 00:15:29,690 --> 00:15:31,170 >> Joten tämä oli erittäin yksinkertainen ohjelma. 363 00:15:31,170 --> 00:15:34,870 Olla selkeä, anna minun mennä eteenpäin ja tehdä hei-2. 364 00:15:34,870 --> 00:15:36,680 Aion tehdä piste slash hei-2. 365 00:15:36,680 --> 00:15:37,750 Nimenne - 366 00:15:37,750 --> 00:15:38,140 David. 367 00:15:38,140 --> 00:15:38,840 Anna. 368 00:15:38,840 --> 00:15:39,540 Hei David. 369 00:15:39,540 --> 00:15:41,060 Se tuntuu toimivan OK. 370 00:15:41,060 --> 00:15:43,140 Mutta mitä todella tapahtuu alla huppu täällä? 371 00:15:43,140 --> 00:15:44,670 Katsotaanpa ensin kuori takaisin joitakin kerroksia. 372 00:15:44,670 --> 00:15:48,380 String on vain synonyymi olemme tajusi mitä? 373 00:15:48,380 --> 00:15:49,110 Char tähden. 374 00:15:49,110 --> 00:15:52,740 Joten tehkäämme se hieman mystistä mutta teknisesti oikein, että tämä 375 00:15:52,740 --> 00:15:55,570 on char tähden, mikä tarkoittaa, että nimi, kyllä, on muuttuva. 376 00:15:55,570 --> 00:15:59,920 Mutta millä nimellä myymälöitä on osoite char, joka tuntuu hieman oudolta 377 00:15:59,920 --> 00:16:01,050 koska Saan takaisin merkkijono. 378 00:16:01,050 --> 00:16:03,580 Saan takaisin useita merkkiä ei merkkiä. 379 00:16:03,580 --> 00:16:07,400 >> Mutta tietenkin, sinun tarvitsee vain ensimmäinen char osoitteen muistaa missä 380 00:16:07,400 --> 00:16:08,870 koko jono on koska miksi? 381 00:16:08,870 --> 00:16:12,700 Miten selvittää missä lopussa merkkijono on tietää alusta? 382 00:16:12,700 --> 00:16:13,630 Kenoviiva nolla. 383 00:16:13,630 --> 00:16:17,260 Joten nämä kaksi vihjeitä voit selvittää ennen alussa ja lopussa 384 00:16:17,260 --> 00:16:20,280 tahansa merkkijono ovat, kunhan ne ovat oikein muodostettu, että null 385 00:16:20,280 --> 00:16:22,110 terminaattori, että kenoviiva nolla. 386 00:16:22,110 --> 00:16:24,520 >> Mutta tämä vaatii getString. 387 00:16:24,520 --> 00:16:28,020 Ja käy ilmi, että getString Koko tämän ajan on ollut sellainen 388 00:16:28,020 --> 00:16:28,820 pettää meille. 389 00:16:28,820 --> 00:16:32,460 Se tehnyt tätä työtä, on varma, saada merkkijonon käyttäjä. 390 00:16:32,460 --> 00:16:34,580 Mutta jos tuo muisti on peräisin? 391 00:16:34,580 --> 00:16:38,440 Jos palaamme kuvan tänne ja sovelletaan määritelmä vain 392 00:16:38,440 --> 00:16:42,610 hetki sitten, että pino on, jos muisti menee, kun funktiot, 393 00:16:42,610 --> 00:16:45,370 tämän logiikan, kun soitat getString, ja sitten kirjoitan 394 00:16:45,370 --> 00:16:50,900 D-A-V-I-D Anna, joissa on D-A-V-I-D backslash nolla varastoidaan, joka perustuu 395 00:16:50,900 --> 00:16:53,480 Tarina olemme kertoneet meille pitkälle? 396 00:16:53,480 --> 00:16:55,190 >> Tuntuisi olevan pino, eikö? 397 00:16:55,190 --> 00:16:58,120 Kun soitat saat merkkijono saat pieni siivu muistia pinon. 398 00:16:58,120 --> 00:17:01,630 Joten on aivan selvää, että D-A-V-I-D kenoviiva nolla on tallennettu 399 00:17:01,630 --> 00:17:02,770 siellä pinossa. 400 00:17:02,770 --> 00:17:07,680 Mutta hetkinen, getString palaa merkkijonon, niin sanotusti, mikä tarkoittaa 401 00:17:07,680 --> 00:17:11,700 se lokero kahvila otetaan pinosta. 402 00:17:11,700 --> 00:17:14,560 Ja me sanoimme viimeisen kerran, että heti funktio palauttaa, ja otat että 403 00:17:14,560 --> 00:17:20,109 tarjotin, niin sanotusti, pinosta, mitä voit olettaa noin jäänteitä 404 00:17:20,109 --> 00:17:21,819 että muisti? 405 00:17:21,819 --> 00:17:25,160 Olen tavallaan redrew niitä kysymysmerkkejä koska ne tehokkaasti tullut 406 00:17:25,160 --> 00:17:26,250 tuntemattomia arvoja. 407 00:17:26,250 --> 00:17:29,500 Ne voidaan käyttää uudelleen, kun jotkut Seuraava toiminto on nimeltään. 408 00:17:29,500 --> 00:17:31,870 >> Toisin sanoen, jos tapahtuu voidaan tallentaa - 409 00:17:31,870 --> 00:17:34,350 Minä piirtää nopeasti kuva tässä pinon. 410 00:17:34,350 --> 00:17:38,690 Jos satumme piirustus pohjaan minun muistin segmentin, ja me sanomme 411 00:17:38,690 --> 00:17:42,230 , että tämä on paikka muistin käytössä tärkein ja ehkä arg c ja 412 00:17:42,230 --> 00:17:46,790 ARG v ja mitään muuta ohjelmaa, kun getString kutsutaan, 413 00:17:46,790 --> 00:17:51,120 oletettavasti getString saa kimpale muisti täällä. 414 00:17:51,120 --> 00:17:53,940 Ja sitten D-A-V-I-D jotenkin päätyy tätä toimintoa. 415 00:17:53,940 --> 00:17:55,320 Ja aion pelkistettyjen. 416 00:17:55,320 --> 00:18:00,050 Mutta oletetaan, että sen D-A-V-I-D backslash nolla. 417 00:18:00,050 --> 00:18:03,500 Joten näin monta tavua käytetään runko getString. 418 00:18:03,500 --> 00:18:08,270 >> Mutta heti kun getString palaa, me sanoi viime kerralla, että tämä muisti yli 419 00:18:08,270 --> 00:18:11,340 täällä kaikki muuttuu - woops! - 420 00:18:11,340 --> 00:18:14,270 kaikki tulee tehokkaasti poistetaan. 421 00:18:14,270 --> 00:18:17,220 Ja voimme ajatella tätä nyt kysymys markkaa, koska kuka tietää 422 00:18:17,220 --> 00:18:18,720 mitä tulossa on, että muisti. 423 00:18:18,720 --> 00:18:22,130 Itse olen usein soittaa toiminnot muut kuin getString. 424 00:18:22,130 --> 00:18:24,750 Ja heti kun kutsun joitakin muita toiminto kuin getString, ehkei 425 00:18:24,750 --> 00:18:28,860 kyseistä ohjelmaa me vain katsoi klo mutta jotkut muut, varmasti joitakin muita 426 00:18:28,860 --> 00:18:34,180 toiminto saattaa päätyä annetaan tämä seuraava paikalla pino. 427 00:18:34,180 --> 00:18:39,410 >> Joten se ei voi olla, että getString myymälöissä D-A-V-I-D pinoon, koska olisin 428 00:18:39,410 --> 00:18:41,040 heti menetät sen. 429 00:18:41,040 --> 00:18:43,720 Mutta me tiedämme, he getString palauttaa vain mitä? 430 00:18:43,720 --> 00:18:47,220 Se ei ole paluuta minulle kuusi merkkiä. 431 00:18:47,220 --> 00:18:51,090 Mikä on se todella palaamassa ollut voimme päätellä, viime kerralla? 432 00:18:51,090 --> 00:18:52,480 Osoite ensin. 433 00:18:52,480 --> 00:18:56,650 Joten jotenkin, kun soitit getString, se jaetaan kimpale muisti 434 00:18:56,650 --> 00:18:59,620 merkkijono, joka käyttäjien tyyppi ja palaavat sitten osoite sitä. 435 00:18:59,620 --> 00:19:02,930 Ja käy ilmi, että kun haluat toimiakseen varata muistia tässä 436 00:19:02,930 --> 00:19:08,390 tavalla ja palata henkilö, joka kutsui että toiminto, osoite 437 00:19:08,390 --> 00:19:11,870 että kimpale muisti, sinun ehdottomasti ei voi laittaa sen pinon 438 00:19:11,870 --> 00:19:14,750 pohja, koska toiminnallisesti se on vain menossa tule sinun hyvin 439 00:19:14,750 --> 00:19:17,800 nopeasti, joten voit arvata missä olemme todennäköisesti menossa nakata sitä 440 00:19:17,800 --> 00:19:20,130 sen sijaan, ns pino. 441 00:19:20,130 --> 00:19:25,290 >> Joten välillä pohjaan muistin ulkoasu ja yläosassa muistin 442 00:19:25,290 --> 00:19:26,820 ulkoasu ovat koko joukko segmenttejä. 443 00:19:26,820 --> 00:19:29,270 Yksi on pino, ja oikea sen yläpuolella on kasaan. 444 00:19:29,270 --> 00:19:33,680 Ja kasaan on vain erilainen kimpale muisti, että ei ole käytetty toiminnot 445 00:19:33,680 --> 00:19:34,770 kun niitä kutsutaan. 446 00:19:34,770 --> 00:19:38,100 Sitä käytetään pitkän aikavälin muistia, kun haluat yhden toiminnon napata joitakin 447 00:19:38,100 --> 00:19:42,700 muistia ja voi roikkua sitä menettämättä sen hallintaansa. 448 00:19:42,700 --> 00:19:45,550 >> Nyt voisit ehkä heti nähdä, että tämä ei ole 449 00:19:45,550 --> 00:19:48,060 välttämättä täydellinen suunnittelu. 450 00:19:48,060 --> 00:19:51,350 Koska ohjelma varattu muisti pino, tai soitat yhä 451 00:19:51,350 --> 00:19:55,540 enemmän toimintoja, tai kun jakaa muisti kasaan malloc pois niin 452 00:19:55,540 --> 00:20:00,690 getString tekee, mitä selvästi näyttää olevan väistämätön ongelma? 453 00:20:00,690 --> 00:20:00,860 >> Oikea. 454 00:20:00,860 --> 00:20:03,150 Kuten se, että nämä nuolet ovat toisiaan kohti 455 00:20:03,150 --> 00:20:04,380 ei lupaa hyvää. 456 00:20:04,380 --> 00:20:08,630 Ja todellakin, voisimme hyvin nopeasti kaatua ohjelma monin tavoin. 457 00:20:08,630 --> 00:20:12,050 Itse olen sitä mieltä, että voisi olla tehnyt tämän vahingossa kerran. 458 00:20:12,050 --> 00:20:14,020 Tai jos ei, tehdään se tarkoituksella nyt. 459 00:20:14,020 --> 00:20:21,330 Anna minun mennä eteenpäin ja kirjoittaa erittäin nopeasti ohjelma nimeltä dontdothis.c. 460 00:20:21,330 --> 00:20:26,730 Ja nyt minä menen tänne ja ei terävä kuuluu stdio.h. 461 00:20:26,730 --> 00:20:32,620 Katsotaan julistaa toiminnon foo vie Ei perusteluja, jotka on 462 00:20:32,620 --> 00:20:34,040 merkitään yhtä hyvin mitätön. 463 00:20:34,040 --> 00:20:37,830 >> Ja ainoa asia foo aikoo tehdä, on Puhelun foo, joka luultavasti ei ole 464 00:20:37,830 --> 00:20:39,100 älykkäin idea, mutta olkoon. 465 00:20:39,100 --> 00:20:40,490 Ent tärkein mitätön. 466 00:20:40,490 --> 00:20:45,270 Nyt ainoa asia, tärkein on menossa vain soittaa foo samoin. 467 00:20:45,270 --> 00:20:51,050 Ja ihan vain huvin vuoksi, aion mennä eteenpäin ja sanoa printf "Hei 468 00:20:51,050 --> 00:20:52,340 foo. " 469 00:20:52,340 --> 00:20:52,890 >> OK. 470 00:20:52,890 --> 00:21:00,160 Joten jos en tee virheitä, Tee dontdothis dot slash. 471 00:21:00,160 --> 00:21:01,960 Ja tehkäämme se isompi ikkuna - 472 00:21:01,960 --> 00:21:03,210 dot slash, dontdothis. 473 00:21:03,210 --> 00:21:07,590 474 00:21:07,590 --> 00:21:08,840 Tule. 475 00:21:08,840 --> 00:21:10,940 476 00:21:10,940 --> 00:21:11,890 Ohoh. 477 00:21:11,890 --> 00:21:13,100 Ilmeisesti, voit tehdä tämän. 478 00:21:13,100 --> 00:21:15,190 Hitto. 479 00:21:15,190 --> 00:21:16,190 OK. 480 00:21:16,190 --> 00:21:16,580 Odota. 481 00:21:16,580 --> 00:21:17,370 Valmiustila. 482 00:21:17,370 --> 00:21:18,270 Teimme - 483 00:21:18,270 --> 00:21:20,110 Emme käytä sitä tehdä. 484 00:21:20,110 --> 00:21:22,050 >> [Huokaa] 485 00:21:22,050 --> 00:21:25,110 >> En tiedä, mutta mielestäni poisti sen. 486 00:21:25,110 --> 00:21:28,410 Uh, joo. 487 00:21:28,410 --> 00:21:30,660 Hitto. 488 00:21:30,660 --> 00:21:32,640 Ratkaise tämä Rob. 489 00:21:32,640 --> 00:21:34,678 Mitä? 490 00:21:34,678 --> 00:21:35,928 Se on hyvin yksinkertainen. 491 00:21:35,928 --> 00:21:43,820 492 00:21:43,820 --> 00:21:47,360 Joo, käännyimme optimointi päältä. 493 00:21:47,360 --> 00:21:48,970 OK, stand bye. 494 00:21:48,970 --> 00:21:49,950 Nyt tunnen paremmin. 495 00:21:49,950 --> 00:21:51,390 OK. 496 00:21:51,390 --> 00:21:51,780 Selvä. 497 00:21:51,780 --> 00:21:53,430 >> Joten kääntää tämän - 498 00:21:53,430 --> 00:21:55,880 Tee sinä dontdothis. 499 00:21:55,880 --> 00:22:00,090 Saatat joutua nimetä tämän dothis.c vain hetken. 500 00:22:00,090 --> 00:22:00,710 Siellä mennään. 501 00:22:00,710 --> 00:22:01,240 Kiitos. 502 00:22:01,240 --> 00:22:02,050 OK. 503 00:22:02,050 --> 00:22:05,480 Niin että olin tulostus jotain oli oikeastaan ​​vain 504 00:22:05,480 --> 00:22:08,150 hidastaa prosessia, jonka me olisi päässeet niin pitkälle. 505 00:22:08,150 --> 00:22:08,510 OK. 506 00:22:08,510 --> 00:22:08,870 Huh huh! 507 00:22:08,870 --> 00:22:11,180 >> Joten mitä todella tapahtuu? 508 00:22:11,180 --> 00:22:14,440 Syynä on, aivan kuten syrjään, on tee mitään panoksina ja 509 00:22:14,440 --> 00:22:17,270 lähtö on yleensä hitaampaa, koska olet täytyy kirjoittaa merkkiä 510 00:22:17,270 --> 00:22:18,600 näyttö, se on vierittää. 511 00:22:18,600 --> 00:22:21,720 Niin pitkän tarinan lyhyesti, olisin oikeastaan tapahtui niin kärsimätön, meillä olisi 512 00:22:21,720 --> 00:22:23,260 nähnyt tätä lopputulosta samoin. 513 00:22:23,260 --> 00:22:26,220 Nyt sain ratsastaa print-ups, näemme sen heti. 514 00:22:26,220 --> 00:22:28,410 Miksi tämä tapahtuu. 515 00:22:28,410 --> 00:22:31,300 No, yksinkertainen selitys, tietenkin, on, että foo luultavasti ei pitäisi 516 00:22:31,300 --> 00:22:32,500 vaativatkin itse. 517 00:22:32,500 --> 00:22:34,470 >> Nyt yleisesti, Tämä on rekursio. 518 00:22:34,470 --> 00:22:36,970 Ja ajattelimme pari viikkoa sitten rekursiivinen on hyvä. 519 00:22:36,970 --> 00:22:40,330 Rekursio on tämä maaginen tapa ilmaista itseäsi Super ytimekkäästi. 520 00:22:40,330 --> 00:22:41,400 Ja se vain toimii. 521 00:22:41,400 --> 00:22:45,060 Mutta on keskeinen osa kaikkien rekursiivinen ohjelmia olemme puhuneet 522 00:22:45,060 --> 00:22:48,260 noin ja katseli toistaiseksi, mikä oli, että heillä oli mitä? 523 00:22:48,260 --> 00:22:52,610 Base tapauksessa, joka oli noin kovakoodattu tapauksessa, että mainittu joissakin tilanteissa 524 00:22:52,610 --> 00:22:56,210 älä soita foo, mikä on selvästi ei ole tässä tapauksessa. 525 00:22:56,210 --> 00:22:58,920 >> Joten mitä todella tapahtuu kannalta tätä kuvaa? 526 00:22:58,920 --> 00:23:01,790 No, kun tärkeimmät kutsuu foo, se saa siivu muistia. 527 00:23:01,790 --> 00:23:04,150 Kun foo kutsuu foo, se saa siivu muistia. 528 00:23:04,150 --> 00:23:06,430 Kun foo kutsuu foo, se saa siivu. 529 00:23:06,430 --> 00:23:07,080 Se saa siivu. 530 00:23:07,080 --> 00:23:08,120 Se saa siivu. 531 00:23:08,120 --> 00:23:09,460 Koska foo ei koskaan palaa. 532 00:23:09,460 --> 00:23:12,160 Emme koskaan pyyhkiminen yksi niistä kehykset pinosta. 533 00:23:12,160 --> 00:23:15,930 Joten olemme puhaltaneet kasaan, ei mainita ties mitä muuta, ja 534 00:23:15,930 --> 00:23:19,600 olemme liian pitkälle rajoja meidän ns segmentti muistia. 535 00:23:19,600 --> 00:23:21,790 Virhe mennä segmentointi vääriä. 536 00:23:21,790 --> 00:23:24,110 >> Joten ratkaisu on selvästikään eivät tee tätä. 537 00:23:24,110 --> 00:23:28,830 Mutta isompi seuraus on, että kyllä, on ehdottomasti on joitakin rajoja, 538 00:23:28,830 --> 00:23:32,470 vaikka se ei ole hyvin määritelty, siitä, miten monia toimintoja voit soittaa 539 00:23:32,470 --> 00:23:34,970 ohjelma, kuinka monta kertaa toimintoa voi kutsua itseään. 540 00:23:34,970 --> 00:23:38,430 Vaikka siis saarnasivat rekursio koska tämä mahdollisesti maaginen asia 541 00:23:38,430 --> 00:23:41,870 pari viikkoa sitten, että sigma toiminto, ja kun saamme tiedot 542 00:23:41,870 --> 00:23:45,270 rakenteet ja CS50, näet muita sovelluksia, se ei ole 543 00:23:45,270 --> 00:23:46,500 välttämättä parasta. 544 00:23:46,500 --> 00:23:50,070 Koska jos funktio kutsuu itseään, kutsuu itseään, vaikka ei perusta 545 00:23:50,070 --> 00:23:54,860 tapauksessa, jos et osu, että perusversion 1.000 puhelut tai 10000 puhelut, joita 546 00:23:54,860 --> 00:23:58,800 Tuolloin olet ehkä lopu kesken teidän ns pino ja osuma 547 00:23:58,800 --> 00:24:00,400 Joissakin muissa segmenteissä muistia. 548 00:24:00,400 --> 00:24:03,950 Joten sekin on suunnittelu kompromissi Elegance ja välillä 549 00:24:03,950 --> 00:24:06,920 luotettavuutta sinun täytäntöönpanoa. 550 00:24:06,920 --> 00:24:10,780 >> Joten on toinen haittapuoli tai toinen gotcha mitä olemme 551 00:24:10,780 --> 00:24:11,720 tehnyt tähän mennessä. 552 00:24:11,720 --> 00:24:12,980 Kun pyysin getString - 553 00:24:12,980 --> 00:24:15,120 anna minun mennä takaisin hei-2. 554 00:24:15,120 --> 00:24:18,170 Huomaa, että soitan getString, joka on palaamassa osoite. 555 00:24:18,170 --> 00:24:20,730 Ja me väitämme tänään, että osoite on kasaan. 556 00:24:20,730 --> 00:24:24,480 Ja nyt olen tulostamalla string kyseisessä osoitteessa. 557 00:24:24,480 --> 00:24:27,000 Mutta emme ole koskaan kutsuttu vastakohta getString. 558 00:24:27,000 --> 00:24:30,850 Meillä ei ole koskaan ollut CALLL toimivat kuten ungetstring, jossa käsi takaisin 559 00:24:30,850 --> 00:24:31,610 että muisti. 560 00:24:31,610 --> 00:24:33,250 Mutta suoraan sanottuna emme todennäköisesti olisi pitänyt. 561 00:24:33,250 --> 00:24:37,390 Sillä jos pitää kysyä tietokoneen muistin, jonka tapa joku 562 00:24:37,390 --> 00:24:40,830 getString mutta koskaan anna sitä takaisin, varmasti sekin on väistämättä johtaa 563 00:24:40,830 --> 00:24:42,970 ongelmia jolloin me muisti loppuu. 564 00:24:42,970 --> 00:24:46,140 >> Ja itse asiassa, voimme etsiä näitä ongelmia uuden työkalun, jonka käyttö 565 00:24:46,140 --> 00:24:47,640 on hieman arvoituksellinen kirjoittaa. 566 00:24:47,640 --> 00:24:50,960 Mutta anna minun mennä eteenpäin ja kastele ylös ruudulle vain hetken. 567 00:24:50,960 --> 00:24:56,940 Aion mennä eteenpäin ja ajaa Valgrind parametrin, jonka ensimmäinen komento 568 00:24:56,940 --> 00:25:00,260 argumentti on nimi kyseisen ohjelman hei-2. 569 00:25:00,260 --> 00:25:02,650 Ja valitettavasti se on tuotos on atrociously 570 00:25:02,650 --> 00:25:04,290 monimutkainen ilman hyvää syytä. 571 00:25:04,290 --> 00:25:06,280 Näemme kaikki, että sotku. 572 00:25:06,280 --> 00:25:07,530 David on ilmoitettava nimeni. 573 00:25:07,530 --> 00:25:09,760 Niin, että ohjelman todella käynnissä. 574 00:25:09,760 --> 00:25:11,180 Ja nyt saamme tämän lähdön. 575 00:25:11,180 --> 00:25:13,400 >> Joten Valgrind on samanlainen hengeltään GDB. 576 00:25:13,400 --> 00:25:14,950 Se ei ole debuggeri sinänsä. 577 00:25:14,950 --> 00:25:16,270 Mutta se muisti nappula. 578 00:25:16,270 --> 00:25:20,140 Se on ohjelma, joka ajaa ohjelmoida ja kertoa, jos pyydetään 579 00:25:20,140 --> 00:25:23,860 tietokoneen muistiin ja koskaan ojensi sen takaisin, mikä tarkoittaa, että sinulla on 580 00:25:23,860 --> 00:25:24,570 muisti vuotaa. 581 00:25:24,570 --> 00:25:26,240 Ja muistivuotoja yleensä huono. 582 00:25:26,240 --> 00:25:29,120 Ja sinulle on tietokoneen käyttäjiä on luultavasti tuntenut, onko sinulla 583 00:25:29,120 --> 00:25:30,300 Mac tai PC. 584 00:25:30,300 --> 00:25:33,730 Oletko koskaan käyttänyt tietokonetta aikaa ja ei käynnistetä uudelleen useissa 585 00:25:33,730 --> 00:25:36,820 päivää, tai olet juuri saanut paljon ohjelmia käynnissä, ja hemmetin 586 00:25:36,820 --> 00:25:42,360 hidastuu pysähtynyt, tai ainakin se on erittäin ärsyttävää käyttää, koska 587 00:25:42,360 --> 00:25:44,350 kaiken juuri erittäin hidasta. 588 00:25:44,350 --> 00:25:46,260 >> Nyt, joka voi olla monia eri syitä. 589 00:25:46,260 --> 00:25:49,600 Se voisi olla loputon silmukka, vian jonkun koodin, tai yksinkertaisemmin, se 590 00:25:49,600 --> 00:25:53,250 voi tarkoittaa, että käytät enemmän muistiin tai yrittää, kuin 591 00:25:53,250 --> 00:25:54,920 tietokone oikeastaan ​​on. 592 00:25:54,920 --> 00:25:57,770 Ja ehkä siellä on bugi jotain ohjelmaa että Kyselen muistia. 593 00:25:57,770 --> 00:26:02,480 Selaimet vuosia olivat tunnettuja Tämän pyydä lisää ja enemmän muistia 594 00:26:02,480 --> 00:26:03,870 mutta ei koskaan sen palauttamista. 595 00:26:03,870 --> 00:26:07,220 Varmasti, jos sinulla on vain rajallinen muistin määrä, et voi kysyä 596 00:26:07,220 --> 00:26:09,990 äärettömän monta kertaa joitakin että muistia. 597 00:26:09,990 --> 00:26:13,070 >> Ja niin mitä näet täällä, vaikka jälleen Valgrind tuotannosta on 598 00:26:13,070 --> 00:26:17,490 tarpeettoman monimutkaisia ​​vilkaista Ensimmäinen, tämä on mielenkiintoinen osa. 599 00:26:17,490 --> 00:26:18,890 Heap - 600 00:26:18,890 --> 00:26:20,060 käytössä exit. 601 00:26:20,060 --> 00:26:22,810 Joten tässä miten paljon muistia on käytössä kasaan 602 00:26:22,810 --> 00:26:24,300 aikaa minun ohjelma lähtenyt - 603 00:26:24,300 --> 00:26:27,280 ilmeisesti kuusi tavua yhden korttelin. 604 00:26:27,280 --> 00:26:28,710 Joten aion heiluttaa käsiäni mitä lohko on. 605 00:26:28,710 --> 00:26:31,270 Ajattele se on vain pala, enemmän tekninen sana murikka. 606 00:26:31,270 --> 00:26:33,140 Mutta kuusi tavua - 607 00:26:33,140 --> 00:26:36,870 mikä on kuusi tavua, että olivat vielä käytössä? 608 00:26:36,870 --> 00:26:37,390 >> Täsmälleen. 609 00:26:37,390 --> 00:26:41,520 D-A-V-I-D kenoviivan nolla, viisi kirje nimi plus null terminaattori. 610 00:26:41,520 --> 00:26:46,350 Joten tämä ohjelma Valgrind huomasin kysyi kuusi tavua, ilmeisesti, jonka 611 00:26:46,350 --> 00:26:48,950 tapa getString, mutta ei koskaan antoi heille takaisin. 612 00:26:48,950 --> 00:26:52,030 Ja itse asiassa tämä ei välttämättä ole niin ilmeinen, jos ohjelma ei ole kolmea 613 00:26:52,030 --> 00:26:53,590 linjat, mutta se on 300 riviä. 614 00:26:53,590 --> 00:26:56,920 Jotta voimme todella antaa toinen komento argumentti on Valgrind ja 615 00:26:56,920 --> 00:26:58,290 tehdä siitä monisanainen. 616 00:26:58,290 --> 00:26:59,760 Se on vähän ärsyttävää muistaa. 617 00:26:59,760 --> 00:27:01,580 Mutta jos teen - 618 00:27:01,580 --> 00:27:01,930 Katsotaanpa. 619 00:27:01,930 --> 00:27:03,540 Vuotaa - 620 00:27:03,540 --> 00:27:05,030 Oliko se vuotaa - 621 00:27:05,030 --> 00:27:07,580 vaikka en muista mitä se on pois päältä käsin. 622 00:27:07,580 --> 00:27:08,550 >> - Vuoto-check yhtä täynnä. 623 00:27:08,550 --> 00:27:10,180 Jep, kiitos. 624 00:27:10,180 --> 00:27:12,520 - Vuoto-check yhtä täynnä. 625 00:27:12,520 --> 00:27:13,800 Anna. 626 00:27:13,800 --> 00:27:14,940 Sama ohjelma on käynnissä. 627 00:27:14,940 --> 00:27:16,180 Kirjoittaa David uudelleen. 628 00:27:16,180 --> 00:27:17,660 Nyt näen hieman tarkemmin. 629 00:27:17,660 --> 00:27:20,890 Mutta alle kasan yhteenveto, joka on sama kuin neljä - ah, 630 00:27:20,890 --> 00:27:22,120 Tämä on tavallaan mukavaa. 631 00:27:22,120 --> 00:27:25,460 Nyt Valgrind on todella etsivät hieman vaikeampi minun koodi. 632 00:27:25,460 --> 00:27:29,580 Ja se sanoo että, ilmeisesti, malloc linjalla - 633 00:27:29,580 --> 00:27:30,580 me loitontaa. 634 00:27:30,580 --> 00:27:31,980 Rivillä - 635 00:27:31,980 --> 00:27:32,930 emme näe mitä linjaa se on. 636 00:27:32,930 --> 00:27:35,110 Mutta malloc on ensimmäinen syyllinen. 637 00:27:35,110 --> 00:27:38,630 On blogin malloc. 638 00:27:38,630 --> 00:27:39,810 >> Kaikki hyvin? 639 00:27:39,810 --> 00:27:40,450 OK, no. 640 00:27:40,450 --> 00:27:40,940 Oikea? 641 00:27:40,940 --> 00:27:42,520 Soitin getString. 642 00:27:42,520 --> 00:27:44,460 getString ilmeisesti puhelut malloc. 643 00:27:44,460 --> 00:27:47,800 Joten mitä rivi koodia on ilmeisesti syypää ottaa 644 00:27:47,800 --> 00:27:49,050 kohdennetaan tämä muisti? 645 00:27:49,050 --> 00:27:51,560 646 00:27:51,560 --> 00:27:55,540 Oletetaan, että kuka kirjoitti malloc on ollut noin niin kauan, että se on 647 00:27:55,540 --> 00:27:56,390 ei ole heidän vikansa. 648 00:27:56,390 --> 00:27:57,520 Joten se on luultavasti minun. 649 00:27:57,520 --> 00:28:02,000 getString in cs50.c - niin se jonnekin tietokoneen - 650 00:28:02,000 --> 00:28:05,210 linjassa 286 näyttää olevan syyllinen. 651 00:28:05,210 --> 00:28:08,140 Nyt oletetaan, että CS50 on ollut noin kohtuullisen määrän aikaa, joten 652 00:28:08,140 --> 00:28:09,720 mekin olemme erehtymättömiä. 653 00:28:09,720 --> 00:28:14,080 Ja niin se on luultavasti ole getString että vika piilee, vaan pikemminkin 654 00:28:14,080 --> 00:28:17,810 hei-2.c linjan 18. 655 00:28:17,810 --> 00:28:20,670 >> Joten katsomaan mitä se linja 18 oli. 656 00:28:20,670 --> 00:28:21,130 Oh. 657 00:28:21,130 --> 00:28:27,130 Jotenkin tämä linja ei ole välttämättä viallisista, sinänsä, mutta se on syy 658 00:28:27,130 --> 00:28:28,630 takana muistivuoto. 659 00:28:28,630 --> 00:28:32,140 Joten Super yksinkertaisesti, mitä olisi intuitiivisesti olla ratkaisu tähän? 660 00:28:32,140 --> 00:28:34,710 Jos kysymme muisti, ei koskaan antaa sen takaisin, ja se näyttää olevan 661 00:28:34,710 --> 00:28:37,940 ongelma, koska ajan myötä minun tietokone saattaa muisti loppuu, saattaa hidastaa 662 00:28:37,940 --> 00:28:42,110 alas, pahoja asioita voi tapahtua, hyvin, mitä yksinkertainen intuitiivinen ratkaisu? 663 00:28:42,110 --> 00:28:43,140 Anna se takaisin. 664 00:28:43,140 --> 00:28:44,770 >> Miten vapauttaa että muistia? 665 00:28:44,770 --> 00:28:49,970 No, onneksi se on melko yksinkertainen vain sanoa ilmaiseksi nimi. 666 00:28:49,970 --> 00:28:51,260 Ja me emme ole koskaan tehnyt tätä ennen. 667 00:28:51,260 --> 00:28:55,890 Mutta voit olennaisesti ajatella vapaa kuin vastakohta malloc. 668 00:28:55,890 --> 00:28:58,030 vapaa on vastakohta muistin allokointi. 669 00:28:58,030 --> 00:28:59,540 Joten nyt haluan kääntää tämän. 670 00:28:59,540 --> 00:29:02,050 Tee hei-2. 671 00:29:02,050 --> 00:29:04,620 Saanen käyttää sitä uudelleen. hei-2 David. 672 00:29:04,620 --> 00:29:07,290 Näyttää siis siltä työskennellä täsmälleen samalla tavalla. 673 00:29:07,290 --> 00:29:11,180 Mutta jos menen takaisin Valgrind ja uusinnassa että sama komento minun vastikään 674 00:29:11,180 --> 00:29:14,720 koonnut ohjelman, kirjoittamalla minun nimi kuin ennen - 675 00:29:14,720 --> 00:29:15,370 kiva. 676 00:29:15,370 --> 00:29:16,760 Heap yhteenveto - 677 00:29:16,760 --> 00:29:17,740 käytössä exit - 678 00:29:17,740 --> 00:29:19,370 nolla tavua nolla lohkot. 679 00:29:19,370 --> 00:29:21,840 Ja tämä on erittäin mukava, kaikki pino lohkot vapautettiin. 680 00:29:21,840 --> 00:29:23,480 Ei vuotoja ovat mahdollisia. 681 00:29:23,480 --> 00:29:27,200 >> Joten tulossa, eikä Harjoitus 4, mutta Harjoitus 5, tutkintaan 682 00:29:27,200 --> 00:29:30,740 ja eteenpäin, tämäkin tulee mitta oikeellisuudesta oman 683 00:29:30,740 --> 00:29:33,630 ohjelma, onko sinulla tai ei ole muistivuotoja. 684 00:29:33,630 --> 00:29:36,900 Mutta onneksi ei vain voi järkeillä niiden kautta intuitiivisesti, joka 685 00:29:36,900 --> 00:29:40,430 on, luultavasti, helppo pieniä ohjelmia mutta vaikeampaa suurempien ohjelmien osalta 686 00:29:40,430 --> 00:29:43,860 Valgrind, niille suurempia ohjelmia, voi auttaa tunnistamaan 687 00:29:43,860 --> 00:29:45,360 erityinen ongelma. 688 00:29:45,360 --> 00:29:47,500 >> Mutta on toinenkin ongelma jotka voivat syntyä. 689 00:29:47,500 --> 00:29:51,245 Saanen avata tämän tiedoston täällä, joka on, jälleen, hieman yksinkertainen esimerkki. 690 00:29:51,245 --> 00:29:53,760 Mutta katsotaanpa keskittyä siihen, mitä tämä ohjelma ei. 691 00:29:53,760 --> 00:29:55,190 Tätä kutsutaan memory.c. 692 00:29:55,190 --> 00:29:58,380 Lähetämme tämän myöhemmin tänään zip nykypäivän lähdekoodia. 693 00:29:58,380 --> 00:30:01,610 Ja huomaa, että minulla on toiminto nimeltään f, jossa ei argumentteja ja 694 00:30:01,610 --> 00:30:02,800 palauttaa mitään. 695 00:30:02,800 --> 00:30:07,240 Linjassa 20, olen ilmeisesti julistamisesta osoitin int ja sen hakeminen x. 696 00:30:07,240 --> 00:30:09,570 Olen osoitetaan on paluu arvo malloc. 697 00:30:09,570 --> 00:30:14,590 Ja vain olla selvää, kuinka monta tavua am Olen luultavasti tulossa takaisin malloc 698 00:30:14,590 --> 00:30:17,080 tässä tilanteessa? 699 00:30:17,080 --> 00:30:18,040 >> Luultavasti 40. 700 00:30:18,040 --> 00:30:18,840 Mistä saat että vuodesta? 701 00:30:18,840 --> 00:30:22,410 No, jos muistatte, että int on usein 4 tavua, ainakin se on 702 00:30:22,410 --> 00:30:25,110 laite, 10 kertaa 4 on ilmeisesti 40. 703 00:30:25,110 --> 00:30:28,920 Joten malloc on palaamassa osoite kimpale muisti ja varastointia että 704 00:30:28,920 --> 00:30:30,800 käsitellä lopulta x. 705 00:30:30,800 --> 00:30:32,570 Joten on selvää, mitä sitten tapahtuu? 706 00:30:32,570 --> 00:30:34,990 No, anna minun vaihtaa takaisin meidän kuva täällä. 707 00:30:34,990 --> 00:30:38,150 Saanen ei vain vetää pohjaan minun tietokoneen muistiin, anna minun mennä eteenpäin ja 708 00:30:38,150 --> 00:30:42,990 piirtää koko suorakulmion edustaa kaikkia minun RAM. 709 00:30:42,990 --> 00:30:44,790 >> Me sanomme, että pinon on pohjassa. 710 00:30:44,790 --> 00:30:47,010 Ja siellä on teksti segmentin alustamatonta. 711 00:30:47,010 --> 00:30:49,880 Mutta olen juuri menossa abstrakti niitä muita asioita pois kuin piste, piste piste. 712 00:30:49,880 --> 00:30:53,470 Olen juuri menossa viitata tähän kuin kasan huipulla. 713 00:30:53,470 --> 00:30:57,070 Ja sitten alaosassa tämän kuvan, edustamaan tärkein, aion 714 00:30:57,070 --> 00:30:59,880 antaa se viipaleiksi muisti pinoon. 715 00:30:59,880 --> 00:31:03,150 F, aion antaa sille siivu muistia pinoon. 716 00:31:03,150 --> 00:31:05,140 Nyt sain kuulla minun lähdekoodi uudelleen. 717 00:31:05,140 --> 00:31:07,170 Mitkä ovat paikallisia muuttujia tärkein? 718 00:31:07,170 --> 00:31:10,710 Ilmeisesti mitään, niin että viipale on tehokkaasti tyhjä tai ei edes niin suuri 719 00:31:10,710 --> 00:31:11,600 koska olen laatinut sen. 720 00:31:11,600 --> 00:31:15,730 Mutta f, minulla on paikallinen muuttuja, jota kutsutaan x. 721 00:31:15,730 --> 00:31:20,410 Joten aion mennä eteenpäin ja antaa f kimpale muisti, kutsuen sitä x. 722 00:31:20,410 --> 00:31:24,680 >> Ja nyt malloc 10 kertaa 4, Joten malloc 40, jossa tuo 723 00:31:24,680 --> 00:31:25,430 muisti tulee? 724 00:31:25,430 --> 00:31:27,530 Olemme ole piirretty kuva näin ennen. 725 00:31:27,530 --> 00:31:31,140 Mutta Oletetaan, että se on tehokkaasti tulevat tänne, niin yksi, 726 00:31:31,140 --> 00:31:33,170 kaksi, kolme, neljä, viisi. 727 00:31:33,170 --> 00:31:34,680 Ja nyt minä tarvitsen 40 näistä. 728 00:31:34,680 --> 00:31:37,540 Joten minä vain tehdä piste, piste, piste ehdottaa että on vielä enemmän muistia 729 00:31:37,540 --> 00:31:39,350 palaamassa kasaan. 730 00:31:39,350 --> 00:31:40,710 Nyt mitä osoite? 731 00:31:40,710 --> 00:31:42,620 Valitaan meidän mielivaltainen käsitellä kuten aina - 732 00:31:42,620 --> 00:31:46,310 Ox123, vaikka se on luultavasti olla jotain aivan muuta. 733 00:31:46,310 --> 00:31:50,420 Se osoitteen ensimmäisen tavun muistin, että olen pyytänyt malloc varten. 734 00:31:50,420 --> 00:31:53,630 >> Joten lyhyt, kun linja 20 suorittaa, mikä on kirjaimellisesti 735 00:31:53,630 --> 00:31:57,170 tallennettu x täällä? 736 00:31:57,170 --> 00:31:58,730 Ox123. 737 00:31:58,730 --> 00:32:00,370 Ox123. 738 00:32:00,370 --> 00:32:01,550 Ja Ox on mielenkiinnoton. 739 00:32:01,550 --> 00:32:03,200 Se vain tarkoittaa tässä heksadesimaalinumero. 740 00:32:03,200 --> 00:32:06,490 Mutta mitä Tärkeintä on, että mitä olen myymälä ja x, joka on paikallinen muuttuja. 741 00:32:06,490 --> 00:32:10,260 Mutta sen tietotyyppi jälleen on osoite int. 742 00:32:10,260 --> 00:32:12,710 No, aion tallentaa Ox123. 743 00:32:12,710 --> 00:32:16,610 Mutta jälleen kerran, jos se on hieman liian monimutkainen tarpeettomasti, jos en selaa 744 00:32:16,610 --> 00:32:21,490 takaisin, voimme abstrakti tätä pois melko kohtuullisesti ja vain sanoa, että x on 745 00:32:21,490 --> 00:32:23,910 osoitin, että murikka muistia. 746 00:32:23,910 --> 00:32:24,070 >> OK. 747 00:32:24,070 --> 00:32:26,230 Nyt kysymys käsillä on seuraava - 748 00:32:26,230 --> 00:32:29,910 linja 21, se kääntyy pois, on buginen. 749 00:32:29,910 --> 00:32:31,160 Miksi? 750 00:32:31,160 --> 00:32:34,890 751 00:32:34,890 --> 00:32:36,930 >> Anteeksi? 752 00:32:36,930 --> 00:32:38,640 Se ei ole - 753 00:32:38,640 --> 00:32:40,390 sanoa, että jälleen kerran. 754 00:32:40,390 --> 00:32:41,240 No, se ei ole ilmainen. 755 00:32:41,240 --> 00:32:42,350 Niin, että toinen vaan. 756 00:32:42,350 --> 00:32:45,000 Joten on olemassa yksi muu vaan nimenomaan rivillä 21. 757 00:32:45,000 --> 00:32:49,480 758 00:32:49,480 --> 00:32:50,040 >> Täsmälleen. 759 00:32:50,040 --> 00:32:54,980 Tämä yksinkertainen riviä koodia on vain puskurin ylivuoto, puskurin ylivuoto. 760 00:32:54,980 --> 00:32:57,050 Puskuri tarkoittaa vain kimpale muisti. 761 00:32:57,050 --> 00:33:01,520 Mutta kimpale muisti on kooltaan 10, 10, kokonaisluvut, mikä tarkoittaa, että jos me 762 00:33:01,520 --> 00:33:05,350 indeksinä se käyttäen syntaktinen sokeri array notaatio, neliö 763 00:33:05,350 --> 00:33:09,220 suluissa, sinulla on mahdollisuus saada x teline 0 x teline 1 x, 764 00:33:09,220 --> 00:33:10,390 kiinnike piste, piste, piste. 765 00:33:10,390 --> 00:33:13,270 x kiinnike 9 on suurin yksi. 766 00:33:13,270 --> 00:33:17,680 Joten jos teen x kiinnike 10, jossa Olen oikeastaan ​​menossa muistia? 767 00:33:17,680 --> 00:33:19,120 >> No, jos minulla on 10 int - 768 00:33:19,120 --> 00:33:21,070 nyt todella tasapelin Näiden täällä. 769 00:33:21,070 --> 00:33:22,700 Tämä oli siis ensimmäinen viisi. 770 00:33:22,700 --> 00:33:24,660 Tässä viisi muuta ints. 771 00:33:24,660 --> 00:33:29,580 Joten x teline 0 on täällä. x kiinnike 1 on tässä. x kiinnike 9 on täällä. x kiinnike 772 00:33:29,580 --> 00:33:37,960 10 on täällä, mikä tarkoittaa, kerron, Kohtaan 21 tietokoneen laittaa 773 00:33:37,960 --> 00:33:39,400 numero missä? 774 00:33:39,400 --> 00:33:42,010 Numero 0, jos? 775 00:33:42,010 --> 00:33:43,380 No, se on 0, kyllä. 776 00:33:43,380 --> 00:33:45,460 Mutta juuri se, että sen 0 on eräänlainen sattuma. 777 00:33:45,460 --> 00:33:47,140 Se voisi olla useita 50, kaikki me välitämme. 778 00:33:47,140 --> 00:33:50,480 Mutta yritämme laittaa se x kiinnike 10, joka on, jos tämä 779 00:33:50,480 --> 00:33:53,700 kysymysmerkki on laadittu, joka ei ole hyvä asia. 780 00:33:53,700 --> 00:33:57,070 Tämä ohjelma saattaa hyvinkin kaatua seurauksena. 781 00:33:57,070 --> 00:33:59,400 >> Nyt mennään eteenpäin ja nähdä, jos tämä on, todellakin, mitä tapahtuu. 782 00:33:59,400 --> 00:34:02,600 Tee muistiin, koska tiedosto kutsutaan memory.c. 783 00:34:02,600 --> 00:34:05,950 Mennään eteenpäin ja ajaa ohjelman muistiin. 784 00:34:05,950 --> 00:34:08,239 Joten meillä oli onnea, todella, miltä se näyttää. 785 00:34:08,239 --> 00:34:09,340 Meillä kävi tuuri. 786 00:34:09,340 --> 00:34:11,060 Mutta katsotaanpa nyt ajaa Valgrind. 787 00:34:11,060 --> 00:34:14,170 Ensi silmäyksellä, minun ohjelma saattaa näyttävät olevan täysin oikeassa. 788 00:34:14,170 --> 00:34:18,010 Mutta haluan ajaa Valgrind kanssa - Vuoto-check vastaa kokonaisuudessaan muistiin. 789 00:34:18,010 --> 00:34:20,110 >> Ja nyt kun käytän tätä - 790 00:34:20,110 --> 00:34:21,030 mielenkiintoinen. 791 00:34:21,030 --> 00:34:26,800 Virheellinen kirjoittaa kooltaan 4: line 21 memory.c. 792 00:34:26,800 --> 00:34:29,284 Line 21 memory.c on kumpi? 793 00:34:29,284 --> 00:34:30,340 Oh, mielenkiintoinen. 794 00:34:30,340 --> 00:34:31,080 Mutta hetkinen. 795 00:34:31,080 --> 00:34:32,389 Koko 4, mitä se viittaa? 796 00:34:32,389 --> 00:34:34,969 Tein vain yhden kirjoittaa, mutta se on kooltaan 4. 797 00:34:34,969 --> 00:34:36,889 Miksi se on 4? 798 00:34:36,889 --> 00:34:39,280 Se on koska se on int, joka on jälleen neljä tavua. 799 00:34:39,280 --> 00:34:42,510 Joten Valgrind löytyi vika, joka olen, vilkaisi minun koodi, ei. 800 00:34:42,510 --> 00:34:45,040 Ja ehkä sinun TF piti tai ei. 801 00:34:45,040 --> 00:34:48,469 Mikä Mutta Valgrind varmasti todennut, että olemme tehneet virheen siellä, vaikka 802 00:34:48,469 --> 00:34:52,719 vaikka meillä oli onnea, ja tietokone päätti, eh, en aio kaatua 803 00:34:52,719 --> 00:34:57,470 vain siksi, kosketti yhden tavun, yksi int verran muistia, jota et ole 804 00:34:57,470 --> 00:34:58,550 itse omista. 805 00:34:58,550 --> 00:35:00,380 >> No, mitä muuta on buginen täällä. 806 00:35:00,380 --> 00:35:01,180 Osoite - 807 00:35:01,180 --> 00:35:03,190 tämä on hullu näköinen osoite heksadesimaali. 808 00:35:03,190 --> 00:35:06,890 Se tarkoittaa vain sitä jossain keko nolla tavua jälkeen lohkon koko 40 809 00:35:06,890 --> 00:35:07,620 on kohdistettu. 810 00:35:07,620 --> 00:35:10,610 Saanen loitontaa tänne ja katso jos Tämä on hieman enemmän hyötyä. 811 00:35:10,610 --> 00:35:11,410 Mielenkiintoista. 812 00:35:11,410 --> 00:35:15,600 40 tavua menettänyt lopullisesti menetys ennätys 1 1. 813 00:35:15,600 --> 00:35:17,840 Jälleen enemmän sanoja kuin on hyödyksi. 814 00:35:17,840 --> 00:35:21,350 Mutta perustuu korostettu linjat, jos minun pitäisi varmaan keskityn 815 00:35:21,350 --> 00:35:24,070 huomiota vielä bugi? 816 00:35:24,070 --> 00:35:26,570 Näyttää linjan 20 memory.c. 817 00:35:26,570 --> 00:35:30,990 >> Joten jos menemme takaisin linja 20, joka on joka ymmärsitte. 818 00:35:30,990 --> 00:35:33,030 Ja se ei ole välttämättä buginen. 819 00:35:33,030 --> 00:35:35,160 Mutta meillä on tämä perui vaikutuksia. 820 00:35:35,160 --> 00:35:38,790 Joten miten voin korjata ainakin yksi niistä virheistä? 821 00:35:38,790 --> 00:35:42,240 Mitä voisin tehdä, kun linja 21? 822 00:35:42,240 --> 00:35:47,110 Voisin tehdä ilmaiseksi x, niin on antaa takaisin, että muisti. 823 00:35:47,110 --> 00:35:49,230 Ja miten korjata tämä virhe? 824 00:35:49,230 --> 00:35:52,120 Haluan ehdottomasti mennä ole kauempana kuin 0. 825 00:35:52,120 --> 00:35:53,670 Joten anna minun yrittää uudelleen suorittaa tämän. 826 00:35:53,670 --> 00:35:56,080 Anteeksi, ehdottomasti mennä ole kauempana kuin 9. 827 00:35:56,080 --> 00:35:57,510 Tee muistiin. 828 00:35:57,510 --> 00:36:00,650 Saanen uusintana Valgrind isossa ikkunassa. 829 00:36:00,650 --> 00:36:01,580 Ja nyt näyttää. 830 00:36:01,580 --> 00:36:02,250 Nice. 831 00:36:02,250 --> 00:36:03,270 Kaikki kasaan korttelin vapautettiin. 832 00:36:03,270 --> 00:36:04,270 Ei vuotoja ovat mahdollisia. 833 00:36:04,270 --> 00:36:07,520 Ja ylhäällä täällä, ei ole mitään mainintaa enempää kelpaa oikealle. 834 00:36:07,520 --> 00:36:09,820 >> Vain saada ahne, ja katsotaanpa onko jokin toinen esittelyn 835 00:36:09,820 --> 00:36:11,050 ei mene niin tarkoitettu - 836 00:36:11,050 --> 00:36:12,560 En onnekas hetki sitten. 837 00:36:12,560 --> 00:36:15,530 Ja se, että tämä on 0 on ehkä tarpeettomasti harhaanjohtava. 838 00:36:15,530 --> 00:36:20,650 Haluan vain tehdä 50, melko sattumanvaraisesti lukumäärä, merkki muisti dot slash muisti - 839 00:36:20,650 --> 00:36:21,410 silti onnekas. 840 00:36:21,410 --> 00:36:22,510 Mitään ei kaatuu. 841 00:36:22,510 --> 00:36:26,150 Taitaa vain tehdä jotain todella typerää, enkä 100. 842 00:36:26,150 --> 00:36:30,360 Saanen remake muistia, dot slash muisti - 843 00:36:30,360 --> 00:36:31,075 onnisti jälleen. 844 00:36:31,075 --> 00:36:32,800 Entä 1000? 845 00:36:32,800 --> 00:36:35,370 ints jälkeen suurin piirtein missä minun pitäisi olla? 846 00:36:35,370 --> 00:36:37,410 Tee muisti - 847 00:36:37,410 --> 00:36:38,570 hitto vieköön. 848 00:36:38,570 --> 00:36:39,920 >> [Naurua] 849 00:36:39,920 --> 00:36:41,270 >> OK. 850 00:36:41,270 --> 00:36:43,920 Älkäämme pelleillä enää. 851 00:36:43,920 --> 00:36:45,120 Uusintana muistiin. 852 00:36:45,120 --> 00:36:45,840 Siellä mennään. 853 00:36:45,840 --> 00:36:46,410 Selvä. 854 00:36:46,410 --> 00:36:52,500 Ilmeisesti sinulla indeksi 100000 ints pidemmälle kuin mihin olet olisi pitänyt 855 00:36:52,500 --> 00:36:54,410 muisti, pahoja asioita tapahtuu. 856 00:36:54,410 --> 00:36:56,430 Joten tämä ei tietenkään ole kova, nopea sääntö. 857 00:36:56,430 --> 00:36:58,190 Minulla oli sellainen käyttäen oikeudenkäyntiä ja virhe sinne. 858 00:36:58,190 --> 00:37:02,230 Mutta tämä johtuu siitä, pitkän tarinan lyhyesti, tietokoneen muistiin on myös jaettu 859 00:37:02,230 --> 00:37:03,580 näitä asioita kutsutaan segmenteillä. 860 00:37:03,580 --> 00:37:07,260 Ja joskus, tietokone todella on antanut sinulle hieman enemmän muistia 861 00:37:07,260 --> 00:37:08,400 kuin pyydät. 862 00:37:08,400 --> 00:37:12,170 Mutta tehokkuutta, se on vain helpompi saada lisää muistia, mutta vain kertoa 863 00:37:12,170 --> 00:37:13,780 että saat osan siitä. 864 00:37:13,780 --> 00:37:16,370 >> Ja jos olet onnekas joskus, siksi ehkä voi koskettaa 865 00:37:16,370 --> 00:37:17,795 muisti, joka ei kuulu sinulle. 866 00:37:17,795 --> 00:37:21,860 Sinulla ei ole takeita siitä, että mitä arvoa laitat siellä pysyy siellä, koska 867 00:37:21,860 --> 00:37:25,080 tietokone edelleen sitä mieltä, se ei ole sinun, mutta se ei välttämättä mene 868 00:37:25,080 --> 00:37:29,910 lyödä toisen segmentin muistin tietokoneen ja aiheuttaa virheellä 869 00:37:29,910 --> 00:37:31,710 tämä täällä. 870 00:37:31,710 --> 00:37:32,060 Selvä. 871 00:37:32,060 --> 00:37:37,240 Kaikki kysymykset sitten muisti? 872 00:37:37,240 --> 00:37:37,590 >> Selvä. 873 00:37:37,590 --> 00:37:40,610 Katsotaanpa katsomaan täältä, niin kello jotain olemme saaneet varten 874 00:37:40,610 --> 00:37:48,361 myönnetty jo jonkin aikaa, mikä on tässä tiedosto nimeltä cs50.h. 875 00:37:48,361 --> 00:37:49,420 Joten tämä on tiedosto. 876 00:37:49,420 --> 00:37:51,130 Nämä ovat vain koko joukko Huomautusten ylös. 877 00:37:51,130 --> 00:37:53,900 Ja olet ehkä pohtinut tätä, jos olet pisti ympäriinsä laitteen. 878 00:37:53,900 --> 00:37:57,000 Mutta käy ilmi, että koko ajan, kun meillä oli tapana käyttää merkkijonon 879 00:37:57,000 --> 00:38:01,130 synonyymi, keinoja, joilla voimme julistaa että synonyymi oli tämän 880 00:38:01,130 --> 00:38:03,990 Hakusanalla typedef, tyyppi määritelmä. 881 00:38:03,990 --> 00:38:07,500 Ja me lähinnä sanomalla, tehdä merkkijono synonyymi char tähden. 882 00:38:07,500 --> 00:38:11,190 , Että keinoja, joilla pino luoneet nämä apupyörät tunnetaan 883 00:38:11,190 --> 00:38:12,040 merkkijono. 884 00:38:12,040 --> 00:38:14,830 >> Nyt täällä on vain prototyyppi varten getchar. 885 00:38:14,830 --> 00:38:17,350 Olemme ehkä nähnyt sitä ennen, mutta se on todellakin mitä se tekee. getchar 886 00:38:17,350 --> 00:38:19,070 ei ota argumentteja, palauttaa char. 887 00:38:19,070 --> 00:38:21,340 getdouble ei ota argumentteja, palauttaa kaksinkertainen. 888 00:38:21,340 --> 00:38:24,440 getfloat vie argumentteja ei palaa kellua, ja niin edelleen. 889 00:38:24,440 --> 00:38:27,270 getint on täällä. getlonglong on täällä. 890 00:38:27,270 --> 00:38:28,820 Ja getString on täällä. 891 00:38:28,820 --> 00:38:29,420 Ja siinä se. 892 00:38:29,420 --> 00:38:33,080 Tämä violetti linja on toinen esikäsittelijään koska sillä 893 00:38:33,080 --> 00:38:35,550 hashtag alussa sen. 894 00:38:35,550 --> 00:38:35,870 >> Selvä. 895 00:38:35,870 --> 00:38:38,380 Joten nyt haluan mennä cs50.c. 896 00:38:38,380 --> 00:38:40,400 Ja emme puhu liian pitkään tätä. 897 00:38:40,400 --> 00:38:43,280 Mutta antaa sinulle Hanko mitä jatkunut koko tämän 898 00:38:43,280 --> 00:38:46,434 aikaa, anna minun mennä - 899 00:38:46,434 --> 00:38:48,250 Tehdään getchar. 900 00:38:48,250 --> 00:38:51,050 Joten getchar on enimmäkseen kommentteja. 901 00:38:51,050 --> 00:38:52,060 Mutta se näyttää tältä. 902 00:38:52,060 --> 00:38:54,800 Joten tämä on todellinen funktio getchar että olemme 903 00:38:54,800 --> 00:38:56,055 itsestään selvänä olemassa. 904 00:38:56,055 --> 00:38:59,370 Ja vaikka emme ole käyttää tätä että usein, jos koskaan, se on ainakin 905 00:38:59,370 --> 00:39:00,470 suhteellisen yksinkertainen. 906 00:39:00,470 --> 00:39:02,580 Joten se kannattaa ottaa vilkaista täällä. 907 00:39:02,580 --> 00:39:06,540 >> Joten getchar on loputon silmukka, tarkoituksella niin ilmeisesti. 908 00:39:06,540 --> 00:39:10,050 Se kutsuu sitten - ja tämä on tavallaan kiva uudelleenkäyttö koodi me itse kirjoitti. 909 00:39:10,050 --> 00:39:11,220 Se kehottaa getString. 910 00:39:11,220 --> 00:39:12,460 Koska mitä se tarkoittaa saada char? 911 00:39:12,460 --> 00:39:14,730 No, saatat myös yrittää saada koko linjan tekstin käyttäjän ja 912 00:39:14,730 --> 00:39:16,940 sitten katsokaa yksi näistä merkeistä. 913 00:39:16,940 --> 00:39:19,170 Linjassa 60, täällä on vähän vähän järki tarkistaa. 914 00:39:19,170 --> 00:39:21,610 Jos getString palasi null, älkäämme edetä. 915 00:39:21,610 --> 00:39:22,820 Jokin meni pieleen. 916 00:39:22,820 --> 00:39:28,120 >> Nyt tämä on hieman ärsyttävää, mutta tavanomaista C. char max luultavasti 917 00:39:28,120 --> 00:39:29,960 edustaa mitä vain perustuu nimensä? 918 00:39:29,960 --> 00:39:31,670 Se on jatkuvaa. 919 00:39:31,670 --> 00:39:36,040 Se on kuin numeerinen arvo Suurin char voit edustavat kanssa 920 00:39:36,040 --> 00:39:40,370 yksi purema, joka on luultavasti numero 255, joka on suurin numero 921 00:39:40,370 --> 00:39:42,720 edustaa kahdeksan bittiä, nollasta alkaen. 922 00:39:42,720 --> 00:39:47,460 Joten olen käyttää tätä, on tämä toiminto, kun Kirjoitan tätä koodia, vain siksi, 923 00:39:47,460 --> 00:39:51,753 jos jokin menee pieleen getchar mutta sen tarkoitus elämässä on palauttaa 924 00:39:51,753 --> 00:39:54,830 char, sinun täytyy jotenkin pystyä viestittää käyttäjälle, että 925 00:39:54,830 --> 00:39:55,840 jokin meni pieleen. 926 00:39:55,840 --> 00:39:56,970 Emme voi palata null. 927 00:39:56,970 --> 00:39:58,480 On käynyt ilmi, että null on osoitin. 928 00:39:58,480 --> 00:40:01,030 Ja vielä, getchar on palata merkkiä. 929 00:40:01,030 --> 00:40:04,760 >> Joten yleissopimuksen, jos jokin menee väärin, on sinun, ohjelmoija, tai 930 00:40:04,760 --> 00:40:08,160 Tässä tapauksessa minua kirjastossa, minulla oli vain päättää mielivaltaisesti, jos 931 00:40:08,160 --> 00:40:12,230 jokin menee pieleen, aion palata numero 255, joka on todella 932 00:40:12,230 --> 00:40:17,240 tarkoittaa, ettemme voi, käyttäjä voi kirjoittaa merkki edustaa 933 00:40:17,240 --> 00:40:21,410 numero 255, koska meillä oli varastaa sen kuten ns Sentinel arvo 934 00:40:21,410 --> 00:40:23,410 ovat ongelma. 935 00:40:23,410 --> 00:40:27,010 Nyt on käynyt ilmi, että merkki 255 ei ole jotain, voit kirjoittaa siitä 936 00:40:27,010 --> 00:40:28,380 näppäimistön, joten se ei ole iso juttu. 937 00:40:28,380 --> 00:40:30,910 Käyttäjä ei huomaa, että Olen varastanut tämän merkin. 938 00:40:30,910 --> 00:40:34,620 Mutta jos joskus nähdä miehen sivut tietokonejärjestelmä joitakin viittauksia 939 00:40:34,620 --> 00:40:38,560 kaikki korkit jatkuvasti näin, että sanoo, tapauksissa virhe tämä jatkuva voimin 940 00:40:38,560 --> 00:40:42,720 palautetaan, että kaikki joidenkin ihmisen teki vuotta sitten oli mielivaltaisesti päätettiin 941 00:40:42,720 --> 00:40:45,680 Palauta tämä erityinen arvo ja kutsuvat sitä jatkuvasti, jos 942 00:40:45,680 --> 00:40:46,840 jotain menee pieleen. 943 00:40:46,840 --> 00:40:48,580 >> Nyt taika tapahtuu täällä. 944 00:40:48,580 --> 00:40:52,600 Ensinnäkin, olen julistaa linjassa 67 kaksi merkkiä, C1 ja C2. 945 00:40:52,600 --> 00:40:57,080 Ja sitten linja 68, siellä on todella koodiriviä, että tuo mieleen 946 00:40:57,080 --> 00:41:01,140 ystävämme printf, koska se ei ole prosenttia Cs lainausmerkkeihin. 947 00:41:01,140 --> 00:41:06,490 Mutta huomaa, mitä täällä tapahtuu. sscanf tarkoittaa string scan - 948 00:41:06,490 --> 00:41:11,690 tarkoittaa skannata alustettu string, ergo sscanf. 949 00:41:11,690 --> 00:41:12,590 Mitä se tarkoittaa? 950 00:41:12,590 --> 00:41:16,310 Se tarkoittaa ohitat sscanf merkkijono. 951 00:41:16,310 --> 00:41:18,420 Ja linja on mitä käyttäjätyyppeihin sisään 952 00:41:18,420 --> 00:41:23,520 Ohitat sscanf muotomerkkijonoa kuten Tämän joka kertoo scanf mitä 953 00:41:23,520 --> 00:41:25,870 Oletko toivoen käyttäjä on kirjoittanut sisään 954 00:41:25,870 --> 00:41:29,730 Sitten siirtää-osoitteissa kahden paloina muistia, tässä tapauksessa 955 00:41:29,730 --> 00:41:31,150 koska minulla on kaksi paikkamerkeillä. 956 00:41:31,150 --> 00:41:34,610 Joten aion antaa sille osoite C1 ja osoite C2. 957 00:41:34,610 --> 00:41:37,700 >> Ja muistaa, että annat toiminto osoite joitakin muuttuja, mitä 958 00:41:37,700 --> 00:41:38,950 implisiittisesti? 959 00:41:38,950 --> 00:41:41,400 960 00:41:41,400 --> 00:41:45,050 Mitä että toiminto tehdä seurauksena antaa sen osoitteen 961 00:41:45,050 --> 00:41:48,170 muuttuja, toisin kuin muuttuja itse? 962 00:41:48,170 --> 00:41:49,450 Se voi muuttaa sitä, eikö? 963 00:41:49,450 --> 00:41:53,250 Jos sinulla oli joku karttaa fyysistä osoite, he voivat mennä sinne ja tehdä 964 00:41:53,250 --> 00:41:54,750 mitä he haluavat kyseisessä osoitteessa. 965 00:41:54,750 --> 00:41:55,800 Sama ajatus täällä. 966 00:41:55,800 --> 00:41:59,950 Jos me siirtyy sscanf, osoite kahden paloina muistia, jopa näitä pieniä 967 00:41:59,950 --> 00:42:03,585 pikku paloina muistia, C1 ja C2, mutta kerromme sen osoitteen niistä, 968 00:42:03,585 --> 00:42:05,170 sscanf voi muuttaa sitä. 969 00:42:05,170 --> 00:42:08,530 >> Joten sscanf n tarkoitus elämässä, jos luemme man-sivulta, on lukea, mitä 970 00:42:08,530 --> 00:42:13,420 käyttäjän kirjoitettu, toivoa, että käyttäjän kirjoitetaan merkki ja ehkä 971 00:42:13,420 --> 00:42:16,470 toinen hahmo, ja mitä käyttäjä kirjoitetaan, ensimmäinen merkki menee 972 00:42:16,470 --> 00:42:19,310 täällä, toinen merkki menee täällä. 973 00:42:19,310 --> 00:42:22,470 Nyt, kuten syrjään, tämä, ja te vain tiedä tätä tulleella dokumentaatio, 974 00:42:22,470 --> 00:42:25,570 että laitoin tyhjän siellä tarkoittaa vain sitä, että en välitä, jos 975 00:42:25,570 --> 00:42:28,440 käyttäjä painaa välilyöntiä muutaman kertaa ennen kuin hän tekee 976 00:42:28,440 --> 00:42:30,400 merkki, aion sivuuttaa kaikki valkoinen tila. 977 00:42:30,400 --> 00:42:32,510 Niin, että tiedän asiakirjat. 978 00:42:32,510 --> 00:42:36,570 >> Se, että on olemassa toinen% c jälkeen valkoinen tila on todella 979 00:42:36,570 --> 00:42:37,410 tahallinen. 980 00:42:37,410 --> 00:42:41,190 Haluan pystyä havaitsemaan, jos käyttäjä mokasi tai eivät toimineet yhteistyössä. 981 00:42:41,190 --> 00:42:45,630 Minä toivon, että käyttäjä vain kirjoittaa yhden merkin, joten toivon 982 00:42:45,630 --> 00:42:50,640 että sscanf vain aio palata arvo 1, koska, jälleen, jos luen 983 00:42:50,640 --> 00:42:55,400 asiakirjat, sscanf n tarkoitus elämä on palata määrä 984 00:42:55,400 --> 00:42:59,170 muuttujat, jotka olivat täynnä jossa käyttäjä syöttää. 985 00:42:59,170 --> 00:43:02,270 >> Kuljin kahden muuttujan osoitteet, C1 ja C2. 986 00:43:02,270 --> 00:43:06,420 Toivon kuitenkin, että vain yksi ne kuolee, koska jos sscanf 987 00:43:06,420 --> 00:43:11,130 palaa 2, mikä oletettavasti implisiittisesti loogisesti? 988 00:43:11,130 --> 00:43:14,600 Että käyttäjä ei anna minulle yksi merkki kuten sanoin hänelle. 989 00:43:14,600 --> 00:43:17,860 He luultavasti kirjoitetun vähintään kaksi merkkiä. 990 00:43:17,860 --> 00:43:22,430 Joten jos en sen sijaan ei ollut toista % C, sain juuri yhden, joka 991 00:43:22,430 --> 00:43:25,370 suoraan sanottuna olisi selkeämpi lähestymistapa, mielestäni ensi silmäyksellä, 992 00:43:25,370 --> 00:43:30,220 et aio pystyä havaitsemaan jos käyttäjä on antaa sinulle enemmän 993 00:43:30,220 --> 00:43:31,780 tulo kuin todellisuudessa halusi. 994 00:43:31,780 --> 00:43:34,100 Joten tämä on implisiittinen muoto Virheen tarkistus. 995 00:43:34,100 --> 00:43:35,640 >> Mutta huomaa, mitä teen täällä. 996 00:43:35,640 --> 00:43:39,970 Kun olen varma, että käyttäjä antoi minulle yhden luonne, olen vapaa linja, tekee 997 00:43:39,970 --> 00:43:44,450 vastakohta getString, joka puolestaan käyttää malloc, ja sitten palaan 998 00:43:44,450 --> 00:43:51,030 C1-merkki, että toivoin Käyttäjä jos ja vain jos. 999 00:43:51,030 --> 00:43:54,680 Niin nopeasti vilahti vain, mutta kysyttävää getchar? 1000 00:43:54,680 --> 00:43:57,450 1001 00:43:57,450 --> 00:43:59,590 Tulemme taas joidenkin toisten. 1002 00:43:59,590 --> 00:44:03,770 >> No, anna minun mennä eteenpäin ja tehdä tämän - Oletetaan nyt, vain motivoida 1003 00:44:03,770 --> 00:44:08,910 keskustelua viikossa plus aika, tämä on tiedosto nimeltä structs.h. 1004 00:44:08,910 --> 00:44:11,440 Ja vielä, tämä on vain maku jotain, joka on edessämme. 1005 00:44:11,440 --> 00:44:13,090 Mutta huomaa, että paljon Tämän on kommentteja. 1006 00:44:13,090 --> 00:44:17,440 Joten haluan korostaa vain Mielenkiintoisin osa nyt. 1007 00:44:17,440 --> 00:44:18,020 typedef - 1008 00:44:18,020 --> 00:44:19,700 siellä on, että sama avainsana uudelleen. 1009 00:44:19,700 --> 00:44:23,100 typedef käytämme julistaa merkkijono erityisenä tietotyyppi. 1010 00:44:23,100 --> 00:44:27,490 Voit käyttää typedef luoda uusi tietotyypit, että ei ollut olemassa 1011 00:44:27,490 --> 00:44:28,570 C keksittiin. 1012 00:44:28,570 --> 00:44:32,520 Esimerkiksi int mukana C. char mukana C. kaksinkertainen mukana C. Mutta 1013 00:44:32,520 --> 00:44:34,000 ei ole mitään käsitettä opiskelija. 1014 00:44:34,000 --> 00:44:37,230 Ja silti se olisi aika hyvä olla osaa kirjoittaa ohjelma, joka tallentaa 1015 00:44:37,230 --> 00:44:40,440 muuttujaan, opiskelijan henkilötunnus, nimensä, ja heidän talonsa. 1016 00:44:40,440 --> 00:44:42,890 Toisin sanoen, kolme kappaletta tietojen, kuten int ja 1017 00:44:42,890 --> 00:44:44,420 merkkijono ja toinen merkkijono. 1018 00:44:44,420 --> 00:44:48,220 >> Kanssa typedef, mikä on melko voimakas tästä ja avainsanan sturct varten 1019 00:44:48,220 --> 00:44:53,660 rakenne, sinä, ohjelmoija vuonna 2013, voi itse määritellä omat 1020 00:44:53,660 --> 00:44:57,530 tietotyypit, että ei ollut olemassa vuoden sitten, mutta jotka sopivat tarkoitukseen. 1021 00:44:57,530 --> 00:45:01,910 Ja niin täällä, linjat 13 kautta 19, olemme julistaa uuden tietotyypin, kuten 1022 00:45:01,910 --> 00:45:04,320 int, mutta kutsuen sitä opiskelija. 1023 00:45:04,320 --> 00:45:09,310 Ja sisällä tämä muuttuja on menossa on kolme asiaa - int, string, 1024 00:45:09,310 --> 00:45:09,930 ja merkkijono. 1025 00:45:09,930 --> 00:45:13,040 Joten voit ajatella mitä todella täällä on tapahtunut, vaikka tämä on 1026 00:45:13,040 --> 00:45:17,160 hieman yksinkertaistaa tänään, Opiskelijan on lähinnä menossa 1027 00:45:17,160 --> 00:45:19,450 näyttää tältä. 1028 00:45:19,450 --> 00:45:22,580 Se tulee olemaan kimpale muistia tunnus, nimi 1029 00:45:22,580 --> 00:45:25,580 alalla, ja talon kenttään. 1030 00:45:25,580 --> 00:45:30,670 Ja pystymme käyttämään niitä paloina muistiin ja käyttää niitä seuraavasti. 1031 00:45:30,670 --> 00:45:38,870 >> Jos menen struct0.c, tässä suhteellisen pitkä, mutta sen jälkeen 1032 00:45:38,870 --> 00:45:42,630 kuvio, koodia, joka käyttää tätä uutta temppua. 1033 00:45:42,630 --> 00:45:45,790 Joten ensin haluan kiinnittää huomiota on mielenkiintoinen osat ylös. 1034 00:45:45,790 --> 00:45:49,670 Sharp määrittelee opiskelijat 3, vakuuttaa jatkuva kutsutaan opiskelijat ja antaa 1035 00:45:49,670 --> 00:45:53,450 se mielivaltaisesti numero 3, vain joten minulla on kolme oppilaat käyttävät 1036 00:45:53,450 --> 00:45:54,830 tämä ohjelma nyt. 1037 00:45:54,830 --> 00:45:55,960 Täältä tulee Main. 1038 00:45:55,960 --> 00:45:58,860 Ja huomaa, miten julistaa joukko opiskelijoita? 1039 00:45:58,860 --> 00:46:00,480 No, minä vain käyttää samaa syntaksia. 1040 00:46:00,480 --> 00:46:02,110 Sana opiskelija on tietenkin uusi. 1041 00:46:02,110 --> 00:46:04,790 Mutta opiskelija, luokka, kiinnike opiskelijoita. 1042 00:46:04,790 --> 00:46:06,720 >> Joten valitettavasti siellä on paljon käytetään uudelleen täältä. 1043 00:46:06,720 --> 00:46:07,660 Tämä on pelkkä numero. 1044 00:46:07,660 --> 00:46:09,040 Joten tämä on kuin sanoisi kolme. 1045 00:46:09,040 --> 00:46:11,430 Luokka on juuri sitä mitä haluan soittaa muuttuja. 1046 00:46:11,430 --> 00:46:12,840 Voisin kutsua sitä opiskelijoita. 1047 00:46:12,840 --> 00:46:15,880 Mutta luokka, tämä ei ole luokan olio Java sellainen tapa. 1048 00:46:15,880 --> 00:46:17,220 Se on vain opiskelijaryhmiä. 1049 00:46:17,220 --> 00:46:20,590 Ja tietotyyppi jokaisen elementin että matriisi on opiskelija. 1050 00:46:20,590 --> 00:46:23,040 Joten tämä on hieman erilainen ja sanoo jotain 1051 00:46:23,040 --> 00:46:25,250 näin, se on vain - 1052 00:46:25,250 --> 00:46:29,500 Sanon antaa minulle kolme opiskelijaa ja soittaa siihen array luokka. 1053 00:46:29,500 --> 00:46:29,800 >> Selvä. 1054 00:46:29,800 --> 00:46:30,680 Nyt täällä on neljä silmukka. 1055 00:46:30,680 --> 00:46:33,480 Tämä kaveri on tuttu - iterate nollasta jopa kolmella. 1056 00:46:33,480 --> 00:46:35,160 Ja tässä uusi pala syntaksin. 1057 00:46:35,160 --> 00:46:37,710 Ohjelma tulee kysymään minua, ihmisen, antaa sille opiskelija 1058 00:46:37,710 --> 00:46:39,200 ID, joka on int. 1059 00:46:39,200 --> 00:46:44,650 Ja tässä syntaksin, jolla voit tallentaa jotain ID kenttä 1060 00:46:44,650 --> 00:46:48,630 Sijainti luokan kiinnike I. Joten Tämä syntaksi ei ole uusi. 1061 00:46:48,630 --> 00:46:51,450 Tämä tarkoittaa vain sitä, anna minulle kahdeksas opiskelija luokassa. 1062 00:46:51,450 --> 00:46:52,940 Mutta tämä symboli on uusi. 1063 00:46:52,940 --> 00:46:56,320 Tähän asti olemme voi käyttää piste, ainakin koodia tässä. 1064 00:46:56,320 --> 00:47:01,490 Tämä tarkoittaa mennä struct tunnetaan opiskelija ja laittaa jotain siellä. 1065 00:47:01,490 --> 00:47:05,670 Samoin tässä seuraavalle riville 31, mene eteenpäin ja laittaa mitä käyttäjä kirjoittaa 1066 00:47:05,670 --> 00:47:10,530 nimityksen täällä ja mitä he tekevät talo, sama asia, mennä eteenpäin ja 1067 00:47:10,530 --> 00:47:13,230 laita se. talossa. 1068 00:47:13,230 --> 00:47:15,955 >> Joten mitä tämä ohjelma lopulta tehdä? 1069 00:47:15,955 --> 00:47:17,220 Näet pieni teaser siellä. 1070 00:47:17,220 --> 00:47:24,780 Anna minun mennä eteenpäin ja tekevät structs 0 dot slash struct 0, opiskelijan ID 1, 1071 00:47:24,780 --> 00:47:28,250 sanovat David Mather, opiskelijakortti 2. 1072 00:47:28,250 --> 00:47:32,070 Rob Kirkland, opiskelijakortti 3. 1073 00:47:32,070 --> 00:47:35,010 Lauren Leverit - 1074 00:47:35,010 --> 00:47:38,380 ja ainoa asia, että tämä ohjelma, joka on aivan täysin mielivaltaista, on 1075 00:47:38,380 --> 00:47:40,980 Halusin tehdä jotain tämän tiedon, nyt kun olen opettanut meille, miten 1076 00:47:40,980 --> 00:47:43,450 käyttää structs, on juuri ollut tämä ylimääräinen silmukka täällä. 1077 00:47:43,450 --> 00:47:45,260 Olen kerrata yli joukko opiskelijoita. 1078 00:47:45,260 --> 00:47:49,170 Käytin meidän, ehkä nyt tuttu ystävä, string vertailla, stircomp on 1079 00:47:49,170 --> 00:47:53,780 tarkastus on 8th opiskelijan talo yhtä Mather? 1080 00:47:53,780 --> 00:47:56,760 Ja jos on, vain tulostaa jotain mielivaltaisesti kuten, kyllä, se on. 1081 00:47:56,760 --> 00:47:59,430 Mutta jälleen kerran, vain antaa minulle mahdollisuuksia käyttö ja uudelleenkäyttö ja 1082 00:47:59,430 --> 00:48:02,270 uudelleen tämän uuden piste merkintätapa. 1083 00:48:02,270 --> 00:48:03,250 >> Joten mitä väliä, eikö? 1084 00:48:03,250 --> 00:48:06,270 Keksiä opiskelija-ohjelma on jossain määrin mielivaltainen, mutta käy ilmi, 1085 00:48:06,270 --> 00:48:09,800 että voimme tehdä hyödyllisiä asioita Tämän, esimerkiksi seuraavasti. 1086 00:48:09,800 --> 00:48:14,600 Tämä on paljon monimutkaisempi struct in C. Se sai tusinan tai enemmän, 1087 00:48:14,600 --> 00:48:15,880 hieman arvoituksellisesti nimetty. 1088 00:48:15,880 --> 00:48:20,110 Mutta jos olet koskaan kuullut grafiikka tiedostomuoto nimeltä bittikartta, BMP, se 1089 00:48:20,110 --> 00:48:22,830 Osoittautuu, että bitmap tiedostomuoto melko paljon näyttää, että tämä. 1090 00:48:22,830 --> 00:48:24,200 Se on typerä pikku Hymiö. 1091 00:48:24,200 --> 00:48:27,840 Se on pieni kuva, että olen zoomataan on aika iso, jotta voisin nähdä jokaisen 1092 00:48:27,840 --> 00:48:30,410 yksittäisten pisteiden tai pikseliä. 1093 00:48:30,410 --> 00:48:33,800 Nyt on käynyt ilmi voimme edustaa musta piste, jossa vaikkapa numero 0. 1094 00:48:33,800 --> 00:48:35,520 Ja valkoinen piste, jossa numero 1. 1095 00:48:35,520 --> 00:48:39,140 >> Eli toisin sanoen, jos haluat piirtää Hymiö ja pelastamiseksi kuva 1096 00:48:39,140 --> 00:48:42,680 tietokone, riittää tallentaa nollia ja ne, jotka näyttävät tältä, missä, 1097 00:48:42,680 --> 00:48:45,250 uudelleen, ne ovat valkoisia ja nollat ​​ovat mustat. 1098 00:48:45,250 --> 00:48:48,290 Ja yhdessä, jos tehokkaasti on vyötä ykkösiä ja nollia, olet 1099 00:48:48,290 --> 00:48:51,030 verkkoon pikseliä, ja jos antaa ne pois, olet söpö 1100 00:48:51,030 --> 00:48:52,560 pikku Hymiö. 1101 00:48:52,560 --> 00:48:58,150 Nyt bitmap tiedostomuoto, BMP, on tehokkaasti, että alla huppu, 1102 00:48:58,150 --> 00:49:00,970 mutta enemmän pikseleitä sot, että voi todella edustaa värejä. 1103 00:49:00,970 --> 00:49:05,170 >> Mutta kun sinulla on enemmän kehittyneempiä tiedostomuotoja, kuten BMP ja JPEG-ja GIF 1104 00:49:05,170 --> 00:49:09,360 joiden kanssa saatat tuntea ne, tiedostoja levylle tyypillisesti paitsi 1105 00:49:09,360 --> 00:49:13,760 ovat nollia ja ykkösiä varten pikseliä, mutta heillä on joitakin metatietoja sekä - 1106 00:49:13,760 --> 00:49:16,960 meta siinä mielessä, että ei ole oikeastaan tietoja, mutta se on hyvä olla. 1107 00:49:16,960 --> 00:49:21,370 Joten nämä kentät tässä on mikä, ja näemme tämän tarkemmin P-sarja 1108 00:49:21,370 --> 00:49:25,810 5, että ennen nollia ja ykkösiä, jotka edustaa kuvan kuvapisteiden, 1109 00:49:25,810 --> 00:49:29,110 siellä on joukko metatietoja, kuten kuvan kokoa ja 1110 00:49:29,110 --> 00:49:30,250 kuvan leveys. 1111 00:49:30,250 --> 00:49:32,910 Ja huomaa olen nyppiminen pois joitakin mielivaltaisia ​​asioita täällä - 1112 00:49:32,910 --> 00:49:34,260 leveys ja korkeus. 1113 00:49:34,260 --> 00:49:36,160 Bittilukemaan ja joitakin muita asioita. 1114 00:49:36,160 --> 00:49:37,840 Joten on joitakin metatiedot tiedostoon. 1115 00:49:37,840 --> 00:49:41,470 >> Mutta ymmärtämällä miten tiedostot asetetut pois tällä tavalla, voit itse 1116 00:49:41,470 --> 00:49:45,890 sitten käsitellä kuvia, palauttaa kuvia levyltä, muuttaa kuvien kokoa. 1117 00:49:45,890 --> 00:49:47,560 Mutta et voi välttämättä parantaa niitä. 1118 00:49:47,560 --> 00:49:48,480 Tarvitsin valokuva. 1119 00:49:48,480 --> 00:49:52,840 Menin takaisin RJ täällä, jotka näit ruudulla jo jonkin aikaa sitten. 1120 00:49:52,840 --> 00:49:57,160 Ja jos minä avata Keynote täällä, tämä on mitä tapahtuu, jos yrität suurentaa ja 1121 00:49:57,160 --> 00:49:59,380 parantaa RJ. 1122 00:49:59,380 --> 00:50:01,480 Hän ei saa mitään parempaa todella. 1123 00:50:01,480 --> 00:50:06,240 Nyt Keynote on sellainen hämärtää sitä vähän, vain kaunistella 1124 00:50:06,240 --> 00:50:11,040 että RJ ei saa erityisen tehostetun kun zoomata sisään 1125 00:50:11,040 --> 00:50:13,310 Ja jos teet sen tällä tavalla, katso neliöt? 1126 00:50:13,310 --> 00:50:15,490 Joo, voit varmasti nähdä ruudut projektori. 1127 00:50:15,490 --> 00:50:17,690 >> Se mitä saat, kun parantaa. 1128 00:50:17,690 --> 00:50:22,570 Mutta ymmärtää, miten meidän RJ tai Hymiö on toteutettu antaa meille 1129 00:50:22,570 --> 00:50:24,950 itse kirjoittaa koodia, joka manipuloi näitä asioita. 1130 00:50:24,950 --> 00:50:29,970 Ja ajattelin lopetan, jossa 55 sekuntia parantaa se, 1131 00:50:29,970 --> 00:50:31,230 Uskallan sanoa melko harhaanjohtava. 1132 00:50:31,230 --> 00:50:32,990 >> [VIDEOTOISTOSTA] 1133 00:50:32,990 --> 00:50:34,790 >> -Hän valehtelee. 1134 00:50:34,790 --> 00:50:38,310 Mitä, en tiedä. 1135 00:50:38,310 --> 00:50:41,200 >> -Mitä me tiedämme? 1136 00:50:41,200 --> 00:50:45,280 >> -Että 9:15 Ray Santoya oli ATM. 1137 00:50:45,280 --> 00:50:47,830 >> -Joten kysymys on, mitä hän oli tekemässä 09:16? 1138 00:50:47,830 --> 00:50:50,750 >> -Ammunta yhdeksän millimetrin jotain. 1139 00:50:50,750 --> 00:50:52,615 Ehkä hän näki ampuja. 1140 00:50:52,615 --> 00:50:54,760 >> -Tai oli työskennellä hänen kanssaan. 1141 00:50:54,760 --> 00:50:56,120 >> -Odota. 1142 00:50:56,120 --> 00:50:57,450 Mene takaisin yhteen. 1143 00:50:57,450 --> 00:50:58,700 >> -Mitä sinä näet? 1144 00:50:58,700 --> 00:51:05,530 1145 00:51:05,530 --> 00:51:09,490 >> -Tuo hänen ylöspäin, koko näytön. 1146 00:51:09,490 --> 00:51:09,790 >> -Hänen lasit. 1147 00:51:09,790 --> 00:51:11,040 >> -On pohdintaa. 1148 00:51:11,040 --> 00:51:21,790 1149 00:51:21,790 --> 00:51:23,520 >> -Se Neuvitas baseball-joukkue. 1150 00:51:23,520 --> 00:51:24,530 Se on heidän logo. 1151 00:51:24,530 --> 00:51:27,040 >> -Ja hän puhuu kuka on yllään että takki. 1152 00:51:27,040 --> 00:51:27,530 >> [END VIDEOTOISTOSTA] 1153 00:51:27,530 --> 00:51:29,180 >> DAVID J. MALAN: Tämä tulee olla Harjoitus 5. 1154 00:51:29,180 --> 00:51:30,720 Tapaamme ensi viikolla. 1155 00:51:30,720 --> 00:51:32,330 >> MALE SPEAKER: Seuraavassa CS50. 1156 00:51:32,330 --> 00:51:39,240 >> [Sirkat sirkutusta] 1157 00:51:39,240 --> 00:51:41,270 >> [Musiikki soi]