1 00:00:00,000 --> 00:00:10,970 >> [Muusika mängib] 2 00:00:10,970 --> 00:00:12,536 >> DAVID J. Malan: Olgu. 3 00:00:12,536 --> 00:00:13,392 >> [Naer] 4 00:00:13,392 --> 00:00:14,240 >> Tere tulemast tagasi. 5 00:00:14,240 --> 00:00:14,990 See on CS50. 6 00:00:14,990 --> 00:00:16,890 Ja see nädala lõpuks viis. 7 00:00:16,890 --> 00:00:20,020 Ja siiani oleme päris palju võtnud enesestmõistetavaks, et seal 8 00:00:20,020 --> 00:00:23,480 olemas selle koostaja, rõkkama, et olete on tuginedes teel selle 9 00:00:23,480 --> 00:00:27,100 muu tööriist nimega Mark, et kuidagi võluväel teisendab lähtekoodi 10 00:00:27,100 --> 00:00:31,350 arvesse objekti kood, nulli ja need et teie arvuti protsessor, keskne 11 00:00:31,350 --> 00:00:33,410 keskseade, tegelikult aru. 12 00:00:33,410 --> 00:00:36,770 Aga selgub, seal on number, mis on toimub all kapuuts 13 00:00:36,770 --> 00:00:38,690 sisendi ja väljundi vahel. 14 00:00:38,690 --> 00:00:41,800 >> Ja ma tahaksin teha ettepaneku, et me liha et läbi veidi üksikasjalikumalt arvesse 15 00:00:41,800 --> 00:00:45,130 Need neli sammu, on midagi, mida nimetatakse eeltöötlust, midagi 16 00:00:45,130 --> 00:00:48,300 kutsutud, koostamise, mida me oleme näinud, midagi, mida nimetatakse kokkupanek ja 17 00:00:48,300 --> 00:00:49,420 midagi, mida nimetatakse siduda. 18 00:00:49,420 --> 00:00:53,270 Seega seni, mõned meie programmid, oleme olnud terav ka. 19 00:00:53,270 --> 00:00:56,650 Hiljuti oleme olnud mõned teravad määranud konstandid. 20 00:00:56,650 --> 00:01:00,660 Nii selgub, et need asjad, mis ees seisab hash sümbol või 21 00:01:00,660 --> 00:01:04,150 nael sümbol on pre-protsessor direktiividele. 22 00:01:04,150 --> 00:01:07,960 See on lihtsalt fancy viis öelda, et see on rida koodi, mis on tegelikult 23 00:01:07,960 --> 00:01:12,280 ümber midagi enne arvuti isegi proovida muuta oma 24 00:01:12,280 --> 00:01:13,800 Programm viiakse nulli ja ones. 25 00:01:13,800 --> 00:01:19,000 >> Näiteks terav sisaldab standard I / O. H, päris palju tähendab lihtsalt minema 26 00:01:19,000 --> 00:01:24,010 ees, ostke failide sisu stdio.h ja kleebi need seal. 27 00:01:24,010 --> 00:01:25,880 Nii ei nulli ja need sel hetkel veel. 28 00:01:25,880 --> 00:01:27,470 See on tõesti lihtsalt vahetuseks. 29 00:01:27,470 --> 00:01:30,790 Ja see on tehtud ajal nn eeltöötlust etapis, kui te 30 00:01:30,790 --> 00:01:34,230 tegelikult kulgema rõkkama või spetsiaalselt Tee enamikel juhtudel. 31 00:01:34,230 --> 00:01:36,950 Nii et kõik see on toimunud esimene automaatselt seni. 32 00:01:36,950 --> 00:01:38,800 >> Siis tuleb koostamise etapis. 33 00:01:38,800 --> 00:01:40,920 Aga oleme olnud liiga lihtsustatult koostamine. 34 00:01:40,920 --> 00:01:45,060 Koostamise programm tegelikult tähendab võta seda midagi C, 35 00:01:45,060 --> 00:01:48,430 lähtekoodi oleme olnud kirjalikult, alla et midagi, mida nimetatakse koost. 36 00:01:48,430 --> 00:01:52,900 Assembly on madalamal tasemel keeles, et õnneks ei saa me 37 00:01:52,900 --> 00:01:55,480 on palju võimalust kirjutada see semester. 38 00:01:55,480 --> 00:01:59,100 Aga see on madalaimal tasemel selles mõttes, et sa sõna otseses mõttes hakake 39 00:01:59,100 --> 00:02:04,270 liita ja lahutada ja korrutada ja koormus mälust ja mällu salvestamiseks, 40 00:02:04,270 --> 00:02:08,259 väga põhilised juhised, et arvuti, all kapuuts, 41 00:02:08,259 --> 00:02:09,639 tegelikult aru. 42 00:02:09,639 --> 00:02:14,930 >> Lõpuks kokkupanek võtab selles keeles et nullid ja need, kes me oleme 43 00:02:14,930 --> 00:02:16,190 kirjeldab seni. 44 00:02:16,190 --> 00:02:19,270 Ja tõesti lõpuks, seal on nn sidudes etapp, mida me tulen 45 00:02:19,270 --> 00:02:22,360 vaata vaid hetk, mis ühendab oma nulle ja need nullidega ja 46 00:02:22,360 --> 00:02:24,870 need teised inimesed enne olete loonud. 47 00:02:24,870 --> 00:02:26,660 >> Nii leiavad selle super lihtne programm. 48 00:02:26,660 --> 00:02:27,560 See oli 1. nädal. 49 00:02:27,560 --> 00:02:29,610 Ta lihtsalt ütles, Hello World, ekraanil. 50 00:02:29,610 --> 00:02:30,920 Meil oli see läbi rõkkama. 51 00:02:30,920 --> 00:02:33,200 Või me jooksis ta läbi teha mis kestis rõkkama. 52 00:02:33,200 --> 00:02:36,170 Ja väljastada ajal kui mõned nullid ja ones. 53 00:02:36,170 --> 00:02:38,100 Aga selgub, seal on vaheetappi. 54 00:02:38,100 --> 00:02:40,460 Kui ma lähen siia - oops, ei tahan teda näha veel. 55 00:02:40,460 --> 00:02:44,800 Kui ma lähen siia, et mu seade ja ma avada hello.c siin 56 00:02:44,800 --> 00:02:46,160 on see, et sama programmi. 57 00:02:46,160 --> 00:02:48,600 Ja see, mida ma teen oma terminal aken siin ma lähen 58 00:02:48,600 --> 00:02:51,430 joosta rõkkama mitte teha, mis automatiseerib kõik neli 59 00:02:51,430 --> 00:02:52,870 need sammud meile. 60 00:02:52,870 --> 00:02:58,620 Ja ma teen rõkkama-S ja siis hello.c ning seejärel sisestada. 61 00:02:58,620 --> 00:03:00,590 >> Ja ma saan vilgub kiiresti jälle, mis on hea. 62 00:03:00,590 --> 00:03:05,280 Ja nüüd veidi suurem aknas Ma lähen avama gedit siin. 63 00:03:05,280 --> 00:03:09,610 Ja ma lähen avama faili, Selgub, nimetatakse hello.s see 64 00:03:09,610 --> 00:03:11,870 sisaldab mis Assembly Mainisin. 65 00:03:11,870 --> 00:03:15,060 Ja see on, mida nimetatakse kokkupanek keel, üsna madal 66 00:03:15,060 --> 00:03:18,470 juhiseid, et oma Intel CPU või mis iganes see on, mis seal sees on 67 00:03:18,470 --> 00:03:19,350 mõistab. 68 00:03:19,350 --> 00:03:24,480 Ja mov on liikuda. kõne eest helistada, väga madalal tasemel funktsioon. 69 00:03:24,480 --> 00:03:26,380 sub on lahutamine. 70 00:03:26,380 --> 00:03:30,370 >> Nii et kui teil on konkreetne CPU sees arvutisse, mis muudab 71 00:03:30,370 --> 00:03:34,300 selge, võrreldes teiste protsessoriga kohta turul, on mis juhiseid selle 72 00:03:34,300 --> 00:03:39,460 mõistab ja sageli, kui tõhus see on, kui kiiresti see on täidesaatva mõned 73 00:03:39,460 --> 00:03:40,380 juhendit. 74 00:03:40,380 --> 00:03:45,150 Nüüd enam seda, mida saate teha Järgmine Fall CS61 Kolledžis. 75 00:03:45,150 --> 00:03:48,170 Aga siin me oleme, näiteks mõne tunnused, mis võib tunduda tuttav. 76 00:03:48,170 --> 00:03:50,150 hello.c on programmi nimi. 77 00:03:50,150 --> 00:03:51,070 >> . Teksti - 78 00:03:51,070 --> 00:03:54,190 seal ei ole palju huvi on olemas just, meelde tuletada, et tekst 79 00:03:54,190 --> 00:03:59,190 segment, sest esmaspäeval, on koht, kus on mälu oma programmis tegelikult jõuab. 80 00:03:59,190 --> 00:04:01,330 Nii et vähemalt ähmaselt tuttav seal. 81 00:04:01,330 --> 00:04:03,730 Siin on muidugi mainida meie peamine ülesanne. 82 00:04:03,730 --> 00:04:07,220 Kerides, need viitavad asjad nn registrite väga väike tükkideks 83 00:04:07,220 --> 00:04:09,190 mälu sees oma tegelik CPU. 84 00:04:09,190 --> 00:04:12,930 Ja kui ma keri isegi edasi, ma näen mingi 85 00:04:12,930 --> 00:04:14,240 kaudne mainita ASCII. 86 00:04:14,240 --> 00:04:17,120 Ja tõepoolest on, et string, tere, koma maailmas. 87 00:04:17,120 --> 00:04:20,079 >> Nii pikk lugu lühike, see on olnud juhtub teile, automaatselt, 88 00:04:20,079 --> 00:04:22,140 all kapuuts kõik see aeg. 89 00:04:22,140 --> 00:04:26,450 Ja mis juhtunud on tõesti kord olete sattunud rõkkama või teel 90 00:04:26,450 --> 00:04:29,150 Tee, et sa saad esimese, lähtekoodist, 91 00:04:29,150 --> 00:04:30,700 niinimetatud Assembly. 92 00:04:30,700 --> 00:04:35,210 Siis rõkkama toimub üleminek selle kokkupanek keele alla nulli ja ones. 93 00:04:35,210 --> 00:04:38,340 Ja see on see slaid, alustasime meie arutelu Week 0 on - 94 00:04:38,340 --> 00:04:39,840 ja siis nädal 1. 95 00:04:39,840 --> 00:04:44,030 Ja siis lõpuks, need nullid ja need, kombineeritakse nulli ja need 96 00:04:44,030 --> 00:04:47,190 nende raamatukogud oleme võtnud enesestmõistetavaks nagu Standard I / O või 97 00:04:47,190 --> 00:04:50,010 String raamatukogu või isegi CS50 raamatukogu. 98 00:04:50,010 --> 00:04:54,200 >> Nii, et maalida seda pilti enam visuaalselt, meil hello.c. 99 00:04:54,200 --> 00:04:57,220 Ja see on muidugi kasutab printf toimida öelda, tere. 100 00:04:57,220 --> 00:05:01,810 Koostamise etapis võetakse see alla et fail me just nägin hello.s isegi 101 00:05:01,810 --> 00:05:04,290 kuigi see on tavaliselt kustutatud automaatselt ära. 102 00:05:04,290 --> 00:05:06,050 Aga see on koost kood keset samm. 103 00:05:06,050 --> 00:05:09,750 Ja siis, kui me kokku assamblee keel, nii et rääkida, see on kui sa 104 00:05:09,750 --> 00:05:10,830 saada need nullid ja ones. 105 00:05:10,830 --> 00:05:13,920 Nii oleme suumitud tõhusalt täna mida me oleme võtnud ette antud, 106 00:05:13,920 --> 00:05:16,430 tähendab läheb lähtekoodi vastuväiteid kood. 107 00:05:16,430 --> 00:05:18,850 >> Aga lõpuks, nüüd, et sama pilt - olgem pista see üle 108 00:05:18,850 --> 00:05:20,020 vasakul pool. 109 00:05:20,020 --> 00:05:22,880 Ja pange tähele, et top on Mainisin stdio.h. 110 00:05:22,880 --> 00:05:25,030 See on fail, mis oleme lisanud peaaegu kõik 111 00:05:25,030 --> 00:05:26,250 programme oleme kirjutanud. 112 00:05:26,250 --> 00:05:28,830 Ja see on fail, mille sisu saada koopia kleebitud, 113 00:05:28,830 --> 00:05:30,350 tõhusalt atop oma kood. 114 00:05:30,350 --> 00:05:34,170 Aga selgub, et arvuti süsteem kuhugi, seal on arvatavasti 115 00:05:34,170 --> 00:05:39,150 stdio.c fail, et keegi kirjutas aastat tagasi, mis rakendab kõik 116 00:05:39,150 --> 00:05:41,870 funktsioonid, mis olid kuulutatud aastal stdio.h. 117 00:05:41,870 --> 00:05:45,465 >> Nüüd tegelikult on see ilmselt mitte Mac või PC või isegi 118 00:05:45,465 --> 00:05:47,660 CS50 seade on toores C kood. 119 00:05:47,660 --> 00:05:52,710 Keegi juba koostatud, ja ka . O faili objekti kood või. 120 00:05:52,710 --> 00:05:56,020 fail, mis viitab jagatud raamatukogu mis on olnud eelnevalt paigaldatud ja 121 00:05:56,020 --> 00:05:57,240 eelkompileeritud teile. 122 00:05:57,240 --> 00:06:01,950 Aga oletame, et on tõepoolest olemas meie arvuti stdio.c paralleelselt 123 00:06:01,950 --> 00:06:02,650 koos rõkkama. 124 00:06:02,650 --> 00:06:04,960 Sinu kood kuramuse koostatud ja kokku monteeritud. 125 00:06:04,960 --> 00:06:09,200 stdio.c 's kood on koostatud ja kokku pandud, nii et see kõige viimane 126 00:06:09,200 --> 00:06:13,730 samm, siia alla, peame kuidagi link, niiöelda oma nulle ja need 127 00:06:13,730 --> 00:06:18,430 koos tema nullide ja need ühte lihtne programm, mis lõppkokkuvõttes on 128 00:06:18,430 --> 00:06:20,540 nimetatakse lihtsalt Tere. 129 00:06:20,540 --> 00:06:23,340 >> Nii et see kõik magic see on juhtunud siiani. 130 00:06:23,340 --> 00:06:26,430 Ja jätkab nende protsesside enesestmõistetavaks, kuid realiseerida 131 00:06:26,430 --> 00:06:28,750 seal on palju mahlane üksikasju toimub all olemas. 132 00:06:28,750 --> 00:06:31,920 Ja see teebki oma Arvuti Intel inside 133 00:06:31,920 --> 00:06:33,940 eriti selge. 134 00:06:33,940 --> 00:06:37,020 >> Nii on see märkus, kui soovite liitu meiega lõunale see reede, ei lähe 135 00:06:37,020 --> 00:06:41,570 tavalisi koht cs50.net/rsvp, 13:15 see reede. 136 00:06:41,570 --> 00:06:43,400 Ja nüüd mõned teated. 137 00:06:43,400 --> 00:06:44,670 Nii et meil on häid uudiseid. 138 00:06:44,670 --> 00:06:45,970 Ja meil on halbu uudiseid. 139 00:06:45,970 --> 00:06:47,260 Alusta mõned head uudised siin. 140 00:06:47,260 --> 00:06:52,038 141 00:06:52,038 --> 00:06:54,510 >> [Groaning] 142 00:06:54,510 --> 00:06:54,710 >> Hea küll. 143 00:06:54,710 --> 00:06:56,670 Noh, see on tehniliselt puhkus, nii see ei ole nii palju kingitus meile. 144 00:06:56,670 --> 00:06:58,030 Aga halb uudis muidugi. 145 00:06:58,030 --> 00:07:00,550 146 00:07:00,550 --> 00:07:01,880 >> [Groaning] 147 00:07:01,880 --> 00:07:03,530 >> Veetsin palju aega Nende animatsioone. 148 00:07:03,530 --> 00:07:04,690 >> [Naer] 149 00:07:04,690 --> 00:07:07,000 >> Tekib läbivaatamine istungil tuleval esmaspäeval. 150 00:07:07,000 --> 00:07:08,340 See saab olema 05:30. 151 00:07:08,340 --> 00:07:11,210 Me meelde kõik need detailid e-posti teel on kursuse 152 00:07:11,210 --> 00:07:13,470 kodulehel vaid paar päeva aega. 153 00:07:13,470 --> 00:07:16,610 See filmitakse ja kättesaadavaks varsti pärast seda. 154 00:07:16,610 --> 00:07:19,200 Nii et kui te ei saa teha, et esmaspäev öö pesa, ärge muretsege. 155 00:07:19,200 --> 00:07:22,270 Sektsioonid tuleval nädalal ka keskenduda läbivaatamine viktoriini. 156 00:07:22,270 --> 00:07:25,670 Kui teie osa on esmaspäeval, mis on tõepoolest ülikooli puhkus, siis me 157 00:07:25,670 --> 00:07:26,920 endiselt vastama punktis. 158 00:07:26,920 --> 00:07:28,890 Kui sa lihtsalt ei saa teha, et jagu, sest sa lähed 159 00:07:28,890 --> 00:07:29,860 ära, see on hea. 160 00:07:29,860 --> 00:07:33,710 Osale pühapäev või teisipäev osa või tune-in Jasoni osa, mis on 161 00:07:33,710 --> 00:07:35,110 saadaval online. 162 00:07:35,110 --> 00:07:37,490 >> Niisiis, rohkem halbu uudiseid. 163 00:07:37,490 --> 00:07:41,960 Seega vastavalt õppekava, meil loeng järgmisel reedel. 164 00:07:41,960 --> 00:07:43,690 Aga hea uudis - 165 00:07:43,690 --> 00:07:44,860 selgelt, veetsin liiga palju aega see. 166 00:07:44,860 --> 00:07:45,280 >> [Naer] 167 00:07:45,280 --> 00:07:47,140 >> Me katkestame järgmisel reedel loenguid. 168 00:07:47,140 --> 00:07:50,590 Nii et on kingitus meile, et sa tõesti on kena kergendust 169 00:07:50,590 --> 00:07:52,990 vahel selle nädala ja kahe nädala pärast on. 170 00:07:52,990 --> 00:07:57,460 Seega ei ole loenguid järgmisel nädalal, lihtsalt väike väike viktoriin, mille abil peaks olema 171 00:07:57,460 --> 00:07:59,030 üha rohkem põnevil. 172 00:07:59,030 --> 00:08:03,870 >> Teeme nüüd tähelepanu pöörata midagi, mis on tõesti rohkem visuaalse 173 00:08:03,870 --> 00:08:06,990 ja põnevam ning panema mida saab olema silmapiiril 174 00:08:06,990 --> 00:08:08,420 vaid paar nädalat aega. 175 00:08:08,420 --> 00:08:12,160 Pärast esimest viktoriin, me lülitage Keskenduda meie probleem komplekti teise 176 00:08:12,160 --> 00:08:16,710 domeeni konkreetne probleem, mis kohtuekspertiisi või turvalisuse üldisemalt. 177 00:08:16,710 --> 00:08:19,550 >> Tegelikult traditsioon selle probleemiga komplekt on minu jaoks üks 178 00:08:19,550 --> 00:08:24,850 õpetamise mehe või pädevad kõndida üle campus võttes mõned fotod 179 00:08:24,850 --> 00:08:29,450 tuvastatav kuid mitte ilmne inimesed, kohtades või asju, siis igal aastal I 180 00:08:29,450 --> 00:08:34,520 kuidagi õnnestub kogemata kustutada või rikkuda digitaalmeedia kaart 181 00:08:34,520 --> 00:08:35,720 mis seal sees on meie kaamera. 182 00:08:35,720 --> 00:08:36,860 Aga pole hullu. 183 00:08:36,860 --> 00:08:39,200 Võin minna ja ühendage et minu arvuti. 184 00:08:39,200 --> 00:08:43,010 Võin teha kohtuekspertiisi pilt sellest, et rääkida, kopeerides nulli ja 185 00:08:43,010 --> 00:08:46,830 need maha, et mälukaart, kas oma SD-kaardi või Compact Flash kaardi või 186 00:08:46,830 --> 00:08:48,100 mis iganes te olete juba tuttav. 187 00:08:48,100 --> 00:08:49,300 Ja siis saame käsi, mis välja. 188 00:08:49,300 --> 00:08:53,190 >> Ja nii väljakutse ees, muu hulgas asju teile, saab kirjutada 189 00:08:53,190 --> 00:08:58,630 C kood, mis taastab terve hunnik JPEG mulle ja selgus on 190 00:08:58,630 --> 00:09:00,190 neid inimesi, kohti või asju. 191 00:09:00,190 --> 00:09:03,340 Ja me ka rääkida, et see probleem kehtestatud ja päeva tulla, umbes 192 00:09:03,340 --> 00:09:04,440 graafika üldisemalt. 193 00:09:04,440 --> 00:09:06,140 Oleme kasutanud neid, muidugi, jaoks välja murda. 194 00:09:06,140 --> 00:09:09,080 Aga sa oled justkui iseenesestmõistetavaks on olemas need kõrge mõisted 195 00:09:09,080 --> 00:09:10,680 ristküliku ja ovaali. 196 00:09:10,680 --> 00:09:12,450 Aga all kapuuts on pikslit. 197 00:09:12,450 --> 00:09:14,370 Ja teil on olnud alustada mõtled neid. 198 00:09:14,370 --> 00:09:18,800 Või siis p-set 4 mõtlema umbes lõhet oma tellised, kuidas 199 00:09:18,800 --> 00:09:21,990 kiiresti sa pall liigub üle ekraani välja murda. 200 00:09:21,990 --> 00:09:24,830 Seega on see mõiste dots ekraanil, mis on 201 00:09:24,830 --> 00:09:26,290 tulevad mängu juba. 202 00:09:26,290 --> 00:09:29,430 >> Nüüd, mida sa näed, kui see, mida saad arvutiekraanil. 203 00:09:29,430 --> 00:09:33,680 Kui olete kunagi vaatasin mõned hea või halb TV, koefitsiendid on nad päris palju 204 00:09:33,680 --> 00:09:36,280 ravida publik nagu technophobes kes tõesti ei 205 00:09:36,280 --> 00:09:37,630 tea, palju arvuti. 206 00:09:37,630 --> 00:09:40,840 Ja nii see on väga lihtne, et politsei detektiiv öelda, kas te 207 00:09:40,840 --> 00:09:41,710 puhastada, et minu jaoks? 208 00:09:41,710 --> 00:09:42,710 Või parandada, eks? 209 00:09:42,710 --> 00:09:45,550 Tõsta on nagu buzz sõna kõige muu kuriteoga seotud show. 210 00:09:45,550 --> 00:09:49,240 Ja reaalsus on see, kui te võtate väga udune pilt kahtlustatava teed 211 00:09:49,240 --> 00:09:51,620 midagi halba, ei saa te lihtsalt parandada seda. 212 00:09:51,620 --> 00:09:53,080 Sa ei saa suumida lõpmatult. 213 00:09:53,080 --> 00:09:56,350 Sa ei saa näha helk kellegi silma pannud, et 214 00:09:56,350 --> 00:09:59,860 eriti kuritegevuse, vaatamata levimus seda telekast. 215 00:09:59,860 --> 00:10:04,110 >> Ja nii koos, et lähme motiveerida, et tulemas probleem komplekt pilguheit 216 00:10:04,110 --> 00:10:05,765 mõned näitab, kellega võib olla tuttav. 217 00:10:05,765 --> 00:10:06,500 >> [VIDEO PLAYBACK] 218 00:10:06,500 --> 00:10:07,835 >> -OK. 219 00:10:07,835 --> 00:10:09,956 Nüüd lähme hea pilk teile. 220 00:10:09,956 --> 00:10:17,060 221 00:10:17,060 --> 00:10:17,766 >> -Hoia seda. 222 00:10:17,766 --> 00:10:18,658 Käivita see tagasi. 223 00:10:18,658 --> 00:10:19,550 >> -Oota. 224 00:10:19,550 --> 00:10:21,580 Mine õige. 225 00:10:21,580 --> 00:10:21,800 >> -Ei. 226 00:10:21,800 --> 00:10:22,690 Freeze et. 227 00:10:22,690 --> 00:10:23,692 >> -Full screen. 228 00:10:23,692 --> 00:10:23,846 >> -OK. 229 00:10:23,846 --> 00:10:24,154 Freeze et. 230 00:10:24,154 --> 00:10:25,140 >> Pingutage üles, et on ju? 231 00:10:25,140 --> 00:10:27,090 >> -Vektor on see mees poolt tagarattal. 232 00:10:27,090 --> 00:10:29,730 >> -Zoom in siinsamas kohapeal. 233 00:10:29,730 --> 00:10:33,700 >> -Mis õige varustus, imaged on võimalik suurendada ja teritatud. 234 00:10:33,700 --> 00:10:34,490 >> -Mis see on? 235 00:10:34,490 --> 00:10:35,870 >> -See on suurendamise programmi. 236 00:10:35,870 --> 00:10:36,793 >> -Kas sa selge, et kuni kõik? 237 00:10:36,793 --> 00:10:38,560 >> -Ma ei tea. 238 00:10:38,560 --> 00:10:39,090 Olgem suurendada seda. 239 00:10:39,090 --> 00:10:41,690 >> -Tõsta osa-6. 240 00:10:41,690 --> 00:10:43,510 >> -I suurendanud detail ja - 241 00:10:43,510 --> 00:10:44,456 >> -Ma arvan, et seal on piisavalt tõhustada. 242 00:10:44,456 --> 00:10:45,402 Vabastage see, et mu ekraanil. 243 00:10:45,402 --> 00:10:47,300 >> -Tõsta peegeldus oma silmaga. 244 00:10:47,300 --> 00:10:49,330 >> Vaatame käivitada kaudu video lisaseadmega. 245 00:10:49,330 --> 00:10:50,340 >> -Edgar, sa saad parandada seda? 246 00:10:50,340 --> 00:10:52,320 >> -Oota. 247 00:10:52,320 --> 00:10:54,290 >> -Ma olen töötanud selles peegeldus. 248 00:10:54,290 --> 00:10:55,560 >> -Kellegi peegeldus. 249 00:10:55,560 --> 00:10:56,440 >> -Peegeldus. 250 00:10:56,440 --> 00:10:57,940 >> -Seal on peegeldus on mehe nägu. 251 00:10:57,940 --> 00:10:58,860 >> -Peegeldus. 252 00:10:58,860 --> 00:10:59,710 >> -Seal on peegeldus. 253 00:10:59,710 --> 00:11:00,900 >> -Suumida peegel. 254 00:11:00,900 --> 00:11:03,500 >> -Näete peegeldus. 255 00:11:03,500 --> 00:11:04,700 >> -Kas sa parema pildi siit? 256 00:11:04,700 --> 00:11:05,700 >> -Kas teil suurendada teda siin? 257 00:11:05,700 --> 00:11:06,500 >> -Kas sa parandada seda? 258 00:11:06,500 --> 00:11:07,380 >> -Kas sa parandada seda? 259 00:11:07,380 --> 00:11:08,190 >> -Kas me saame parandada seda? 260 00:11:08,190 --> 00:11:08,940 >> -Kas sa parandada seda? 261 00:11:08,940 --> 00:11:10,280 >> -Oota üks sekund, ma suurendada. 262 00:11:10,280 --> 00:11:11,570 >> -Suumida uks. 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 >> [Naer] 266 00:11:13,197 --> 00:11:14,360 >> -Viige sisse 267 00:11:14,360 --> 00:11:15,100 >> Oota, lõpetage. 268 00:11:15,100 --> 00:11:15,740 >> -Lõpeta. 269 00:11:15,740 --> 00:11:16,290 >> -Paus. 270 00:11:16,290 --> 00:11:19,390 >> Pööramiseks 75 kraadi ümber vertikaalne palun. 271 00:11:19,390 --> 00:11:19,886 >> [Naer] 272 00:11:19,886 --> 00:11:24,350 >> -Stop ja tagasi osa umbes uks uuesti. 273 00:11:24,350 --> 00:11:26,330 >> -Sain pildi tugevdaja et saab bitmap? 274 00:11:26,330 --> 00:11:28,990 >> -Võib-olla saame kasutada Pradeep Sen meetod näha arvesse aknad. 275 00:11:28,990 --> 00:11:30,680 >> -See tarkvara on nüüdisaegse. 276 00:11:30,680 --> 00:11:31,676 >> -Ikoon väärtus on välja lülitatud. 277 00:11:31,676 --> 00:11:34,166 >> -Õige kombinatsioon algoritme. 278 00:11:34,166 --> 00:11:38,399 >> -Ta on võtnud valgustus algoritme järgmisele tasandile ja ma ei kasuta neid 279 00:11:38,399 --> 00:11:38,648 suurendada selle foto. 280 00:11:38,648 --> 00:11:42,050 >> -Lukusta ja suuremalt z-telg. 281 00:11:42,050 --> 00:11:42,760 >> -Tõsta. 282 00:11:42,760 --> 00:11:43,060 >> -Tõsta. 283 00:11:43,060 --> 00:11:43,760 >> -Tõsta. 284 00:11:43,760 --> 00:11:45,010 >> Külmutada ning parandada. 285 00:11:45,010 --> 00:11:47,470 286 00:11:47,470 --> 00:11:47,910 >> [END VIDEO PLAYBACK] 287 00:11:47,910 --> 00:11:51,470 >> DAVID J. Malan: Nii Ülesanded 5 on mis ootab seal. 288 00:11:51,470 --> 00:11:55,260 Nii et me varsti paremini mõista , millal ja miks te ei 289 00:11:55,260 --> 00:11:57,300 ja meie ei saa suurendada sel viisil. 290 00:11:57,300 --> 00:12:00,090 Aga kõigepealt, lähme tagasi pöörduda meie tähelepanu mõned ehitusplokkide paneme 291 00:12:00,090 --> 00:12:02,250 pead suutma öelda, et lugu. 292 00:12:02,250 --> 00:12:05,580 >> Nii meenutavad, et me selle joonistas pildi Esmaspäev ja natuke eelmisel nädalal. 293 00:12:05,580 --> 00:12:09,970 Ja see kirjeldab paigutust asjad arvuti mälust 294 00:12:09,970 --> 00:12:11,000 töötab mõned programmi. 295 00:12:11,000 --> 00:12:14,310 Tech segment kuni top, mäletate, viitab tegeliku nulli ja need 296 00:12:14,310 --> 00:12:16,000 et koostada oma programm. 297 00:12:16,000 --> 00:12:19,340 Seal all, et mõned vormindatud või uninitialized andmed, mis tavaliselt 298 00:12:19,340 --> 00:12:22,910 viitab asjad konstandid või stringid või globaalsed muutujad, mis on 299 00:12:22,910 --> 00:12:24,200 tunnistatud ette. 300 00:12:24,200 --> 00:12:26,500 Seal on hunnik, kuid me tuleme tagasi, et natuke. 301 00:12:26,500 --> 00:12:27,410 >> Ja siis on stack. 302 00:12:27,410 --> 00:12:30,660 Palju nagu virna plaate Kohvik on see, kui mälu saab 303 00:12:30,660 --> 00:12:33,610 õhuline ja kihiline kui sa seda, mida programmis? 304 00:12:33,610 --> 00:12:36,380 305 00:12:36,380 --> 00:12:37,730 Mis on virnas kasutada? 306 00:12:37,730 --> 00:12:39,320 >> Jah? 307 00:12:39,320 --> 00:12:40,000 >> Helista funktsiooni. 308 00:12:40,000 --> 00:12:42,890 Iga kord, kui helistada funktsioon, see on antud Kiip mälu selle 309 00:12:42,890 --> 00:12:45,020 kohalike muutujate või parameetrite kohta. 310 00:12:45,020 --> 00:12:48,810 Ja piltlikult, siis näeme, et iga järjestikuste funktsiooni nimetatakse, kui 311 00:12:48,810 --> 00:12:52,520 kutsub B kõnede C kõned D, nad saada kihiline peale virna. 312 00:12:52,520 --> 00:12:55,630 Ja igas neist viilud mälu on oma olemuselt unikaalne ulatus 313 00:12:55,630 --> 00:12:58,590 selle ülesande täitmiseks, mis muidugi Probleemne on, kui soovite, et käsi 314 00:12:58,590 --> 00:13:01,850 ühest funktsiooni teise tükk andmeid, mis sa tahad seda 315 00:13:01,850 --> 00:13:03,500 muteeruda või muuta. 316 00:13:03,500 --> 00:13:08,060 >> Mis siis oli meie lahendus, mis võimaldab Funktsioon esindab üks pinu 317 00:13:08,060 --> 00:13:11,390 muutmiseks kaadri mälu sees teise freimi? 318 00:13:11,390 --> 00:13:14,590 Kuidas need kaks üksteisega rääkivate? 319 00:13:14,590 --> 00:13:18,510 Nii teel vihjeid või aadressi, mis jällegi lihtsalt kirjeldada, kus 320 00:13:18,510 --> 00:13:22,280 mälu teel konkreetse hammustada number, eelkõige 321 00:13:22,280 --> 00:13:23,830 väärtus võib leida. 322 00:13:23,830 --> 00:13:26,860 Nii meenutada viimast korda liiga jätkasime lugu ja vaatasin 323 00:13:26,860 --> 00:13:28,280 üsna lollakas programmi. 324 00:13:28,280 --> 00:13:32,900 Ja see programm on lollakas mõne põhjusi, kuid kõige murettekitav üks on 325 00:13:32,900 --> 00:13:34,620 sest ta ei suuda kontrollida, mida? 326 00:13:34,620 --> 00:13:39,111 327 00:13:39,111 --> 00:13:40,450 >> Jah, see ei vaadata sisend. 328 00:13:40,450 --> 00:13:41,870 Vabandust? 329 00:13:41,870 --> 00:13:43,880 >> Kui see on rohkem kui 12 tähemärki. 330 00:13:43,880 --> 00:13:47,260 Nii väga uhkelt, helistades memcopy, mis, nagu nimigi ütleb, on lihtsalt 331 00:13:47,260 --> 00:13:50,630 koopiad mälu Teise argumendiga arvesse selle esimene argument. 332 00:13:50,630 --> 00:13:54,730 Kolmas argument, väga uhkelt, on kontrollitakse veendumaks, et te ei 333 00:13:54,730 --> 00:13:59,400 kopeerida üle, antud juhul, pikkus baar, tähemärkide arv, 334 00:13:59,400 --> 00:14:03,810 arvesse kohtades, mis on selle array C. Aga probleem on selles, et mida 335 00:14:03,810 --> 00:14:07,230 kui C ise ei ole piisavalt suur, et hakkama? 336 00:14:07,230 --> 00:14:09,900 Sa lähed kopeerida arvu bytes et olete saanud. 337 00:14:09,900 --> 00:14:13,040 Aga mida sa tegelikult olla rohkem bytes kui teil on ruumi? 338 00:14:13,040 --> 00:14:16,770 >> Noh, see programm väga rumalalt lihtsalt pimesi tulu võtta mis iganes see on 339 00:14:16,770 --> 00:14:20,650 arvestades, tere Kenoviiva 0 on tore, kui string on lühike 340 00:14:20,650 --> 00:14:22,040 piisavalt, nagu viis tähemärki. 341 00:14:22,040 --> 00:14:26,470 Aga kui see on tegelikult 12 tähemärki või 1200 tähemärki nägime viimast korda 342 00:14:26,470 --> 00:14:29,380 et sa oled lihtsalt läheb täielikult kirjutatakse mälu 343 00:14:29,380 --> 00:14:30,470 ei kuulu teile. 344 00:14:30,470 --> 00:14:34,390 Ja halvim, kui te kirjutada, et punane osa on, et me kutsusime 345 00:14:34,390 --> 00:14:35,380 saatja aadress - 346 00:14:35,380 --> 00:14:38,370 see on lihtsalt, kui arvuti automaatselt teie eest, taga 347 00:14:38,370 --> 00:14:43,130 stseene, tucks ära 32-bitine väärtus meenutab seda, mida aadress see peaks 348 00:14:43,130 --> 00:14:47,080 tagasi kui suva see teine ​​funktsioon, tehakse täidesaatva. 349 00:14:47,080 --> 00:14:49,320 See leivaraasukese kehvasti millele ta naaseb. 350 00:14:49,320 --> 00:14:52,490 Kui sa kirjutada, et potentsiaalselt kui sa oled paha poiss, ei saaks 351 00:14:52,490 --> 00:14:54,750 potentsiaalselt üle võtma kellegi arvutis. 352 00:14:54,750 --> 00:14:58,020 Ja sa kindlasti crash see enamikel juhtudel. 353 00:14:58,020 --> 00:15:01,690 >> Nüüd on see probleem oli ainult süvendanud kui me hakkasime rääkima mälu 354 00:15:01,690 --> 00:15:03,010 juhtimine üldisemalt. 355 00:15:03,010 --> 00:15:07,150 Ja malloc, mälu eraldamist, on funktsioon, mida saame kasutada, et eraldada 356 00:15:07,150 --> 00:15:11,260 mälu, kui me ei tea ette et me vajada. 357 00:15:11,260 --> 00:15:13,960 Nii näiteks, kui ma lähen tagasi seadmele siin. 358 00:15:13,960 --> 00:15:21,010 Ja ma avama alates viimane aeg hello2.c, mäletate seda programmi siin, mis tundus 359 00:15:21,010 --> 00:15:23,500 natuke midagi sellist, ainult kolm rida - 360 00:15:23,500 --> 00:15:27,940 oma nimi, siis string nimi, vasakul, võrdub getString. 361 00:15:27,940 --> 00:15:29,690 Ja siis me välja trükkida, kasutaja nimi. 362 00:15:29,690 --> 00:15:31,170 >> Nii et see oli super lihtne programm. 363 00:15:31,170 --> 00:15:34,870 Et oleks selge, lubage mul minna ja teha tere-2. 364 00:15:34,870 --> 00:15:36,680 Ma lähen tegema dot kaldkriipsuga tere-2. 365 00:15:36,680 --> 00:15:37,750 Oma nimi - 366 00:15:37,750 --> 00:15:38,140 David. 367 00:15:38,140 --> 00:15:38,840 Enter. 368 00:15:38,840 --> 00:15:39,540 Tere David. 369 00:15:39,540 --> 00:15:41,060 Tundub, et töö OK. 370 00:15:41,060 --> 00:15:43,140 Aga mis tegelikult toimub all kapuuts siin? 371 00:15:43,140 --> 00:15:44,670 Esiteks olgem Tõmmake mõned kihid. 372 00:15:44,670 --> 00:15:48,380 String on lihtsalt sünonüüm oleme aru milleks? 373 00:15:48,380 --> 00:15:49,110 Char star. 374 00:15:49,110 --> 00:15:52,740 Seega teeme seda pisut kauge kuid tehniliselt õige, et see 375 00:15:52,740 --> 00:15:55,570 on char täht, mis tähendab, et nimi, jah, on varieeruv. 376 00:15:55,570 --> 00:15:59,920 Aga mis nime kauplustes on aadress char, mis tundub natuke kummaline 377 00:15:59,920 --> 00:16:01,050 sest ma saan tagasi string. 378 00:16:01,050 --> 00:16:03,580 Ma saan tagasi mitmekordne sümbolid ei char. 379 00:16:03,580 --> 00:16:07,400 >> Aga muidugi, sa pead ainult esimene char aadressi meeles pidada, kus 380 00:16:07,400 --> 00:16:08,870 terve rida on, sest miks? 381 00:16:08,870 --> 00:16:12,700 Kuidas aru saada, kus lõpuks string teades algusest? 382 00:16:12,700 --> 00:16:13,630 Kenoviiva null. 383 00:16:13,630 --> 00:16:17,260 Nii need kaks vihjeid nuputada enne algust ja lõppu 384 00:16:17,260 --> 00:16:20,280 iga string on, nii kaua, kui nad nõuetekohaselt moodustatud, et null 385 00:16:20,280 --> 00:16:22,110 terminaator et Kenoviiva null. 386 00:16:22,110 --> 00:16:24,520 >> Aga see nõuab getString. 387 00:16:24,520 --> 00:16:28,020 Ja selgub, et getString kõik see aeg on olnud omamoodi 388 00:16:28,020 --> 00:16:28,820 petnud meid. 389 00:16:28,820 --> 00:16:32,460 See on teinud seda tööd, et olla kindel, saada string kasutaja. 390 00:16:32,460 --> 00:16:34,580 Aga kui see on mälu välja tuleb? 391 00:16:34,580 --> 00:16:38,440 Kui me läheme tagasi pilt siin kohaldatakse määratlusega ainult 392 00:16:38,440 --> 00:16:42,610 hetk tagasi, et stack on kui mälu läheb, kui ülesanded on kutsutud, 393 00:16:42,610 --> 00:16:45,370 selle loogika, kui helistate getString, ja siis ma kirjutada 394 00:16:45,370 --> 00:16:50,900 D-A-V-I-D Märkida vajaduse on D-A-V-I-D Kenoviiva null salvestatud, mis põhineb 395 00:16:50,900 --> 00:16:53,480 lugu oleme rääkinud meile palju? 396 00:16:53,480 --> 00:16:55,190 >> Tundub olevat korstnat, eks? 397 00:16:55,190 --> 00:16:58,120 Kui helistate saada string saad väike tükk mälu stack. 398 00:16:58,120 --> 00:17:01,630 Seega on loogiline, et D-A-V-I-D Kenoviiva null on salvestatud 399 00:17:01,630 --> 00:17:02,770 seal pakis. 400 00:17:02,770 --> 00:17:07,680 Kuid oodake minut, getString tulu et string, nii et rääkida, mis tähendab, 401 00:17:07,680 --> 00:17:11,700 see salv kohviku võetakse ära pinu. 402 00:17:11,700 --> 00:17:14,560 Ja me ütlesime, viimane aeg, et kiiresti tagastab funktsioon, ja sa võtad, et 403 00:17:14,560 --> 00:17:20,109 salve, nii et rääkida, ära pinu mida sa saad endale umbes jäänused 404 00:17:20,109 --> 00:17:21,819 et mälu? 405 00:17:21,819 --> 00:17:25,160 Ma justkui redrew need küsimärgid sest nad tegelikult saada 406 00:17:25,160 --> 00:17:26,250 tundmatu väärtused. 407 00:17:26,250 --> 00:17:29,500 Neid võib uuesti kasutada, kui mõned Järgmise funktsiooni nimetatakse. 408 00:17:29,500 --> 00:17:31,870 >> Teisisõnu, kui me juhtumisi tuleb hoidmine - 409 00:17:31,870 --> 00:17:34,350 Ma joonistan kiire pilt siin virna. 410 00:17:34,350 --> 00:17:38,690 Kui me juhtumisi joonistus alt minu mälu segment ja me öelda 411 00:17:38,690 --> 00:17:42,230 et see on koht, mälu hõivatud peamine ja võib-olla arg c ja 412 00:17:42,230 --> 00:17:46,790 arg v ja kõike muud programmi, kui getString nimetatakse, 413 00:17:46,790 --> 00:17:51,120 arvatavasti getString saab tüki mälu siin. 414 00:17:51,120 --> 00:17:53,940 Ja siis D-A-V-I-D kuidagi jõuab seda funktsiooni. 415 00:17:53,940 --> 00:17:55,320 Ja ma lähen lihtsustavad. 416 00:17:55,320 --> 00:18:00,050 Aga oletame, et selle D-A-V-I-D Kenoviiva null. 417 00:18:00,050 --> 00:18:03,500 Nii et see palju baite kasutatakse raami getString. 418 00:18:03,500 --> 00:18:08,270 >> Aga niipea, kui getString naaseb, me ütles viimane kord, et see mälu üle 419 00:18:08,270 --> 00:18:11,340 siin kõik muutub - woops! - 420 00:18:11,340 --> 00:18:14,270 kõik muutub tõhusalt kustutada. 421 00:18:14,270 --> 00:18:17,220 Ja me ei mõtle seda praegu küsimus märgid, sest kes teab, 422 00:18:17,220 --> 00:18:18,720 mis toimub, et saada selle mälu. 423 00:18:18,720 --> 00:18:22,130 Tõepoolest, ma väga tihti kõne funktsioonid va getString. 424 00:18:22,130 --> 00:18:24,750 Ja niipea, kui ma kutsun mõne muu funktsiooni kui getString, võibolla mitte 425 00:18:24,750 --> 00:18:28,860 Selle konkreetse programmi me lihtsalt vaatas juures, kuid mõned teised, kindlasti mõned muud 426 00:18:28,860 --> 00:18:34,180 funktsioon võib lõpuks antakse Selle kõrval koha stack. 427 00:18:34,180 --> 00:18:39,410 >> Nii et see ei saa olla, et getString kauplustes D-A-V-I-D korstnat, sest ma tahan, 428 00:18:39,410 --> 00:18:41,040 kohe kaotada juurdepääsu. 429 00:18:41,040 --> 00:18:43,720 Aga me teame, et nad getString ainult naaseb mida? 430 00:18:43,720 --> 00:18:47,220 See ei ole tagasi mulle kuus tähemärki. 431 00:18:47,220 --> 00:18:51,090 Mis on see tõesti tagasi ei me järeldada, viimane kord? 432 00:18:51,090 --> 00:18:52,480 Aadress esimene. 433 00:18:52,480 --> 00:18:56,650 Nii kuidagi, kui sa helistasid getString, see eraldada tüki mälu 434 00:18:56,650 --> 00:18:59,620 string, et kasutajad tüüpi ja siis jälle aadressi ta. 435 00:18:59,620 --> 00:19:02,930 Ja selgub, et kui sa tahad toimida eraldada mälu selle 436 00:19:02,930 --> 00:19:08,390 viis ja tagasi isik, kes nimetatakse et funktsioon, aadress 437 00:19:08,390 --> 00:19:11,870 et tüki mälu, sa absoluutselt ei pane see korstnat 438 00:19:11,870 --> 00:19:14,750 põhja, sest funktsionaalselt on see lihtsalt läheb ei saanud sinu väga 439 00:19:14,750 --> 00:19:17,800 kiiresti, nii et saate ilmselt arvata, kui me ilmselt läheb Toss 440 00:19:17,800 --> 00:19:20,130 selle asemel, nn hunnik. 441 00:19:20,130 --> 00:19:25,290 >> Nii vahel allosas oma mälu on kujundus ja ülaosas oma mälu on 442 00:19:25,290 --> 00:19:26,820 layout on terve hunnik segmentides. 443 00:19:26,820 --> 00:19:29,270 Üks on korstna ja õigus Eespool on hunnik. 444 00:19:29,270 --> 00:19:33,680 Ja hunnik on lihtsalt erinev tüki mälu, mis ei ole kasutatavad funktsioonid 445 00:19:33,680 --> 00:19:34,770 kui neid kutsutakse. 446 00:19:34,770 --> 00:19:38,100 Seda kasutatakse pikaajalise mälu, kui tahad üks funktsioon haarata mõned 447 00:19:38,100 --> 00:19:42,700 mälu ja saaks riputada see kaotamata kontrolli selle üle. 448 00:19:42,700 --> 00:19:45,550 >> Nüüd võid olla kohe näha, et see ei ole 449 00:19:45,550 --> 00:19:48,060 tingimata täiuslik disain. 450 00:19:48,060 --> 00:19:51,350 Nagu oma programmi eraldatud mälu korstnat, või kui helistate rohkem ja 451 00:19:51,350 --> 00:19:55,540 rohkem funktsioone, või kui te eraldada mälu hunnik koos malloc välja nagu 452 00:19:55,540 --> 00:20:00,690 getString teeb, mis selgelt tundub olevat vältimatu probleem? 453 00:20:00,690 --> 00:20:00,860 >> Just. 454 00:20:00,860 --> 00:20:03,150 Sarnaselt sellele, et need nooled on üksteisele suunatud 455 00:20:03,150 --> 00:20:04,380 ei tõota. 456 00:20:04,380 --> 00:20:08,630 Ja tõepoolest, me võiksime väga kiiresti krahhi Programmi mis tahes mitmel viisil. 457 00:20:08,630 --> 00:20:12,050 Tegelikult ma arvan, et meil võiks olla seda teinud kogemata üks kord. 458 00:20:12,050 --> 00:20:14,020 Või kui mitte, teeme ära tahtlikult nüüd. 459 00:20:14,020 --> 00:20:21,330 Lubage mul minna ja kirjutada super kiiresti programmi nimega dontdothis.c. 460 00:20:21,330 --> 00:20:26,730 Ja nüüd ma lähen siin ja ei terav hulka stdio.h. 461 00:20:26,730 --> 00:20:32,620 Olgem kuulutada funktsiooni foo võtab ühtegi argumenti, mis on 462 00:20:32,620 --> 00:20:34,040 tähistatakse samuti poolt tühine. 463 00:20:34,040 --> 00:20:37,830 >> Ja ainus asi foo läheb vaja on Kõne suva, mis ilmselt ei ole 464 00:20:37,830 --> 00:20:39,100 targem mõte, kuid olgu nii. 465 00:20:39,100 --> 00:20:40,490 Ent peamine tühine. 466 00:20:40,490 --> 00:20:45,270 Nüüd on ainus asi, peamine läheb teha, on helistada foo samuti. 467 00:20:45,270 --> 00:20:51,050 Ja lihtsalt peksab, ma lähen käia siin ja öelda printf "Tere 468 00:20:51,050 --> 00:20:52,340 suva. " 469 00:20:52,340 --> 00:20:52,890 >> OK. 470 00:20:52,890 --> 00:21:00,160 Nii et kui ma ei eksi, Tee dontdothis dot kaldkriips. 471 00:21:00,160 --> 00:21:01,960 Ja teeme seda suurem aken - 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 Uh oh. 477 00:21:11,890 --> 00:21:13,100 Ilmselt saab seda teha. 478 00:21:13,100 --> 00:21:15,190 Kurat. 479 00:21:15,190 --> 00:21:16,190 OK. 480 00:21:16,190 --> 00:21:16,580 Oota. 481 00:21:16,580 --> 00:21:17,370 Oodake. 482 00:21:17,370 --> 00:21:18,270 Kas me - 483 00:21:18,270 --> 00:21:20,110 Me ei kasuta seda teha. 484 00:21:20,110 --> 00:21:22,050 >> [Ohkab] 485 00:21:22,050 --> 00:21:25,110 >> Ma tean, aga ma arvan, et me lihtsalt kustutada seda. 486 00:21:25,110 --> 00:21:28,410 Uh, jah. 487 00:21:28,410 --> 00:21:30,660 Kurat. 488 00:21:30,660 --> 00:21:32,640 Lahenda see Rob. 489 00:21:32,640 --> 00:21:34,678 Mida? 490 00:21:34,678 --> 00:21:35,928 See on väga lihtne. 491 00:21:35,928 --> 00:21:43,820 492 00:21:43,820 --> 00:21:47,360 Jah, me pöördusime optimeerimise off. 493 00:21:47,360 --> 00:21:48,970 OK, seista aega. 494 00:21:48,970 --> 00:21:49,950 Nüüd ma ennast paremini. 495 00:21:49,950 --> 00:21:51,390 OK. 496 00:21:51,390 --> 00:21:51,780 Hea küll. 497 00:21:51,780 --> 00:21:53,430 >> Teeme kompileeri see - 498 00:21:53,430 --> 00:21:55,880 Tee sa dontdothis. 499 00:21:55,880 --> 00:22:00,090 Te võib-olla ümber see, et dothis.c vaid hetk. 500 00:22:00,090 --> 00:22:00,710 Vot nii. 501 00:22:00,710 --> 00:22:01,240 Aitäh. 502 00:22:01,240 --> 00:22:02,050 OK. 503 00:22:02,050 --> 00:22:05,480 Nii, et ma olin trükkimine midagi välja oli tegelikult lihtsalt 504 00:22:05,480 --> 00:22:08,150 aeglustab protsessi, millega me oleks nii kaugele jõudnud. 505 00:22:08,150 --> 00:22:08,510 OK. 506 00:22:08,510 --> 00:22:08,870 Phew! 507 00:22:08,870 --> 00:22:11,180 >> Mis siis tegelikult toimub? 508 00:22:11,180 --> 00:22:14,440 Põhjuseks on, just nagu kõrvale, on tee midagi nii panuse ja 509 00:22:14,440 --> 00:22:17,270 väljund kipub olema aeglasem, sest sa on kirjutada märke 510 00:22:17,270 --> 00:22:18,600 ekraan, see on kerida. 511 00:22:18,600 --> 00:22:21,720 Nii pikk lugu lühike, oli mul tegelikult juhtus nii kannatamatu, oleks meil 512 00:22:21,720 --> 00:22:23,260 näinud seda lõpptulemus ka. 513 00:22:23,260 --> 00:22:26,220 Nüüd, kui ma sain sõita print-ups, näeme seda kohe. 514 00:22:26,220 --> 00:22:28,410 Miks see nii on. 515 00:22:28,410 --> 00:22:31,300 Noh, lihtne selgitus, muidugi, on see, et suva ilmselt ei tohiks 516 00:22:31,300 --> 00:22:32,500 kutsudes ise. 517 00:22:32,500 --> 00:22:34,470 >> Nüüd üldiselt see on rekursioon. 518 00:22:34,470 --> 00:22:36,970 Ja me arvasime, paar nädalat tagasi rekursiivne on hea. 519 00:22:36,970 --> 00:22:40,330 Recursion on see maagiline viis väljendada ennast super tabavalt. 520 00:22:40,330 --> 00:22:41,400 Ja see lihtsalt toimib. 521 00:22:41,400 --> 00:22:45,060 Aga seal on põhijoon kõik rekursiivne programmid oleme rääkinud 522 00:22:45,060 --> 00:22:48,260 kohta ja vaatas seni mis oli see, et neil oli mis? 523 00:22:48,260 --> 00:22:52,610 Tugipunkti, mis oli mõned kõva kodeeritud Juhul, ütles mõnes olukorras 524 00:22:52,610 --> 00:22:56,210 ei sea suva, mis on selgelt ei ole siin. 525 00:22:56,210 --> 00:22:58,920 >> Mis siis tegelikult toimub mõttes see pilt? 526 00:22:58,920 --> 00:23:01,790 Noh, kui peamine nõuab suva, see saab viilu mälu. 527 00:23:01,790 --> 00:23:04,150 Kui foo kutsub suva, kui ta saab viil mälu. 528 00:23:04,150 --> 00:23:06,430 Kui foo kutsub suva, see läheb tükk. 529 00:23:06,430 --> 00:23:07,080 Läheb tükk. 530 00:23:07,080 --> 00:23:08,120 Läheb tükk. 531 00:23:08,120 --> 00:23:09,460 Sest suva kunagi tagasi. 532 00:23:09,460 --> 00:23:12,160 Me ei ole kunagi kustutamine üks neist raamid pinu. 533 00:23:12,160 --> 00:23:15,930 Nii et me puhub läbi hunnik, ei rääkimata, kes teab mida veel, ja 534 00:23:15,930 --> 00:23:19,600 me ületamata meie niinimetatud segment mälu. 535 00:23:19,600 --> 00:23:21,790 Viga minna killustatust vale. 536 00:23:21,790 --> 00:23:24,110 >> Seega lahendus on olemas Loomulikult ei saa seda teha. 537 00:23:24,110 --> 00:23:28,830 Aga suurem mõju on see, et jah, seal absoluutselt on mõned piirmäära 538 00:23:28,830 --> 00:23:32,470 isegi kui see ei ole täpselt määratletud, selle kohta, kuidas palju funktsioone saab helistada 539 00:23:32,470 --> 00:23:34,970 programm, mitu korda funktsiooni võib helistada ise. 540 00:23:34,970 --> 00:23:38,430 Nii et kuigi me tegime jutlustama rekursioon kui see potentsiaalselt maagiline asi 541 00:23:38,430 --> 00:23:41,870 Paar nädalat tagasi, et sigma funktsioon, ja kui me saada andmeid 542 00:23:41,870 --> 00:23:45,270 struktuuride ja CS50, näete teisi taotlused, see ei ole 543 00:23:45,270 --> 00:23:46,500 tingimata parim asi. 544 00:23:46,500 --> 00:23:50,070 Sest kui funktsioon nõuab ise, kutsub ise, isegi kui seal on alus 545 00:23:50,070 --> 00:23:54,860 juhul, kui sa ei tabanud, et aluspõhimõtted eest 1000 kõned või 10000 kõnede poolt 546 00:23:54,860 --> 00:23:58,800 et aeg, mida oleks võinud otsa toas oma nn korstna ja vajuta 547 00:23:58,800 --> 00:24:00,400 mõned teised segmendid mälu. 548 00:24:00,400 --> 00:24:03,950 Nii see ka on disaini kompromiss vahel elegants ja vahel 549 00:24:03,950 --> 00:24:06,920 stabiilsuses teie rakendamist. 550 00:24:06,920 --> 00:24:10,780 >> Nii et seal on veel negatiivsed või teine ​​gotcha et me oleme 551 00:24:10,780 --> 00:24:11,720 teinud siiani. 552 00:24:11,720 --> 00:24:12,980 Kui ma helistasin getString - 553 00:24:12,980 --> 00:24:15,120 lase mul minna tagasi tere-2. 554 00:24:15,120 --> 00:24:18,170 Pange tähele, et ma helistan getString, tagastava aadress. 555 00:24:18,170 --> 00:24:20,730 Ja me väidame täna sellele aadressile on hunnik. 556 00:24:20,730 --> 00:24:24,480 Ja nüüd ma olen väljatrükk string sellel aadressil. 557 00:24:24,480 --> 00:24:27,000 Kuid me pole kunagi kutsutud vastand getString. 558 00:24:27,000 --> 00:24:30,850 Meil pole kunagi olnud CALLL funktsioon nagu ungetstring, kuhu käsi tagasi 559 00:24:30,850 --> 00:24:31,610 et mälu. 560 00:24:31,610 --> 00:24:33,250 Aga ausalt öeldes me ilmselt oleks pidanud olema. 561 00:24:33,250 --> 00:24:37,390 Sest kui me küsime endiselt arvuti mälu teel keegi nagu 562 00:24:37,390 --> 00:24:40,830 getString kuid ei anna see tagasi, kindlasti et liiga on kohustatud viima 563 00:24:40,830 --> 00:24:42,970 probleeme, millega me otsa mälu. 564 00:24:42,970 --> 00:24:46,140 >> Ja tegelikult, saame otsida need probleeme uue tööriista, mille kasutamine 565 00:24:46,140 --> 00:24:47,640 on veidi segasena kirjutada. 566 00:24:47,640 --> 00:24:50,960 Aga lubage mul minna ja tere it up ekraanil vaid hetk. 567 00:24:50,960 --> 00:24:56,940 Ma lähen edasi minna ja käivitada Valgrind parameeter, mille esimene käsk 568 00:24:56,940 --> 00:25:00,260 line argument on nimi kõnealuse programmi tere-2. 569 00:25:00,260 --> 00:25:02,650 Ja kahjuks on see toodang on metsikult 570 00:25:02,650 --> 00:25:04,290 keeruline mingit põhjust. 571 00:25:04,290 --> 00:25:06,280 Nii me näeme kõik, et jama. 572 00:25:06,280 --> 00:25:07,530 David on märgitud minu nimi. 573 00:25:07,530 --> 00:25:09,760 Nii et see programm tegelikult töötab. 574 00:25:09,760 --> 00:25:11,180 Ja nüüd me saame selle toodangut. 575 00:25:11,180 --> 00:25:13,400 >> Nii Valgrind sarnaneb sisuga GDB. 576 00:25:13,400 --> 00:25:14,950 See pole siluri iseenesest. 577 00:25:14,950 --> 00:25:16,270 Aga see on mälu kontrollija. 578 00:25:16,270 --> 00:25:20,140 See on programm, mis töötab teie programmi ja ütleb teile, kui teil palutakse 579 00:25:20,140 --> 00:25:23,860 arvuti mälu ja kunagi andis ta tagasi, mis tähendab, et teil on 580 00:25:23,860 --> 00:25:24,570 mäluleke. 581 00:25:24,570 --> 00:25:26,240 Ja mälu lekked kipuvad olema halb. 582 00:25:26,240 --> 00:25:29,120 Ja sa ei kasutajate arvutid on ilmselt tundis seda, kas teil on 583 00:25:29,120 --> 00:25:30,300 Mac või PC. 584 00:25:30,300 --> 00:25:33,730 Kas olete kunagi kasutanud oma arvutit kuigi mitte rebooted mitmes 585 00:25:33,730 --> 00:25:36,820 päeva, või olete lihtsalt sain palju programmid töötavad, ja neetud asi 586 00:25:36,820 --> 00:25:42,360 aeglustab järsult pidurdada, või vähemalt see on super tüütu kasutada, sest 587 00:25:42,360 --> 00:25:44,350 kõike just super aeglane. 588 00:25:44,350 --> 00:25:46,260 >> Nüüd, võib olla mis tahes mitmel põhjusel. 589 00:25:46,260 --> 00:25:49,600 See võiks olla lõputu silmuse, viga kellegi kood, või lihtsamalt, see 590 00:25:49,600 --> 00:25:53,250 võib tähendada, et te kasutate rohkem mälu või üritab, kui teie 591 00:25:53,250 --> 00:25:54,920 arvuti tegelikult on. 592 00:25:54,920 --> 00:25:57,770 Ja võib-olla seal on viga mõnes programmis et hoida paludes mälu. 593 00:25:57,770 --> 00:26:02,480 Brauserid aastaid olnud tuntud see, paludes rohkem ja rohkem mälu 594 00:26:02,480 --> 00:26:03,870 kuid kunagi teisaldus tagasi. 595 00:26:03,870 --> 00:26:07,220 Kindlasti, kui teil on vaid piiratud mälu, sa ei saa küsida 596 00:26:07,220 --> 00:26:09,990 lõpmatult palju kordi mõned, et mälu. 597 00:26:09,990 --> 00:26:13,070 >> Ja mis sa näed siin, kuigi jälle Valgrind väljund on 598 00:26:13,070 --> 00:26:17,490 tarbetult keeruline pilk Esiteks, see on huvitav osa. 599 00:26:17,490 --> 00:26:18,890 Heap - 600 00:26:18,890 --> 00:26:20,060 kasutusel väljumist. 601 00:26:20,060 --> 00:26:22,810 Nii et siin on, kui palju mälu oli kasutusel hunnik juures 602 00:26:22,810 --> 00:26:24,300 aeg minu programm lahkus - 603 00:26:24,300 --> 00:26:27,280 ilmselt kuus baiti ühe ploki. 604 00:26:27,280 --> 00:26:28,710 Nii et ma lähen laine mu käed millise plokk on. 605 00:26:28,710 --> 00:26:31,270 Mõtle see on lihtsalt kamakas, rohkem tehniline sõna patakas. 606 00:26:31,270 --> 00:26:33,140 Aga kuus baiti - 607 00:26:33,140 --> 00:26:36,870 millised on kuus baiti et olid veel kasutusel? 608 00:26:36,870 --> 00:26:37,390 >> Täpselt. 609 00:26:37,390 --> 00:26:41,520 D-A-V-I-D Kenoviiva null, viis kirja nimi pluss null terminaator. 610 00:26:41,520 --> 00:26:46,350 Nii et see programm valgrind märganud, et ma küsis kuus baiti ilmselt poolt 611 00:26:46,350 --> 00:26:48,950 viis getString, kuid mitte kunagi andis neile tagasi. 612 00:26:48,950 --> 00:26:52,030 Ja tegelikult, see ei pruugi olla nii selge kui mu programm ei ole kolme 613 00:26:52,030 --> 00:26:53,590 rida, aga see on 300 rida. 614 00:26:53,590 --> 00:26:56,920 Nii saame tegelikult annab teise käsu line argument Valgrind et 615 00:26:56,920 --> 00:26:58,290 muuta see lobise. 616 00:26:58,290 --> 00:26:59,760 See on natuke tüütu meeles pidada. 617 00:26:59,760 --> 00:27:01,580 Aga kui mina - 618 00:27:01,580 --> 00:27:01,930 vaatame. 619 00:27:01,930 --> 00:27:03,540 Lekke - 620 00:27:03,540 --> 00:27:05,030 Oli see lekkida - 621 00:27:05,030 --> 00:27:07,580 isegi ma ei mäleta mis see on ära kasutatud. 622 00:27:07,580 --> 00:27:08,550 >> - Lekke kontroll võrdub täis. 623 00:27:08,550 --> 00:27:10,180 Jah, tänan. 624 00:27:10,180 --> 00:27:12,520 - Lekke kontroll võrdub täis. 625 00:27:12,520 --> 00:27:13,800 Enter. 626 00:27:13,800 --> 00:27:14,940 Sama programm töötab. 627 00:27:14,940 --> 00:27:16,180 Kirjuta David uuesti. 628 00:27:16,180 --> 00:27:17,660 Nüüd ma näen veidi täpsemalt. 629 00:27:17,660 --> 00:27:20,890 Aga alla hunnik kokkuvõte, mis on identne nelja - ah, 630 00:27:20,890 --> 00:27:22,120 see on omamoodi tore. 631 00:27:22,120 --> 00:27:25,460 Nüüd Valgrind tegelikult otsin natuke raskem minu kood. 632 00:27:25,460 --> 00:27:29,580 Ja ta ütleb, et ilmselt malloc real - 633 00:27:29,580 --> 00:27:30,580 me välja suumida. 634 00:27:30,580 --> 00:27:31,980 Real - 635 00:27:31,980 --> 00:27:32,930 me ei näe, mida liin on. 636 00:27:32,930 --> 00:27:35,110 Aga malloc on esimene süüdlane. 637 00:27:35,110 --> 00:27:38,630 Seal on blogi malloc. 638 00:27:38,630 --> 00:27:39,810 >> Olgu? 639 00:27:39,810 --> 00:27:40,450 OK, ei. 640 00:27:40,450 --> 00:27:40,940 Õigus? 641 00:27:40,940 --> 00:27:42,520 Ma helistasin getString. 642 00:27:42,520 --> 00:27:44,460 getString ilmselt nõuab malloc. 643 00:27:44,460 --> 00:27:47,800 Nii et mida koodirida on ilmselt süüdi selle eest, et 644 00:27:47,800 --> 00:27:49,050 eraldatakse see mälu? 645 00:27:49,050 --> 00:27:51,560 646 00:27:51,560 --> 00:27:55,540 Oletame, et kes kirjutas malloc on olnud juba piisavalt kaua, et see on 647 00:27:55,540 --> 00:27:56,390 ei ole nende süü. 648 00:27:56,390 --> 00:27:57,520 Nii et see on tõenäoliselt minu. 649 00:27:57,520 --> 00:28:02,000 getString in cs50.c - nii et see on fail kusagil arvutis - 650 00:28:02,000 --> 00:28:05,210 vastavalt 286 tundub olevat süüdlane. 651 00:28:05,210 --> 00:28:08,140 Nüüd oletame, et CS50 olnud ümber korralik summa aega, nii et 652 00:28:08,140 --> 00:28:09,720 me liiga on eksimatu. 653 00:28:09,720 --> 00:28:14,080 Ja nii on see ilmselt ei getString et viga peitub, vaid pigem 654 00:28:14,080 --> 00:28:17,810 tere-2.c line 18. 655 00:28:17,810 --> 00:28:20,670 >> Võtame pilk mida see rida 18 oli. 656 00:28:20,670 --> 00:28:21,130 Oh. 657 00:28:21,130 --> 00:28:27,130 Kuidagi see liin ei pruugi lollakas, per se, kuid see on ka põhjus, 658 00:28:27,130 --> 00:28:28,630 taga, et mälu leke. 659 00:28:28,630 --> 00:28:32,140 Nii super lihtsalt, milline oleks intuitiivselt olla lahendus siin? 660 00:28:32,140 --> 00:28:34,710 Kui me palume mälu, ei ole kunagi olnud andes selle tagasi, ja mis tundub olevat 661 00:28:34,710 --> 00:28:37,940 probleem, sest aja jooksul minu arvuti võib mälu täis, võib aeglustada 662 00:28:37,940 --> 00:28:42,110 alla, halbu asju võib juhtuda ka, Mis on lihtne intuitiivne lahendus? 663 00:28:42,110 --> 00:28:43,140 Lihtsalt anna see tagasi. 664 00:28:43,140 --> 00:28:44,770 >> Kuidas vabastada, et mälu? 665 00:28:44,770 --> 00:28:49,970 Noh, õnneks see on üsna lihtne lihtsalt öelda vaba nimi. 666 00:28:49,970 --> 00:28:51,260 Ja me oleme seda varem teinud. 667 00:28:51,260 --> 00:28:55,890 Aga sa võid sisuliselt mõelda vaba kui vastupidine malloc. 668 00:28:55,890 --> 00:28:58,030 tasuta on vastupidine eraldades mälu. 669 00:28:58,030 --> 00:28:59,540 Nüüd lubage mul kompileeri see. 670 00:28:59,540 --> 00:29:02,050 Tee tere-2. 671 00:29:02,050 --> 00:29:04,620 Lubage mul kasutada seda uuesti. tere-2 David. 672 00:29:04,620 --> 00:29:07,290 Seega tundub, et töötada täpselt samamoodi. 673 00:29:07,290 --> 00:29:11,180 Aga kui ma lähen tagasi Valgrind ja uuesti käivitada Sama käsu minu värskelt 674 00:29:11,180 --> 00:29:14,720 koostatud programmi kirjutades minu nimi on enne - 675 00:29:14,720 --> 00:29:15,370 kena. 676 00:29:15,370 --> 00:29:16,760 Heap kokkuvõte - 677 00:29:16,760 --> 00:29:17,740 kasutusel exit - 678 00:29:17,740 --> 00:29:19,370 null baiti null plokke. 679 00:29:19,370 --> 00:29:21,840 Ja see on super kena, kõik hunnik plokid vabastati. 680 00:29:21,840 --> 00:29:23,480 Lekked on võimalikud. 681 00:29:23,480 --> 00:29:27,200 >> Nii tulemas, mitte Ülesanded 4, kuid Ülesanded 5 kohtuekspertiisi 682 00:29:27,200 --> 00:29:30,740 ja edasi, see liiga muutub Meetme õigsuse oma 683 00:29:30,740 --> 00:29:33,630 programm, kas teil on või ei ole mälu lekked. 684 00:29:33,630 --> 00:29:36,900 Aga õnneks mitte ainult võite põhjendada nende kaudu intuitiivselt, mis 685 00:29:36,900 --> 00:29:40,430 on väidetavalt lihtne väikesed programmid kuid raskem suuremate programmide puhul 686 00:29:40,430 --> 00:29:43,860 Valgrind, neile suuremate programmide puhul aitab tuvastada 687 00:29:43,860 --> 00:29:45,360 erilist probleemi. 688 00:29:45,360 --> 00:29:47,500 >> Aga on veel üks probleem mis võivad tekkida. 689 00:29:47,500 --> 00:29:51,245 Lubage mul avada see fail siin, mis on, jälle veidi lihtne näide. 690 00:29:51,245 --> 00:29:53,760 Kuid olgem keskenduda see programm teeb. 691 00:29:53,760 --> 00:29:55,190 Seda nimetatakse memory.c. 692 00:29:55,190 --> 00:29:58,380 Me postitada selle hiljem täna zip tänase lähtekoodi. 693 00:29:58,380 --> 00:30:01,610 Ja teate, et mul on funktsioon nimega f, et ei võta argumente ja 694 00:30:01,610 --> 00:30:02,800 tagasi midagi. 695 00:30:02,800 --> 00:30:07,240 Vastavalt 20, ma olen ilmselt kuulutatakse pointer int ja nimetades seda x. 696 00:30:07,240 --> 00:30:09,570 Ma määrates on tagasi väärtus malloc. 697 00:30:09,570 --> 00:30:14,590 Ja just, et oleks selge, kui palju baite olen Ma ilmselt saan tagasi malloc 698 00:30:14,590 --> 00:30:17,080 selles olukorras? 699 00:30:17,080 --> 00:30:18,040 >> Ilmselt 40. 700 00:30:18,040 --> 00:30:18,840 Kust sa selle said? 701 00:30:18,840 --> 00:30:22,410 Noh, kui te mäletate, et int on sageli 4 baiti, vähemalt see on 702 00:30:22,410 --> 00:30:25,110 aparaat, 10 korda 4 on ilmselt 40. 703 00:30:25,110 --> 00:30:28,920 Nii malloc tagastava aadress tüki mälu ja ladustamiseks, mis 704 00:30:28,920 --> 00:30:30,800 käsitleda lõppkokkuvõttes x. 705 00:30:30,800 --> 00:30:32,570 Seega peab olema selge, mida siis toimub? 706 00:30:32,570 --> 00:30:34,990 Noh, las ma vahetan tagasi meie pilt siin. 707 00:30:34,990 --> 00:30:38,150 Ma ei või lihtsalt juhtida alt mu arvuti mällu, lubage mul minna ja 708 00:30:38,150 --> 00:30:42,990 juhtida kogu ristküliku esindab kõiki minu RAM. 709 00:30:42,990 --> 00:30:44,790 >> Me ütleme, et korstnat on põhjas. 710 00:30:44,790 --> 00:30:47,010 Ja seal on tekst segmendis uninitialized andmed. 711 00:30:47,010 --> 00:30:49,880 Aga ma lihtsalt abstraktne need muud asjad ära nagu dot, dot dot. 712 00:30:49,880 --> 00:30:53,470 Ma lihtsalt viidata sellele nagu hunnik ülaosas. 713 00:30:53,470 --> 00:30:57,070 Ja siis allosas see pilt, esindada peamine, ma lähen 714 00:30:57,070 --> 00:30:59,880 anda see viiludeks mälu stack. 715 00:30:59,880 --> 00:31:03,150 F, ma annan ta viil mälu kohta virna. 716 00:31:03,150 --> 00:31:05,140 Nüüd sain konsulteerida oma lähtekoodi uuesti. 717 00:31:05,140 --> 00:31:07,170 Millised on kohalike muutujate jaoks peamine? 718 00:31:07,170 --> 00:31:10,710 Ilmselt mitte midagi, nii et viil on tõhusalt tühi või isegi mitte nii suur 719 00:31:10,710 --> 00:31:11,600 kui ma olen ära,. 720 00:31:11,600 --> 00:31:15,730 Aga f, mul on kohaliku muutuja, mida nimetatakse x. 721 00:31:15,730 --> 00:31:20,410 Nii et ma lähen edasi minna ja f tüki mälu, nimetades seda x. 722 00:31:20,410 --> 00:31:24,680 >> Ja nüüd malloc 10 korda 4, Nii malloc 40, kus see on 723 00:31:24,680 --> 00:31:25,430 mälu tuleb? 724 00:31:25,430 --> 00:31:27,530 Me ei tõmmatud pilt nagu seda enne. 725 00:31:27,530 --> 00:31:31,140 Aga oletame, et see on tõhus tulevad siia, et üks, 726 00:31:31,140 --> 00:31:33,170 kaks, kolm, neli, viis. 727 00:31:33,170 --> 00:31:34,680 Ja nüüd ma pean neist 40. 728 00:31:34,680 --> 00:31:37,540 Nii et ma lihtsalt ei dot, dot, dot soovitada et seal on isegi rohkem mälu 729 00:31:37,540 --> 00:31:39,350 tulevad tagasi hunnik. 730 00:31:39,350 --> 00:31:40,710 Nüüd sellest, mis on aadress? 731 00:31:40,710 --> 00:31:42,620 Valime meie meelevaldne käsitleda nagu alati - 732 00:31:42,620 --> 00:31:46,310 Ox123, kuigi see on ilmselt läheb olla midagi hoopis muud. 733 00:31:46,310 --> 00:31:50,420 See on aadress esimene bait mälu, et ma küsin malloc eest. 734 00:31:50,420 --> 00:31:53,630 >> Nii lühike, kui liin 20 hukatakse, mis on sõna otseses mõttes 735 00:31:53,630 --> 00:31:57,170 ladestunud x here? 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 ebahuvitav. 739 00:32:01,550 --> 00:32:03,200 See tähendab lihtsalt, siin on kuueteistkümnendsüsteemis number. 740 00:32:03,200 --> 00:32:06,490 Aga mis peamine on see, et mida ma poest aastal x, mis on kohaliku muutuja. 741 00:32:06,490 --> 00:32:10,260 Aga selle andmetüübi jällegi on aadress int. 742 00:32:10,260 --> 00:32:12,710 Noh, ma lähen hoida Ox123. 743 00:32:12,710 --> 00:32:16,610 Aga jälle, kui see on liiga keeruline asjatult, kui ma leidke 744 00:32:16,610 --> 00:32:21,490 tagasi, võime abstraktselt see ära üsna mõistlikult ja lihtsalt öelda, et x on 745 00:32:21,490 --> 00:32:23,910 kursor et patakas mälu. 746 00:32:23,910 --> 00:32:24,070 >> OK. 747 00:32:24,070 --> 00:32:26,230 Nüüd on küsimus käepärast on järgmine - 748 00:32:26,230 --> 00:32:29,910 liin 21, selgub, on lollakas. 749 00:32:29,910 --> 00:32:31,160 Miks? 750 00:32:31,160 --> 00:32:34,890 751 00:32:34,890 --> 00:32:36,930 >> Vabandust? 752 00:32:36,930 --> 00:32:38,640 See ei pea - 753 00:32:38,640 --> 00:32:40,390 öelda, et veel kord. 754 00:32:40,390 --> 00:32:41,240 Noh, see ei ole tasuta. 755 00:32:41,240 --> 00:32:42,350 Nii et see teine ​​aga. 756 00:32:42,350 --> 00:32:45,000 Nii et seal on üks teine ​​aga spetsiaalselt real 21. 757 00:32:45,000 --> 00:32:49,480 758 00:32:49,480 --> 00:32:50,040 >> Täpselt. 759 00:32:50,040 --> 00:32:54,980 See lihtne rida koodi on vaid buffer overflow, puhvri ületäitumise. 760 00:32:54,980 --> 00:32:57,050 Puhver tähendab lihtsalt tüki mälu. 761 00:32:57,050 --> 00:33:01,520 Aga et patakas mälu suurus 10, 10 täisarvud, mis tähendab, et kui me 762 00:33:01,520 --> 00:33:05,350 indeks, kasutades süntaktiline suhkur massiivi indeks, ruut 763 00:33:05,350 --> 00:33:09,220 sulgudes, on teil juurdepääs x sulg 0 x sulg 1 x, 764 00:33:09,220 --> 00:33:10,390 sulg dot, dot, dot. 765 00:33:10,390 --> 00:33:13,270 x sulg 9 on suurim ühe. 766 00:33:13,270 --> 00:33:17,680 Nii et kui ma teen x sulg 10, kus Ma olen tegelikult läheb mälu? 767 00:33:17,680 --> 00:33:19,120 >> Noh, kui mul on 10 int - 768 00:33:19,120 --> 00:33:21,070 olgem tegelikult teha kõik Nende siin. 769 00:33:21,070 --> 00:33:22,700 Nii et oli esimese viie. 770 00:33:22,700 --> 00:33:24,660 Siin on teine ​​viis ints. 771 00:33:24,660 --> 00:33:29,580 Nii x sulg 0 on siin. x sulg 1 on siin. x sulg 9 on siin. x sulg 772 00:33:29,580 --> 00:33:37,960 10 on siin, mis tähendab, ma ütlen, vastavalt 21, arvuti panna 773 00:33:37,960 --> 00:33:39,400 number kus? 774 00:33:39,400 --> 00:33:42,010 Number 0, kus? 775 00:33:42,010 --> 00:33:43,380 Noh, see on 0, jah. 776 00:33:43,380 --> 00:33:45,460 Aga asjaolu, et selle 0 on selline juhus. 777 00:33:45,460 --> 00:33:47,140 See võib olla mitmeid 50, kõigi me hoolime. 778 00:33:47,140 --> 00:33:50,480 Aga me üritame panna see x sulg 10, mis on koht, kus see 779 00:33:50,480 --> 00:33:53,700 küsimärk on koostatud, mis see ei ole hea asi. 780 00:33:53,700 --> 00:33:57,070 See programm võib väga hästi lennuõnnetuse tagajärjel. 781 00:33:57,070 --> 00:33:59,400 >> Nüüd saab minna ja vaadata, kas see on tõepoolest see, mis juhtub. 782 00:33:59,400 --> 00:34:02,600 Tee mälu, sest fail nimetatakse memory.c. 783 00:34:02,600 --> 00:34:05,950 Lähme edasi ja joosta Programmi mälu. 784 00:34:05,950 --> 00:34:08,239 Nii et meil vedas, tegelikult tundub. 785 00:34:08,239 --> 00:34:09,340 Meil vedas. 786 00:34:09,340 --> 00:34:11,060 Aga vaatame, kas me nüüd joosta Valgrind. 787 00:34:11,060 --> 00:34:14,170 Esmapilgul minu programm võib näivad olevat täiesti õige. 788 00:34:14,170 --> 00:34:18,010 Aga lubage mul joosta Valgrind koos - Lekke kontroll võrdub terve mälu. 789 00:34:18,010 --> 00:34:20,110 >> Ja nüüd, kui ma saan seda - 790 00:34:20,110 --> 00:34:21,030 huvitav. 791 00:34:21,030 --> 00:34:26,800 Vigane kirjutada suurus 4 juures line 21 memory.c. 792 00:34:26,800 --> 00:34:29,284 Line 21 memory.c on milline? 793 00:34:29,284 --> 00:34:30,340 Oh, huvitav. 794 00:34:30,340 --> 00:34:31,080 Aga oota. 795 00:34:31,080 --> 00:34:32,389 Suurus 4, mis see on, viidates? 796 00:34:32,389 --> 00:34:34,969 Ma ainult ei üks kirjutada, aga see on suurus 4. 797 00:34:34,969 --> 00:34:36,889 Miks on 4? 798 00:34:36,889 --> 00:34:39,280 See on sellepärast, et see on keskmine, mis on jällegi neli baiti. 799 00:34:39,280 --> 00:34:42,510 Nii Valgrind leidnud vea, et mina, piilus minu kood, ei ole. 800 00:34:42,510 --> 00:34:45,040 Ja võib-olla oma TF ja millal mitte. 801 00:34:45,040 --> 00:34:48,469 Mis aga Valgrind kindlasti leidnud, et me teinud vea seal, isegi 802 00:34:48,469 --> 00:34:52,719 kuigi me vedas ja arvuti otsustas, eh, ma ei kavatse krahhi 803 00:34:52,719 --> 00:34:57,470 lihtsalt sellepärast, et sa puudutasid üks bait, üks int väärtuses mälu, et sa ei 804 00:34:57,470 --> 00:34:58,550 tegelikult ise. 805 00:34:58,550 --> 00:35:00,380 >> Noh, mida muud on lollakas siin. 806 00:35:00,380 --> 00:35:01,180 Aadress - 807 00:35:01,180 --> 00:35:03,190 see on hull otsin aadress kuueteistkümnendsüsteemis. 808 00:35:03,190 --> 00:35:06,890 See tähendab lihtsalt kuskil kivikangur null baiti pärast ploki suurus 40 809 00:35:06,890 --> 00:35:07,620 jaotatakse. 810 00:35:07,620 --> 00:35:10,610 Lubage mul välja suumida siin ja vaata, kas see on natuke rohkem kasulik. 811 00:35:10,610 --> 00:35:11,410 Huvitav. 812 00:35:11,410 --> 00:35:15,600 40 baiti on kindlasti kadunud kaotus rekord 1 1. 813 00:35:15,600 --> 00:35:17,840 Jällegi rohkem sõnu kui on kasulik siin. 814 00:35:17,840 --> 00:35:21,350 Aga mis põhineb esile rida, kus ma peaks ilmselt keskenduda oma 815 00:35:21,350 --> 00:35:24,070 tähelepanu veel viga? 816 00:35:24,070 --> 00:35:26,570 Paistab line 20 memory.c. 817 00:35:26,570 --> 00:35:30,990 >> Kui me läheme tagasi liin 20, mis on üks, mida tuvastatud varem. 818 00:35:30,990 --> 00:35:33,030 Ja see ei ole tingimata lollakas. 819 00:35:33,030 --> 00:35:35,160 Aga meil on see vastupidine mõju. 820 00:35:35,160 --> 00:35:38,790 Niisiis, kuidas ma parandada vähemalt üks neist vigadest? 821 00:35:38,790 --> 00:35:42,240 Mida ma tegema pärast rida 21? 822 00:35:42,240 --> 00:35:47,110 Ma võiks teha tasuta x, nii on tagasi anda, et mälu. 823 00:35:47,110 --> 00:35:49,230 Ja kuidas ma saan määrata see viga? 824 00:35:49,230 --> 00:35:52,120 Ma peaks kindlasti minema mitte kaugemale kui 0. 825 00:35:52,120 --> 00:35:53,670 Nii et lubage mul proovida ja uuesti käivitada. 826 00:35:53,670 --> 00:35:56,080 Vabandust, kindlasti minna mitte kaugemale kui 9. 827 00:35:56,080 --> 00:35:57,510 Tee mälu. 828 00:35:57,510 --> 00:36:00,650 Lubage mul uuesti, Valgrind suuremas aknas. 829 00:36:00,650 --> 00:36:01,580 Ja nüüd vaata. 830 00:36:01,580 --> 00:36:02,250 Nice. 831 00:36:02,250 --> 00:36:03,270 Kõik hunnik plokid vabastati. 832 00:36:03,270 --> 00:36:04,270 Lekked on võimalikud. 833 00:36:04,270 --> 00:36:07,520 Ja üles üle siin, seal ei mainita enam on kehtetu õigus. 834 00:36:07,520 --> 00:36:09,820 >> Lihtsalt saada ahne, ja olgem kas teine ​​demonstratsioon 835 00:36:09,820 --> 00:36:11,050 ei lähe nii nagu ette nähtud - 836 00:36:11,050 --> 00:36:12,560 Ma ei saada õnnelik hetk tagasi. 837 00:36:12,560 --> 00:36:15,530 Ja asjaolu, et see on 0 on ehk asjatult eksitav. 838 00:36:15,530 --> 00:36:20,650 Teeme 50, mõnevõrra meelevaldne number, siis mälu dot kaldkriipsuga mälu - 839 00:36:20,650 --> 00:36:21,410 ikka veab. 840 00:36:21,410 --> 00:36:22,510 Midagi krahh. 841 00:36:22,510 --> 00:36:26,150 Oletame, ma lihtsalt teha midagi tõeliselt rumal, ja ma teen 100. 842 00:36:26,150 --> 00:36:30,360 Lubage mul uusversioon mälu dot kaldkriipsuga mälu - 843 00:36:30,360 --> 00:36:31,075 vedas jälle. 844 00:36:31,075 --> 00:36:32,800 Kuidas 1000? 845 00:36:32,800 --> 00:36:35,370 ints kaugemale umbes nii, kus ma peaks olema? 846 00:36:35,370 --> 00:36:37,410 Tee mälu - 847 00:36:37,410 --> 00:36:38,570 kurat. 848 00:36:38,570 --> 00:36:39,920 >> [Naer] 849 00:36:39,920 --> 00:36:41,270 >> OK. 850 00:36:41,270 --> 00:36:43,920 Ärme jändama enam. 851 00:36:43,920 --> 00:36:45,120 Rerun mälu. 852 00:36:45,120 --> 00:36:45,840 Vot nii. 853 00:36:45,840 --> 00:36:46,410 Hea küll. 854 00:36:46,410 --> 00:36:52,500 Nii ilmselt teil indeks 100000 ints kaugemale, kui te oleks pidanud 855 00:36:52,500 --> 00:36:54,410 mälu, halbu asju juhtuda. 856 00:36:54,410 --> 00:36:56,430 Nii et see ei ole ilmselt raske, kiire reegel. 857 00:36:56,430 --> 00:36:58,190 Mul oli selline kasutades kohtuprotsessi ja viga saada seal. 858 00:36:58,190 --> 00:37:02,230 Aga see on, sest pikk lugu lühike, arvuti mälu on ka jagatud 859 00:37:02,230 --> 00:37:03,580 neisse asju nimetatakse segmentides. 860 00:37:03,580 --> 00:37:07,260 Ja mõnikord, arvuti tegelikult on andnud teile natuke rohkem mälu 861 00:37:07,260 --> 00:37:08,400 kui te küsite. 862 00:37:08,400 --> 00:37:12,170 Aga efektiivsus, see on lihtsalt lihtsam rohkem mälu, aga ainult sulle 863 00:37:12,170 --> 00:37:13,780 et sa saad selle osa. 864 00:37:13,780 --> 00:37:16,370 >> Ja kui sul veab mõnikord seega sa võiksid puudutada 865 00:37:16,370 --> 00:37:17,795 mälu, mis ei kuulu teile. 866 00:37:17,795 --> 00:37:21,860 Teil ei ole garantiid, et see, mida raha paned sinna jääb sinna, sest 867 00:37:21,860 --> 00:37:25,080 arvuti ikka arvab, et see ei sinu, kuid see ei ole tingimata positiivsed 868 00:37:25,080 --> 00:37:29,910 lüüa teine ​​segment mälu arvuti ja põhjustada viga nagu 869 00:37:29,910 --> 00:37:31,710 see siin. 870 00:37:31,710 --> 00:37:32,060 Hea küll. 871 00:37:32,060 --> 00:37:37,240 Küsimusi siis mälu? 872 00:37:37,240 --> 00:37:37,590 >> Hea küll. 873 00:37:37,590 --> 00:37:40,610 Võtame pilk siin, siis on midagi, mida me oleme võtnud vastu 874 00:37:40,610 --> 00:37:48,361 antud üsna pikka aega, mis on see fail nimega cs50.h. 875 00:37:48,361 --> 00:37:49,420 Nii et see on fail. 876 00:37:49,420 --> 00:37:51,130 Need on lihtsalt terve hunnik kommentaaride up top. 877 00:37:51,130 --> 00:37:53,900 Ja sa võisid vaatasid seda, kui sa torkasid ümber seadme. 878 00:37:53,900 --> 00:37:57,000 Aga selgub, et kogu aeg, kui me kasutasid stringi 879 00:37:57,000 --> 00:38:01,130 sünonüüm, mille abil me tunnistada et sünonüüm oli see 880 00:38:01,130 --> 00:38:03,990 märksõna typedef, tüübi definitsioon. 881 00:38:03,990 --> 00:38:07,500 Ja me põhiliselt öeldes teha string sünonüümina char star. 882 00:38:07,500 --> 00:38:11,190 See vahend, mille pinu loodud neid Apupyörät tuntakse 883 00:38:11,190 --> 00:38:12,040 string. 884 00:38:12,040 --> 00:38:14,830 >> Nüüd siin on lihtsalt prototüüp jaoks getchar. 885 00:38:14,830 --> 00:38:17,350 Me oleks võinud seda varem näinud, kuid see on tõesti see, mida ta teeb. getchar 886 00:38:17,350 --> 00:38:19,070 ei võta argumente, tagastab char. 887 00:38:19,070 --> 00:38:21,340 getdouble võtab ühtegi argumenti, tagastab topelt. 888 00:38:21,340 --> 00:38:24,440 getfloat võtab ühtegi argumenti, naaseb float, ja nii edasi. 889 00:38:24,440 --> 00:38:27,270 getint on siin. getlonglong on siin. 890 00:38:27,270 --> 00:38:28,820 Ja getString on siin. 891 00:38:28,820 --> 00:38:29,420 Ja ongi kõik. 892 00:38:29,420 --> 00:38:33,080 See lilla joon on veel eeltöötluse Direktiivi tõttu 893 00:38:33,080 --> 00:38:35,550 hashtag alguses ta. 894 00:38:35,550 --> 00:38:35,870 >> Hea küll. 895 00:38:35,870 --> 00:38:38,380 Nüüd lubage mul minna cs50.c. 896 00:38:38,380 --> 00:38:40,400 Ja me ei räägi liiga kaua seda. 897 00:38:40,400 --> 00:38:43,280 Aga teile pilguheit mis on kestnud kõik see 898 00:38:43,280 --> 00:38:46,434 aeg, andke minna - 899 00:38:46,434 --> 00:38:48,250 Teeme getchar. 900 00:38:48,250 --> 00:38:51,050 Nii getchar on enamasti kommentaarid. 901 00:38:51,050 --> 00:38:52,060 Aga tundub, et see. 902 00:38:52,060 --> 00:38:54,800 Nii et see on tegelik funktsioon getchar et me oleme 903 00:38:54,800 --> 00:38:56,055 võttes enesestmõistetavaks olemas. 904 00:38:56,055 --> 00:38:59,370 Ja kuigi me ei kasuta seda üks et sageli, kui üldse, on see vähemalt 905 00:38:59,370 --> 00:39:00,470 suhteliselt lihtne. 906 00:39:00,470 --> 00:39:02,580 Nii et see on väärt võtmist Kiire pilk siia. 907 00:39:02,580 --> 00:39:06,540 >> Nii getchar on lõputu silmuse, tahtlikult nii ilmselt. 908 00:39:06,540 --> 00:39:10,050 Seejärel kutsub - ja see on selline kena taaskasutust kood me ise kirjutas. 909 00:39:10,050 --> 00:39:11,220 Ta kutsub getString. 910 00:39:11,220 --> 00:39:12,460 Sest mida see tähendab saada char? 911 00:39:12,460 --> 00:39:14,730 Noh, võite samuti proovida saada terve rea teksti kasutaja ja 912 00:39:14,730 --> 00:39:16,940 siis lihtsalt pilk üks nende tähemärki. 913 00:39:16,940 --> 00:39:19,170 Vastavalt 60, siin on vähe natuke meelerahu kontrolli. 914 00:39:19,170 --> 00:39:21,610 Kui getString tagastatakse null, ärme minna. 915 00:39:21,610 --> 00:39:22,820 Midagi läks valesti. 916 00:39:22,820 --> 00:39:28,120 >> Nüüd on see pisut tüütu, kuid tavalised C. char max arvatavasti 917 00:39:28,120 --> 00:39:29,960 näitab, mida lihtsalt põhineb tema nimi? 918 00:39:29,960 --> 00:39:31,670 See on pidev. 919 00:39:31,670 --> 00:39:36,040 See on nagu numbriline väärtus Suurim char saab esindada koos 920 00:39:36,040 --> 00:39:40,370 üks hammustus, mis on ilmselt number 255, mis on suurim arv, mida 921 00:39:40,370 --> 00:39:42,720 esindavad kaheksa bitti, alates nullist. 922 00:39:42,720 --> 00:39:47,460 Nii et ma olen seda, et see funktsioon, kui Kirjutan seda koodi, vaid sellepärast, 923 00:39:47,460 --> 00:39:51,753 kui midagi läheb valesti getchar kuid tema eesmärk elus on naasta 924 00:39:51,753 --> 00:39:54,830 char, pead kuidagi suutma märku, et kasutaja, et 925 00:39:54,830 --> 00:39:55,840 midagi läks valesti. 926 00:39:55,840 --> 00:39:56,970 Me ei saa naasta null. 927 00:39:56,970 --> 00:39:58,480 Selgub, et null on osuti. 928 00:39:58,480 --> 00:40:01,030 Ja jälle getchar on tagasi char. 929 00:40:01,030 --> 00:40:04,760 >> Nii konventsiooni kui midagi läheb vale, on sul, programmeerija või 930 00:40:04,760 --> 00:40:08,160 Sellisel juhul mulle raamatukogu, pidin lihtsalt otsustada suvaliselt, kui 931 00:40:08,160 --> 00:40:12,230 midagi läheb valesti, ma lähen tagasi number 255, mis on ka tegelikult 932 00:40:12,230 --> 00:40:17,240 tähendab, et me ei saa, ei saa kasutaja tippida iseloomu esindajad 933 00:40:17,240 --> 00:40:21,410 nr 255, sest me pidime varastama kui nn valvur väärtust 934 00:40:21,410 --> 00:40:23,410 esindama probleem. 935 00:40:23,410 --> 00:40:27,010 Nüüd selgub, et märk 255 ei ole midagi, mida saab kirjutada edasi 936 00:40:27,010 --> 00:40:28,380 klaviatuuril, nii et see ei ole suur asi. 937 00:40:28,380 --> 00:40:30,910 Kasutaja ei märka, et Olen varastatud see märk. 938 00:40:30,910 --> 00:40:34,620 Aga kui sa kunagi näha mees lehekülge arvutisüsteemi mõned viited 939 00:40:34,620 --> 00:40:38,560 kõik mütsid pidevalt niimoodi, mis ütleb: juhtudel viga see pidev jõud 940 00:40:38,560 --> 00:40:42,720 tagasi, et kõik on mõned inimeste tegi aastat tagasi oli otsustasin 941 00:40:42,720 --> 00:40:45,680 tagasi see eriline väärtus ja nimetame seda pidevalt, kui 942 00:40:45,680 --> 00:40:46,840 midagi läheb valesti. 943 00:40:46,840 --> 00:40:48,580 >> Nüüd magic juhtub siin. 944 00:40:48,580 --> 00:40:52,600 Esiteks, ma kuulutab line 67 kaks märki, C1 ja C2. 945 00:40:52,600 --> 00:40:57,080 Ja siis vastavalt 68, seal on tegelikult koodirida see meenutab 946 00:40:57,080 --> 00:41:01,140 meie sõber printf, arvestades, et see ei ole protsenti Cs jutumärkides. 947 00:41:01,140 --> 00:41:06,490 Aga teate, mis siin toimub. sscanf tähendab string Scan - 948 00:41:06,490 --> 00:41:11,690 tähendab skaneerida vormindatud string, ergo sscanf. 949 00:41:11,690 --> 00:41:12,590 Mida see tähendab? 950 00:41:12,590 --> 00:41:16,310 See tähendab, et sul läheb sscanf string. 951 00:41:16,310 --> 00:41:18,420 Ja joon on ükskõik kasutaja tipib sisse 952 00:41:18,420 --> 00:41:23,520 Sul läheb sscanf stringi nagu see, mis ütleb scanf millised on 953 00:41:23,520 --> 00:41:25,870 sa lootes kasutaja on kirjutatud sisse 954 00:41:25,870 --> 00:41:29,730 Seejärel liigu-in aadressid kaks tükkideks mälu, sel juhul 955 00:41:29,730 --> 00:41:31,150 sest mul on kahe kohahoidjaga. 956 00:41:31,150 --> 00:41:34,610 Nii et ma annan selle aadress C1 ja aadress C2. 957 00:41:34,610 --> 00:41:37,700 >> Ja meenutada, et sa annad funktsioon aadress mõned muutuja, mis 958 00:41:37,700 --> 00:41:38,950 Mõju? 959 00:41:38,950 --> 00:41:41,400 960 00:41:41,400 --> 00:41:45,050 Mida see funktsioon teha tulemusena anda see aadress 961 00:41:45,050 --> 00:41:48,170 muutuja, mitte muutuja ise? 962 00:41:48,170 --> 00:41:49,450 See võib muuta see, eks? 963 00:41:49,450 --> 00:41:53,250 Kui sul oleks keegi kaart füüsilise aadress, võivad nad minna ja teha 964 00:41:53,250 --> 00:41:54,750 mida iganes nad tahavad, et aadress. 965 00:41:54,750 --> 00:41:55,800 Sama mõte siin. 966 00:41:55,800 --> 00:41:59,950 Kui meil läheb sscanf, aadress kahest tükkideks mälu, isegi need tillukesed 967 00:41:59,950 --> 00:42:03,585 vähe tükkideks mälu, C1 ja C2, kuid me öelda, et see aadress neist, 968 00:42:03,585 --> 00:42:05,170 sscanf seda muuta. 969 00:42:05,170 --> 00:42:08,530 >> Nii sscanf eesmärk elus, kui me loeme man, on lugeda, mida 970 00:42:08,530 --> 00:42:13,420 kasutaja kirjutada, loodan, et kasutaja, kellel tipitud iseloomu ja võibolla 971 00:42:13,420 --> 00:42:16,470 teise märgi, ja mis iganes kasutaja trükkida, esimene märk läheb 972 00:42:16,470 --> 00:42:19,310 siin, teine ​​märk läheb siia. 973 00:42:19,310 --> 00:42:22,470 Nüüd, kui kõrvale, see, ja sa tean vaid seda alates dokumentide 974 00:42:22,470 --> 00:42:25,570 asjaolu, et panin tühja ruumi seal lihtsalt, et ma ei hooli, kui 975 00:42:25,570 --> 00:42:28,440 kasutaja tabab Space bar paari korda enne kui ta võtab 976 00:42:28,440 --> 00:42:30,400 iseloomu, ma lähen ignoreerida iga tühja ruumi. 977 00:42:30,400 --> 00:42:32,510 Nii et, ma tean dokumentatsiooni. 978 00:42:32,510 --> 00:42:36,570 >> Asjaolu, et seal on teine% c järgneb valge ruum on tegelikult 979 00:42:36,570 --> 00:42:37,410 tahtlik. 980 00:42:37,410 --> 00:42:41,190 Ma tahan, et oleks võimalik tuvastada, kas kasutaja silmamunad või ei teinud koostööd. 981 00:42:41,190 --> 00:42:45,630 Nii et ma loodan, et kasutaja ainult trükkida aastal üks märk, seega ma loodan, 982 00:42:45,630 --> 00:42:50,640 et sscanf on ainult kavatse tagasi väärtus 1, sest jällegi, kui ma lugesin 983 00:42:50,640 --> 00:42:55,400 dokumentatsiooni sscanf eesmärk on elu on naasta arvu 984 00:42:55,400 --> 00:42:59,170 muutujaid, mis olid täis kasutaja sisend. 985 00:42:59,170 --> 00:43:02,270 >> Ma möödunud kahe muutuja aadressid, C1 ja C2. 986 00:43:02,270 --> 00:43:06,420 Ma loodan siiski, et ainult üks neid saab surma, sest kui sscanf 987 00:43:06,420 --> 00:43:11,130 tagastab 2, mis eeldatavasti Mõju loogiliselt? 988 00:43:11,130 --> 00:43:14,600 See kasutaja ei anna mulle üks iseloomu nagu ma ütlesin talle. 989 00:43:14,600 --> 00:43:17,860 Nad ilmselt kirjutate vähemalt kaks märki. 990 00:43:17,860 --> 00:43:22,430 Nii et kui ma selle asemel ei ole teise % C, ma lihtsalt pidin ühe, mis 991 00:43:22,430 --> 00:43:25,370 ausalt oleks intuitiivne lähenemine, ma arvan Esmapilgul 992 00:43:25,370 --> 00:43:30,220 te ei kavatse olla võimeline avastama kui kasutaja on annab teile rohkem 993 00:43:30,220 --> 00:43:31,780 sisend kui sa tegelikult tahtsid. 994 00:43:31,780 --> 00:43:34,100 Nii et see on kaudne vorm vigade kontroll. 995 00:43:34,100 --> 00:43:35,640 >> Aga teate, mida ma teen siin. 996 00:43:35,640 --> 00:43:39,970 Kui ma olen kindel, et kasutaja andis mulle üks iseloomu, ma vaba rida, tehes 997 00:43:39,970 --> 00:43:44,450 vastand getString, mis omakorda kasutab malloc ja siis ma tagasi 998 00:43:44,450 --> 00:43:51,030 C1, iseloomu, et ma lootsin kasutaja ette ja ainult tingimusel. 999 00:43:51,030 --> 00:43:54,680 Nii kiire ühtesid ainult, kuid lisaküsimusi getchar? 1000 00:43:54,680 --> 00:43:57,450 1001 00:43:57,450 --> 00:43:59,590 Me tuleme tagasi mõned teised. 1002 00:43:59,590 --> 00:44:03,770 >> Noh, lubage mul minna ja seda teha - Oletame nüüd, lihtsalt motiveerida meie 1003 00:44:03,770 --> 00:44:08,910 arutelu nädalas pluss aeg, seda on fail nimega structs.h. 1004 00:44:08,910 --> 00:44:11,440 Ja veel, see on lihtsalt maitse midagi, mis meid ees ootab. 1005 00:44:11,440 --> 00:44:13,090 Aga teate, et palju selle kohta on märkusi. 1006 00:44:13,090 --> 00:44:17,440 Nii et lubage mul rõhutada ainult Huvitav osa nüüd. 1007 00:44:17,440 --> 00:44:18,020 typedef - 1008 00:44:18,020 --> 00:44:19,700 seal on sama märksõna uuesti. 1009 00:44:19,700 --> 00:44:23,100 typedef me kasutame kuulutada string nagu erilist andmete liiki. 1010 00:44:23,100 --> 00:44:27,490 Võite kasutada typedef luua täiesti uus andmetüübid, et ei ole olemas, kui 1011 00:44:27,490 --> 00:44:28,570 C leiutati. 1012 00:44:28,570 --> 00:44:32,520 Näiteks int kaasas C. char Kaasas C. topelt kaasas C. Kuid 1013 00:44:32,520 --> 00:44:34,000 pole mõiste üliõpilane. 1014 00:44:34,000 --> 00:44:37,230 Ja veel, et oleks päris kasulik olla võimalik kirjutada programm, mis salvestab 1015 00:44:37,230 --> 00:44:40,440 muutuv, õpilase ID number, oma nimi ja oma maja. 1016 00:44:40,440 --> 00:44:42,890 Teisisõnu, kolm tükki andmeid, nagu int ja 1017 00:44:42,890 --> 00:44:44,420 string ja muu string. 1018 00:44:44,420 --> 00:44:48,220 >> Mis typedef, mis on päris võimas selle ja märksõna sturct eest 1019 00:44:48,220 --> 00:44:53,660 struktuur, sa, programmeerija 2013 saab tegelikult määrata oma 1020 00:44:53,660 --> 00:44:57,530 andmetüübid, et ei ole olemas aastat tagasi, vaid et see sobiks teie eesmärkidel. 1021 00:44:57,530 --> 00:45:01,910 Ja nii siin, read 13 kuni 19, me kuulutatakse uus andmetüüp, nagu 1022 00:45:01,910 --> 00:45:04,320 int, kuid nimetades seda üliõpilane. 1023 00:45:04,320 --> 00:45:09,310 Ja sees muutuja läheb Kolm asja - int, string, 1024 00:45:09,310 --> 00:45:09,930 ja string. 1025 00:45:09,930 --> 00:45:13,040 Nii et sa ei mõtle, mis on tõesti juhtus siin, kuigi see on 1026 00:45:13,040 --> 00:45:17,160 natuke lihtsamaks täna üliõpilane on sisuliselt läheb 1027 00:45:17,160 --> 00:45:19,450 näeb välja selline. 1028 00:45:19,450 --> 00:45:22,580 Selle saab tüki mälu ID nimi 1029 00:45:22,580 --> 00:45:25,580 valdkonnas, ja maja valdkonnas. 1030 00:45:25,580 --> 00:45:30,670 Ja me saaks kasutada neid tükkideks mälu ja neid kasutada järgmiselt. 1031 00:45:30,670 --> 00:45:38,870 >> Kui ma minema struct0.c, siin on suhteliselt pikk, kuid pärast 1032 00:45:38,870 --> 00:45:42,630 muster, kood, mis kasutab seda uut nippi. 1033 00:45:42,630 --> 00:45:45,790 Nii et esimene, las ma juhtida teie tähelepanu et huvitav osad üleval. 1034 00:45:45,790 --> 00:45:49,670 Sharp määratleb õpilased 3, teatab pidev nimetatakse õpilased ja määratud 1035 00:45:49,670 --> 00:45:53,450 ta omavoliliselt number 3, siis nii et mul on kolm õpilast kasutades 1036 00:45:53,450 --> 00:45:54,830 Selle programmi nüüd. 1037 00:45:54,830 --> 00:45:55,960 Siin on peamised. 1038 00:45:55,960 --> 00:45:58,860 Ja teate, kuidas ma kuulutada massiivi õpilased? 1039 00:45:58,860 --> 00:46:00,480 Noh, ma lihtsalt kasutada sama süntaks. 1040 00:46:00,480 --> 00:46:02,110 Sõna üliõpilane on ilmselt uus. 1041 00:46:02,110 --> 00:46:04,790 Kuid õpilane, klassi sulg õpilastele. 1042 00:46:04,790 --> 00:46:06,720 >> Nii kahjuks on palju taaskasutamise mõistete siin. 1043 00:46:06,720 --> 00:46:07,660 See on lihtsalt number. 1044 00:46:07,660 --> 00:46:09,040 Nii et see on nagu öelda kolm. 1045 00:46:09,040 --> 00:46:11,430 Klass on just see, mida ma tahan, helistada muutuja. 1046 00:46:11,430 --> 00:46:12,840 Ma võiks seda nimetada õpilastele. 1047 00:46:12,840 --> 00:46:15,880 Aga klass ei ole see klass objektorienteeritud Java liiki viisil. 1048 00:46:15,880 --> 00:46:17,220 See on lihtsalt klassi õpilastele. 1049 00:46:17,220 --> 00:46:20,590 Ja andmetüübi iga element selles massiivis on üliõpilane. 1050 00:46:20,590 --> 00:46:23,040 Nii et see on natuke erinev ja ütleb midagi 1051 00:46:23,040 --> 00:46:25,250 niimoodi, et see on lihtsalt - 1052 00:46:25,250 --> 00:46:29,500 Ma ütlen mulle kolm õpilast ja helistada, et massiivi klassi. 1053 00:46:29,500 --> 00:46:29,800 >> Hea küll. 1054 00:46:29,800 --> 00:46:30,680 Nüüd on neli silmus. 1055 00:46:30,680 --> 00:46:33,480 See mees on tuttav - Kerrata nullist kuni kolmel. 1056 00:46:33,480 --> 00:46:35,160 Ja siin on uus tükk süntaks. 1057 00:46:35,160 --> 00:46:37,710 Programm läheb küsib mind, inimese, anda talle üliõpilane 1058 00:46:37,710 --> 00:46:39,200 ID, mis on int. 1059 00:46:39,200 --> 00:46:44,650 Ja siin on süntaks, mille saate salvestada midagi ID väljal 1060 00:46:44,650 --> 00:46:48,630 Asukoht klassi sulg I. Nii Selle süntaks ei ole uus. 1061 00:46:48,630 --> 00:46:51,450 See tähendab lihtsalt, anna mulle kaheksas klassi õpilaste. 1062 00:46:51,450 --> 00:46:52,940 Aga see sümbol on uus. 1063 00:46:52,940 --> 00:46:56,320 Siiani oleme saa kasutada dot, vähemalt kood niimoodi. 1064 00:46:56,320 --> 00:47:01,490 See tähendab, minge struct tuntakse õpilane ja pane midagi. 1065 00:47:01,490 --> 00:47:05,670 Samamoodi see järgmisele reale 31, minge käia ja panna mida iganes kasutaja liigid 1066 00:47:05,670 --> 00:47:10,530 Nime siin ja mida nad teevad maja, sama asi, edasi minna ja 1067 00:47:10,530 --> 00:47:13,230 pane see. majas. 1068 00:47:13,230 --> 00:47:15,955 >> Mida see programm lõpuks teha? 1069 00:47:15,955 --> 00:47:17,220 Näete väike teaser seal. 1070 00:47:17,220 --> 00:47:24,780 Lubage mul minna ja ei tee structs 0 dot kaldkriipsuga struct 0, üliõpilase ID 1, 1071 00:47:24,780 --> 00:47:28,250 ütlevad David Mather, üliõpilane ID 2. 1072 00:47:28,250 --> 00:47:32,070 Rob Kirkland, üliõpilaspilet 3. 1073 00:47:32,070 --> 00:47:35,010 Lauren Leverit - 1074 00:47:35,010 --> 00:47:38,380 ja ainus asi, mida see programm tegi, mis on lihtsalt täiesti meelevaldne, on 1075 00:47:38,380 --> 00:47:40,980 Ma tahtsin teha midagi selle info, nüüd, et ma olen õpetas meile, kuidas 1076 00:47:40,980 --> 00:47:43,450 kasutada structs on ma lihtsalt pidin Selle pildi loop siin. 1077 00:47:43,450 --> 00:47:45,260 Ma Käi massiivi õpilastele. 1078 00:47:45,260 --> 00:47:49,170 Ma kasutasin meie, ehk nüüd tuttav sõber, string võrrelda stircomp et 1079 00:47:49,170 --> 00:47:53,780 kontroll on 8. õpilase maja võrdne Ema? 1080 00:47:53,780 --> 00:47:56,760 Ja kui on, siis lihtsalt printida midagi omavoliliselt meeldi, jah, on küll. 1081 00:47:56,760 --> 00:47:59,430 Aga jälle, lihtsalt annab mulle võimalusi kasutada ja taaskasutada ja 1082 00:47:59,430 --> 00:48:02,270 taaskasutada uue dot märke. 1083 00:48:02,270 --> 00:48:03,250 >> Kes hoolib, eks? 1084 00:48:03,250 --> 00:48:06,270 Tulemas üliõpilaste programmi mõnevõrra meelevaldne, kuid selgub, 1085 00:48:06,270 --> 00:48:09,800 et me saame teha kasulikke asju Selle näiteks järgmiselt. 1086 00:48:09,800 --> 00:48:14,600 See on palju keerulisem struct aastal C. See sai tosin või rohkem valdkondi, 1087 00:48:14,600 --> 00:48:15,880 mõnevõrra cryptically nimega. 1088 00:48:15,880 --> 00:48:20,110 Aga kui sa oled kunagi kuulnud graafika failivorming nimetatakse bitmap, BMP, see 1089 00:48:20,110 --> 00:48:22,830 Selgub, et bitmap failivorming päris palju tundub, et see. 1090 00:48:22,830 --> 00:48:24,200 See on rumal vähe smiley nägu. 1091 00:48:24,200 --> 00:48:27,840 See on väike pilt, mis ma olen suumitud on päris suur, nii et ma ei näe iga 1092 00:48:27,840 --> 00:48:30,410 üksikisiku dots või pikslit. 1093 00:48:30,410 --> 00:48:33,800 Nüüd selgub, saame esindada must täpp, ütleme, number 0. 1094 00:48:33,800 --> 00:48:35,520 Ja valge dot number 1. 1095 00:48:35,520 --> 00:48:39,140 >> Nii teisisõnu, kui sa tahad teha Naerusuu ja salvestada et pilt 1096 00:48:39,140 --> 00:48:42,680 arvuti, siis piisab, kui hoida nulli ja need, mis näeb välja selline, kus, 1097 00:48:42,680 --> 00:48:45,250 jälle need on valged ja nulle on mustad. 1098 00:48:45,250 --> 00:48:48,290 Ja koos, kui sa tegelikult on mõnitama ühtesid ja nulle, pead 1099 00:48:48,290 --> 00:48:51,030 ruudustik pikslit, ja kui te näha neile välja, siis on armas 1100 00:48:51,030 --> 00:48:52,560 vähe smiley nägu. 1101 00:48:52,560 --> 00:48:58,150 Nüüd bitmap failivorming, BMP, on tõhusalt, et selle all kapuuts, 1102 00:48:58,150 --> 00:49:00,970 kuid rohkem piksleid SOT et sa võib tegelikult esindavad värvid. 1103 00:49:00,970 --> 00:49:05,170 >> Aga kui teil on keerulisemad formaadid nagu BMP ja JPEG ja GIF 1104 00:49:05,170 --> 00:49:09,360 kellega võib olla tuttav, need failid kettal on tavaliselt mitte ainult 1105 00:49:09,360 --> 00:49:13,760 on nullid ja need, pikslit, kuid neil on mõned metaandmed samuti - 1106 00:49:13,760 --> 00:49:16,960 meta selles mõttes, et ei ole tõesti andmeid, kuid see on kasulik omada. 1107 00:49:16,960 --> 00:49:21,370 Nii et need väljad on siin tähendab, ja me näeme seda üksikasjalikumalt P-set 1108 00:49:21,370 --> 00:49:25,810 5, et enne nulli ja need, mis esindavad pikslit pilt, 1109 00:49:25,810 --> 00:49:29,110 seal on hunnik metaandmeid pildi ja 1110 00:49:29,110 --> 00:49:30,250 pildi laius. 1111 00:49:30,250 --> 00:49:32,910 Ja teate ma kitkumise välja mõned meelevaldsed asjad siin - 1112 00:49:32,910 --> 00:49:34,260 laius ja kõrgus. 1113 00:49:34,260 --> 00:49:36,160 Bit arv ja mõned muud asjad. 1114 00:49:36,160 --> 00:49:37,840 Nii et seal on mõned metaandmed faili. 1115 00:49:37,840 --> 00:49:41,470 >> Aga mõista, kuidas failid on sätestatud välja sel viisil, saab tegelikult 1116 00:49:41,470 --> 00:49:45,890 siis pilte töödelda, taastada pilte kettalt, resize pilte. 1117 00:49:45,890 --> 00:49:47,560 Aga sa ei pea tingimata arendamiseks. 1118 00:49:47,560 --> 00:49:48,480 Ma vajasin foto. 1119 00:49:48,480 --> 00:49:52,840 Nii et ma läksin tagasi RJ siin, kes nägid ekraanil juba mõnda aega tagasi. 1120 00:49:52,840 --> 00:49:57,160 Ja kui ma avada Keynote siin, see on mis juhtub, kui sa püüad suurendada ja 1121 00:49:57,160 --> 00:49:59,380 suurendada RJ. 1122 00:49:59,380 --> 00:50:01,480 Ta ei saa mingit parem tõesti. 1123 00:50:01,480 --> 00:50:06,240 Nüüd Keynote on selline hägustab see natuke, vaid ilustada 1124 00:50:06,240 --> 00:50:11,040 Asjaolu, et RJ ei saa eriti täiustuvad suumida 1125 00:50:11,040 --> 00:50:13,310 Ja kui teha seda nii, vaata väljakud? 1126 00:50:13,310 --> 00:50:15,490 Jah, saate kindlasti näha ruutu projektor. 1127 00:50:15,490 --> 00:50:17,690 >> See on see, mida sa saad, kui teil suurendada. 1128 00:50:17,690 --> 00:50:22,570 Aga mõista, kuidas meie RJ või Naerusuu ellu laseb meid 1129 00:50:22,570 --> 00:50:24,950 tegelikult kirjutada koodi, mis manipuleerib neid asju. 1130 00:50:24,950 --> 00:50:29,970 Ja ma mõtlesin, et ma lõpuks selle märkme juures 55 sekundi tõsta see, 1131 00:50:29,970 --> 00:50:31,230 Julgen öelda pigem eksitav. 1132 00:50:31,230 --> 00:50:32,990 >> [VIDEO PLAYBACK] 1133 00:50:32,990 --> 00:50:34,790 >> -Ta valetab. 1134 00:50:34,790 --> 00:50:38,310 Millest ma ei tea. 1135 00:50:38,310 --> 00:50:41,200 >> -Mida me teame? 1136 00:50:41,200 --> 00:50:45,280 >> -See on 09:15 Ray Santoya oli ATM. 1137 00:50:45,280 --> 00:50:47,830 >> -Nii et küsimus on, mis ta seal 9:16? 1138 00:50:47,830 --> 00:50:50,750 >> Shooting üheksa millimeetri juures midagi. 1139 00:50:50,750 --> 00:50:52,615 Äkki nägi ta snaiper. 1140 00:50:52,615 --> 00:50:54,760 >> -Või oli temaga koos töötada. 1141 00:50:54,760 --> 00:50:56,120 >> -Oota. 1142 00:50:56,120 --> 00:50:57,450 Mine tagasi üks. 1143 00:50:57,450 --> 00:50:58,700 >> Mida sa näed? 1144 00:50:58,700 --> 00:51:05,530 1145 00:51:05,530 --> 00:51:09,490 >> -Tooge oma pealpool täisekraanil. 1146 00:51:09,490 --> 00:51:09,790 >> -Tema prillid. 1147 00:51:09,790 --> 00:51:11,040 >> -Seal on peegeldus. 1148 00:51:11,040 --> 00:51:21,790 1149 00:51:21,790 --> 00:51:23,520 >> -See on Neuvitas pesapalli meeskond. 1150 00:51:23,520 --> 00:51:24,530 See on nende logo. 1151 00:51:24,530 --> 00:51:27,040 >> Ja ta räägib kes on seljas, et jope. 1152 00:51:27,040 --> 00:51:27,530 >> [END VIDEO PLAYBACK] 1153 00:51:27,530 --> 00:51:29,180 >> DAVID J. Malan: see olema Ülesanded 5. 1154 00:51:29,180 --> 00:51:30,720 Näeme järgmisel nädalal. 1155 00:51:30,720 --> 00:51:32,330 >> MALE SPEAKER: Järgmisel CS50. 1156 00:51:32,330 --> 00:51:39,240 >> [Crickets säutsumine] 1157 00:51:39,240 --> 00:51:41,270 >> [Muusika mängib]