1 00:00:00,000 --> 00:00:10,970 >> [MUSIC PLAYING] 2 00:00:10,970 --> 00:00:12,536 >> DAVID J. MALAN: Rendben. 3 00:00:12,536 --> 00:00:13,392 >> [Nevetés] 4 00:00:13,392 --> 00:00:14,240 >> Isten hozott. 5 00:00:14,240 --> 00:00:14,990 Ez CS50. 6 00:00:14,990 --> 00:00:16,890 És ez a hét végére öt. 7 00:00:16,890 --> 00:00:20,020 És eddig, most már elég sok szedett számára mindez 8 00:00:20,020 --> 00:00:23,480 létezik ez a fordító, csenget, hogy már is hivatkozva útján a 9 00:00:23,480 --> 00:00:27,100 más eszköz, a Legyen valahogy varázslatosan átalakítja a forráskódot 10 00:00:27,100 --> 00:00:31,350 a tárgykód, a nullák és egyesek hogy a számítógép CPU, központi 11 00:00:31,350 --> 00:00:33,410 feldolgozó egység, ténylegesen meg is érti. 12 00:00:33,410 --> 00:00:36,770 De kiderül, hogy van egy szám, ami folyik a motorháztető alatt a 13 00:00:36,770 --> 00:00:38,690 bemenet és kimenet között. 14 00:00:38,690 --> 00:00:41,800 >> És szeretném javasolni, hogy hús hogy ki egy kicsit részletesebben a 15 00:00:41,800 --> 00:00:45,130 ezt a négy lépést, van valami neve előkezelést, valami 16 00:00:45,130 --> 00:00:48,300 nevű összeállítása, amit láttunk, úgynevezett összeszerelés, és a 17 00:00:48,300 --> 00:00:49,420 úgynevezett összekötő. 18 00:00:49,420 --> 00:00:53,270 Tehát eddig, a néhány programok, volt éles tartalmazza. 19 00:00:53,270 --> 00:00:56,650 A közelmúltban már volt néhány éles határoz meg az állandók. 20 00:00:56,650 --> 00:01:00,660 Így kiderül, hogy azok a dolgok, hogy az előtagja a hash szimbólum vagy 21 00:01:00,660 --> 00:01:04,150 A font szimbólum pre-processzor irányelvek. 22 00:01:04,150 --> 00:01:07,960 Ez csak egy divatos szóval ez egy sor kód valójában 23 00:01:07,960 --> 00:01:12,280 át valami mássá, mielőtt a számítógép is próbálja átalakítani a 24 00:01:12,280 --> 00:01:13,800 programot nullák. 25 00:01:13,800 --> 00:01:19,000 >> Például, éles szabvány tartalmazza I / O. H, nagyjából csak azt jelenti, megy 26 00:01:19,000 --> 00:01:24,010 előre, ragadd meg a fájlok tartalmát stdio.h be őket ott. 27 00:01:24,010 --> 00:01:25,880 Tehát nem nullák és egyesek ezen a ponton még. 28 00:01:25,880 --> 00:01:27,470 Ez tényleg csak egy cserét. 29 00:01:27,470 --> 00:01:30,790 És ez történt az úgynevezett előfeldolgozás szakaszban, ha 30 00:01:30,790 --> 00:01:34,230 valójában fut csenget vagy kifejezetten Legyen a legtöbb esetben. 31 00:01:34,230 --> 00:01:36,950 Tehát mindez történt először automatikusan eddig. 32 00:01:36,950 --> 00:01:38,800 >> Aztán jön a fordítás lépést. 33 00:01:38,800 --> 00:01:40,920 De már leegyszerűsített összeállítása. 34 00:01:40,920 --> 00:01:45,060 Program fordítás valójában azt jelenti, hogy vegye ki valami, mint a C, a 35 00:01:45,060 --> 00:01:48,430 forráskód mi már írás, le az úgynevezett szerelvény. 36 00:01:48,430 --> 00:01:52,900 Assembly nyelv alacsonyabb szintre nyelv, szerencsére, nem fogunk 37 00:01:52,900 --> 00:01:55,480 volt sok alkalmam írni ebben a félévben. 38 00:01:55,480 --> 00:01:59,100 De ez a legalacsonyabb szinten, a értelemben, hogy a szó szoros értelmében írásához 39 00:01:59,100 --> 00:02:04,270 összeadni és kivonni és sokasodjatok, és terhelés a memória, és mentse a memória, a 40 00:02:04,270 --> 00:02:08,259 nagyon alapvető utasítások, hogy a számítógép, a motorháztető alatt, 41 00:02:08,259 --> 00:02:09,639 ténylegesen meg is érti. 42 00:02:09,639 --> 00:02:14,930 >> Végül, szerelés veszi, hogy a nyelv A nullák és egyesek, hogy már 43 00:02:14,930 --> 00:02:16,190 leíró eddig. 44 00:02:16,190 --> 00:02:19,270 És tényleg végül ott van az úgynevezett összekötő szakasz, amely fogjuk 45 00:02:19,270 --> 00:02:22,360 hogy csak egy pillanat, amely egyesíti a A nullák nullákkal és 46 00:02:22,360 --> 00:02:24,870 azok az emberek előtt létrehozott. 47 00:02:24,870 --> 00:02:26,660 >> Tehát úgy ezt a szuper egyszerű program. 48 00:02:26,660 --> 00:02:27,560 Ez volt az 1. hét. 49 00:02:27,560 --> 00:02:29,610 Csak azt mondta, Hello World, a képernyőn. 50 00:02:29,610 --> 00:02:30,920 Mi ezt a csenget. 51 00:02:30,920 --> 00:02:33,200 Vagy lefuttattam Legyen lezajlott csenget. 52 00:02:33,200 --> 00:02:36,170 És outputted abban az időben, amikor Néhány nullák. 53 00:02:36,170 --> 00:02:38,100 De kiderül, van egy közbenső lépés. 54 00:02:38,100 --> 00:02:40,460 Ha elmegyek ide - hoppá, nem szeretnénk látni még. 55 00:02:40,460 --> 00:02:44,800 Ha elmegyek ide, hogy a készülék és én nyit hello.c itt 56 00:02:44,800 --> 00:02:46,160 az, hogy ugyanaz a program. 57 00:02:46,160 --> 00:02:48,600 És mit fogok csinálni a terminál ablak itt fogok 58 00:02:48,600 --> 00:02:51,430 fuss Clang ahelyett, hogy, ami automatizálja mind a négy 59 00:02:51,430 --> 00:02:52,870 ezeket a lépéseket nekünk. 60 00:02:52,870 --> 00:02:58,620 És én fogom csinálni csenget-S és akkor hello.c majd adja meg. 61 00:02:58,620 --> 00:03:00,590 >> És kapok egy villogó prompt újra, ami jó. 62 00:03:00,590 --> 00:03:05,280 És most egy kicsit nagyobb ablak, Fogok nyitni gedit itt. 63 00:03:05,280 --> 00:03:09,610 És fogok nyitni egy fájlt, Kiderült, az úgynevezett hello.s ezt 64 00:03:09,610 --> 00:03:11,870 tartalmaz, hogy assembly nyelven Utaltam korábban. 65 00:03:11,870 --> 00:03:15,060 És ez az, amit a neve összeszerelés nyelv, viszonylag alacsony 66 00:03:15,060 --> 00:03:18,470 utasításokat az Intel CPU vagy bármi is az, hogy bent 67 00:03:18,470 --> 00:03:19,350 ért. 68 00:03:19,350 --> 00:03:24,480 És MOV a lépés. hívás a hívás, nagyon alacsony szintű függvény. 69 00:03:24,480 --> 00:03:26,380 sub is a kivonás. 70 00:03:26,380 --> 00:03:30,370 >> Tehát, ha van egy bizonyos CPU belsejében a számítógép, mi teszi 71 00:03:30,370 --> 00:03:34,300 különböző, összevetve más CPU a piacon, amely az utasítások 72 00:03:34,300 --> 00:03:39,460 megérti és gyakran mennyire hatékony ez az, hogy milyen gyorsan áll végrehajtása néhány 73 00:03:39,460 --> 00:03:40,380 ezen utasítások. 74 00:03:40,380 --> 00:03:45,150 Most erről többet, akkor vegye következő őszi CS61 a főiskolán. 75 00:03:45,150 --> 00:03:48,170 De itt van, például, egy pár azonosítók, amelyek ismerős. 76 00:03:48,170 --> 00:03:50,150 hello.c a program nevét. 77 00:03:50,150 --> 00:03:51,070 >> . Szöveg - 78 00:03:51,070 --> 00:03:54,190 nem sok érdekes van most, emlékeztetnek arra, hogy a szöveg 79 00:03:54,190 --> 00:03:59,190 szegmensben, mint a hétfő, ahol a memória a programot végül az. 80 00:03:59,190 --> 00:04:01,330 Szóval ez legalább homályosan ismerős ott. 81 00:04:01,330 --> 00:04:03,730 Itt természetesen egy említést a mi fő funkciója. 82 00:04:03,730 --> 00:04:07,220 Lefelé görgetve, utal is a dolgokat úgynevezett regiszter, nagyon kicsi darabok 83 00:04:07,220 --> 00:04:09,190 memória benne a tényleges CPU. 84 00:04:09,190 --> 00:04:12,930 És ha lapozás még tovább, látok valami 85 00:04:12,930 --> 00:04:14,240 közvetett említése ASCII. 86 00:04:14,240 --> 00:04:17,120 És ott, valóban, hogy a string, hello, vessző, világ. 87 00:04:17,120 --> 00:04:20,079 >> Tehát hosszú történet rövid, ez volt történik, automatikusan, 88 00:04:20,079 --> 00:04:22,140 a motorháztető alatt minden ebben az időben. 89 00:04:22,140 --> 00:04:26,450 És mi történt valójában, ha már fut csenget, vagy oly módon, 90 00:04:26,450 --> 00:04:29,150 Legyen, akkor már az első, A forráskód, a 91 00:04:29,150 --> 00:04:30,700 úgynevezett assembly nyelven. 92 00:04:30,700 --> 00:04:35,210 Ezután Clang konvertáló a szerelvény nyelv le a nullák és egyesek. 93 00:04:35,210 --> 00:04:38,340 És ez az a dia, hogy elkezdtük a vitát a 0. héten be - 94 00:04:38,340 --> 00:04:39,840 majd hét 1 tovább. 95 00:04:39,840 --> 00:04:44,030 És végül, a nullák és egyesek kombinálják a nullák és egyesek 96 00:04:44,030 --> 00:04:47,190 azoktól könyvtárak voltunk véve biztosra mint Standard I / O vagy a 97 00:04:47,190 --> 00:04:50,010 Szövegkönyvtár vagy akár A CS50 könyvtár. 98 00:04:50,010 --> 00:04:54,200 >> Tehát festeni ezt a képet több vizuálisan, van hello.c. 99 00:04:54,200 --> 00:04:57,220 És, persze, használja a printf működnek mondani, hello world. 100 00:04:57,220 --> 00:05:01,810 Az összeállítás lépés veszi le a a fájl láttunk hello.s is 101 00:05:01,810 --> 00:05:04,290 bár ez általában törölt automatikusan az Ön számára. 102 00:05:04,290 --> 00:05:06,050 De ez a kódban a közepén lépésben. 103 00:05:06,050 --> 00:05:09,750 És amikor össze a közgyűlés nyelv, hogy úgy mondjam, ez, ha 104 00:05:09,750 --> 00:05:10,830 hogy ezeket a nullák és egyesek. 105 00:05:10,830 --> 00:05:13,920 Így már nagyított hatékonyan ma mi az, amit vesz biztosra, 106 00:05:13,920 --> 00:05:16,430 azt jelenti, lesz forráskód tiltakozni kódot. 107 00:05:16,430 --> 00:05:18,850 >> De végül, most, hogy ugyanazt a képet - nézzük lök át a 108 00:05:18,850 --> 00:05:20,020 a bal oldali. 109 00:05:20,020 --> 00:05:22,880 És vegye figyelembe, hogy a tetején van Említettem stdio.h. 110 00:05:22,880 --> 00:05:25,030 Ez egy fájlt, amit már bele szinte az összes 111 00:05:25,030 --> 00:05:26,250 programokat is írtam. 112 00:05:26,250 --> 00:05:28,830 És ez az, melynek tartalmát kap copy beillesztett, 113 00:05:28,830 --> 00:05:30,350 hatékonyan tetején a kódot. 114 00:05:30,350 --> 00:05:34,170 De kiderült, hogy a számítógépen rendszer valahol, ott feltehetően 115 00:05:34,170 --> 00:05:39,150 stdio.c fájlt valaki írta évekkel ezelőtt, hogy megvalósítja az összes 116 00:05:39,150 --> 00:05:41,870 funkciók nyilvánított A stdio.h. 117 00:05:41,870 --> 00:05:45,465 >> Most a valóságban ez valószínűleg nem Mac vagy PC-n vagy akár a 118 00:05:45,465 --> 00:05:47,660 CS50 készülék a C kódnak. 119 00:05:47,660 --> 00:05:52,710 Valaki már össze, és tartalmazza . O fájl objektum kódot vagy. A 120 00:05:52,710 --> 00:05:56,020 fájlt, arra utal, hogy a megosztott könyvtár hogy a már előre telepített és 121 00:05:56,020 --> 00:05:57,240 előre lefordított az Ön számára. 122 00:05:57,240 --> 00:06:01,950 De tegyük fel, hogy valóban létezik számítógépünkön stdio.c párhuzamosan 123 00:06:01,950 --> 00:06:02,650 A csenget. 124 00:06:02,650 --> 00:06:04,960 A kódex is össze és összeszerelni. 125 00:06:04,960 --> 00:06:09,200 stdio.c 's kód kerül össze, és összeszerelt, hogy ez a legutolsó 126 00:06:09,200 --> 00:06:13,730 lépést, ide, meg kell valahogy kapcsolat, hogy úgy mondjam, a nullák és egyesek 127 00:06:13,730 --> 00:06:18,430 az ő vagy a nullák és egyesek az egyik egyszerű program, amely végső soron 128 00:06:18,430 --> 00:06:20,540 meghívni, Hello. 129 00:06:20,540 --> 00:06:23,340 >> Szóval ez az egész a varázslat, ami történt eddig. 130 00:06:23,340 --> 00:06:26,430 És továbbra is, hogy ezeket a folyamatok nyújtott, de rájönnek, 131 00:06:26,430 --> 00:06:28,750 van egy csomó szaftos részletek folyik alatta ott. 132 00:06:28,750 --> 00:06:31,920 És ez az, ami a számítógép Intel belső 133 00:06:31,920 --> 00:06:33,940 különösen különböző. 134 00:06:33,940 --> 00:06:37,020 >> Szóval, hogy figyelmét, hogy szeretne csatlakozzon hozzánk ebédre a péntek, nem megy 135 00:06:37,020 --> 00:06:41,570 A szokott helyen cs50.net/rsvp, 13:15 a péntek. 136 00:06:41,570 --> 00:06:43,400 És most néhány bejelentések. 137 00:06:43,400 --> 00:06:44,670 Tehát van néhány jó hír. 138 00:06:44,670 --> 00:06:45,970 És van egy rossz hírem. 139 00:06:45,970 --> 00:06:47,260 Kezdjük néhány jó hír. 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 >> Rendben van. 143 00:06:54,710 --> 00:06:56,670 Nos, ez gyakorlatilag egy ünnep, így ez nem annyira ajándék tőlünk. 144 00:06:56,670 --> 00:06:58,030 De aztán a rossz hír természetesen. 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 >> Töltöttem sok időt ezen animációk. 148 00:07:03,530 --> 00:07:04,690 >> [Nevetés] 149 00:07:04,690 --> 00:07:07,000 >> Lesz egy felülvizsgálati ülésén a jövő hétfő. 150 00:07:07,000 --> 00:07:08,340 Ez lesz a 05:30. 151 00:07:08,340 --> 00:07:11,210 Mi emlékeztetni fogja ezeket a részleteket e-mailben a pályán a 152 00:07:11,210 --> 00:07:13,470 honlapján csak egy pár nap múlva. 153 00:07:13,470 --> 00:07:16,610 Ez lesz filmre és elérhető nem sokkal később. 154 00:07:16,610 --> 00:07:19,200 Tehát, ha nem tudja, hogy hétfő éjszaka slot, ne aggódj. 155 00:07:19,200 --> 00:07:22,270 § a jövő héten is elsősorban felülvizsgálat a kvíz. 156 00:07:22,270 --> 00:07:25,670 Ha a szakasz hétfőn, ami Valóban egyetemi ünnep, mi lesz 157 00:07:25,670 --> 00:07:26,920 továbbra is megfelelnek a részben. 158 00:07:26,920 --> 00:07:28,890 Ha egyszerűen csak nem tudja, hogy részben azért, mert mész 159 00:07:28,890 --> 00:07:29,860 el, hogy rendben van. 160 00:07:29,860 --> 00:07:33,710 Vegyen részt a vasárnap vagy kedd részben vagy dallam-be Jason rész, ami 161 00:07:33,710 --> 00:07:35,110 elérhető online. 162 00:07:35,110 --> 00:07:37,490 >> Így, több rossz hír. 163 00:07:37,490 --> 00:07:41,960 Így szerint a tanterv, mi előadás jövő pénteken. 164 00:07:41,960 --> 00:07:43,690 De a jó hír - 165 00:07:43,690 --> 00:07:44,860 világosan, töltöttem túl sok időt erre. 166 00:07:44,860 --> 00:07:45,280 >> [Nevetés] 167 00:07:45,280 --> 00:07:47,140 >> Majd törölje jövő pénteki előadások. 168 00:07:47,140 --> 00:07:50,590 Ahhoz, hogy lesz egy ajándék a számunkra, így valóban egy szép haladékot 169 00:07:50,590 --> 00:07:52,990 között ezen a héten, és két hét múlva. 170 00:07:52,990 --> 00:07:57,460 Tehát nem előadások a jövő héten, csak egy kis kis kvíz, amelyek meg kell 171 00:07:57,460 --> 00:07:59,030 egyre inkább izgatott. 172 00:07:59,030 --> 00:08:03,870 >> Úgyhogy most viszont a figyelmet valamit, ami valóban több, vizuális 173 00:08:03,870 --> 00:08:06,990 és sokkal izgalmasabb, és a terepet hogy mi lesz a láthatáron 174 00:08:06,990 --> 00:08:08,420 csak egy pár hét múlva. 175 00:08:08,420 --> 00:08:12,160 Az első teszt, akkor kapcsolja be a hangsúly a probléma határozza másik 176 00:08:12,160 --> 00:08:16,710 területen sajátos problémája, hogy a törvényszéki vagy biztonsági általában. 177 00:08:16,710 --> 00:08:19,550 >> Tény, hogy a hagyomány ezt a problémát meg számomra az egyik 178 00:08:19,550 --> 00:08:24,850 tanítás fickó vagy EH járni az egész campus vesz néhány képet 179 00:08:24,850 --> 00:08:29,450 azonosítható, de nem egyértelmű az emberek, helyeken, vagy a dolgok, akkor minden évben 180 00:08:29,450 --> 00:08:34,520 valahogy véletlenül töröl vagy sérült a digitális médiakártya 181 00:08:34,520 --> 00:08:35,720 ez a mi belső kamera. 182 00:08:35,720 --> 00:08:36,860 De nem nagy ügy. 183 00:08:36,860 --> 00:08:39,200 Tudok menni előre, és dugja hogy a gépemet. 184 00:08:39,200 --> 00:08:43,010 Tudom, hogy egy törvényszéki képet, így beszélni, a másolás a nullák és 185 00:08:43,010 --> 00:08:46,830 is le, hogy a memóriakártya-e az SD kártya vagy Compact Flash kártya vagy 186 00:08:46,830 --> 00:08:48,100 bármit is ismeri. 187 00:08:48,100 --> 00:08:49,300 És akkor lehet adni, hogy ki. 188 00:08:49,300 --> 00:08:53,190 >> És így a kihívás előtt, többek között dolgokat az Ön számára, az lesz, hogy írni 189 00:08:53,190 --> 00:08:58,630 C kód, amely helyreállítja a csomó JPEG számomra, és kiderült, lesz 190 00:08:58,630 --> 00:09:00,190 Azok az emberek, helyek és dolgok. 191 00:09:00,190 --> 00:09:03,340 És mi is beszélünk, hogy ez a probléma meg, és az elkövetkezõ napokban, a 192 00:09:03,340 --> 00:09:04,440 grafikus általában. 193 00:09:04,440 --> 00:09:06,140 Már használják őket, a tanfolyam, A kitörni. 194 00:09:06,140 --> 00:09:09,080 De te valami magától értetődőnek létezik a magas szintű fogalmak 195 00:09:09,080 --> 00:09:10,680 a téglalap és ovális. 196 00:09:10,680 --> 00:09:12,450 De a motorháztető alatt vannak pixel. 197 00:09:12,450 --> 00:09:14,370 És kellett kezdeni gondolkodni ezekről. 198 00:09:14,370 --> 00:09:18,800 Vagy ha a p-set 4 kell gondolni a különbség a tégla, hogy 199 00:09:18,800 --> 00:09:21,990 gyorsan maga labda mozog az egész a képernyőn kitörni. 200 00:09:21,990 --> 00:09:24,830 Tehát ezt a fogalmat a pontok a képernyőn, ami 201 00:09:24,830 --> 00:09:26,290 jöhet számításba már. 202 00:09:26,290 --> 00:09:29,430 >> Most már, hogy mit lát, de az, amit kap a számítógép képernyőjén. 203 00:09:29,430 --> 00:09:33,680 Ha valaha is nézte jó vagy rossz TV, esély elég jól 204 00:09:33,680 --> 00:09:36,280 kezeli a közönség, mint technofóbok akik nem igazán 205 00:09:36,280 --> 00:09:37,630 sokat tudnak számítástechnika. 206 00:09:37,630 --> 00:09:40,840 És ez így nagyon könnyű a rendőrség detektív azt mondani, nem igaz 207 00:09:40,840 --> 00:09:41,710 tiszta, hogy akár nekem? 208 00:09:41,710 --> 00:09:42,710 Vagy növeli, igaz? 209 00:09:42,710 --> 00:09:45,550 Fokozza olyan, mint a buzz szó a legtöbb olyan bűncselekmény kapcsolódó show. 210 00:09:45,550 --> 00:09:49,240 És a valóság az, ha egy nagyon homályos kép egy gyanús csinál 211 00:09:49,240 --> 00:09:51,620 valami rossz, akkor nem csak fokozza azt. 212 00:09:51,620 --> 00:09:53,080 Nem lehet nagyítani a végtelenségig. 213 00:09:53,080 --> 00:09:56,350 Nem lehet látni a csillogó valaki szem, hogy az elkövető 214 00:09:56,350 --> 00:09:59,860 különösen a bűnözés, annak ellenére, hogy a prevalenciája a tévében. 215 00:09:59,860 --> 00:10:04,110 >> És így ezzel nézzük motiválja, hogy következő probléma meg egy pillantás 216 00:10:04,110 --> 00:10:05,765 Néhány mutatja, amellyel ismerős lehet. 217 00:10:05,765 --> 00:10:06,500 >> [VIDEÓ LEJÁTSZÁS] 218 00:10:06,500 --> 00:10:07,835 >> -OK. 219 00:10:07,835 --> 00:10:09,956 Most pedig kap egy jó pillantást rád. 220 00:10:09,956 --> 00:10:17,060 221 00:10:17,060 --> 00:10:17,766 >> -Egy pillanat. 222 00:10:17,766 --> 00:10:18,658 Fuss vissza. 223 00:10:18,658 --> 00:10:19,550 >> -Várj egy percet. 224 00:10:19,550 --> 00:10:21,580 Menj jobbra. 225 00:10:21,580 --> 00:10:21,800 >> -Ott. 226 00:10:21,800 --> 00:10:22,690 Freeze ezt. 227 00:10:22,690 --> 00:10:23,692 >> -Teljes képernyő. 228 00:10:23,692 --> 00:10:23,846 >> -OK. 229 00:10:23,846 --> 00:10:24,154 Freeze ezt. 230 00:10:24,154 --> 00:10:25,140 >> -Húzza fel, hogy jó? 231 00:10:25,140 --> 00:10:27,090 >> -Vector be, hogy a srác a hátsó kerék. 232 00:10:27,090 --> 00:10:29,730 >> -Zoom in itt, ezen a helyen. 233 00:10:29,730 --> 00:10:33,700 >> -A megfelelő eszköz a leképezett bővíthető és kihegyezett. 234 00:10:33,700 --> 00:10:34,490 >> -Mi az? 235 00:10:34,490 --> 00:10:35,870 >> -Ez egy tartozékot programot. 236 00:10:35,870 --> 00:10:36,793 >> -Meg tudod tisztázni, hogy akár minden? 237 00:10:36,793 --> 00:10:38,560 >> -Nem tudom. 238 00:10:38,560 --> 00:10:39,090 Nézzük fokozza azt. 239 00:10:39,090 --> 00:10:41,690 >> -Enhance rész A-6. 240 00:10:41,690 --> 00:10:43,510 >> -I fokozta a részletek és a - 241 00:10:43,510 --> 00:10:44,456 >> -Azt hiszem, ahhoz, hogy fokozza. 242 00:10:44,456 --> 00:10:45,402 Engedje meg, hogy a képernyőt. 243 00:10:45,402 --> 00:10:47,300 >> -Fokozza a tükörképét szeme. 244 00:10:47,300 --> 00:10:49,330 >> -Fussunk át a video javítása. 245 00:10:49,330 --> 00:10:50,340 >> -Edgar, meg tudja fokozza ezt? 246 00:10:50,340 --> 00:10:52,320 >> -Várj. 247 00:10:52,320 --> 00:10:54,290 >> -Már dolgozik a közös gondolkodáshoz. 248 00:10:54,290 --> 00:10:55,560 >> -Valaki gondolkodás. 249 00:10:55,560 --> 00:10:56,440 >> -Reflection. 250 00:10:56,440 --> 00:10:57,940 >> -Van egy reflexió A férfi arca. 251 00:10:57,940 --> 00:10:58,860 >> -Az elmélkedés. 252 00:10:58,860 --> 00:10:59,710 >> -Van egy reflexió. 253 00:10:59,710 --> 00:11:00,900 >> Nagyítás-a tükör. 254 00:11:00,900 --> 00:11:03,500 >> -Láthatjuk tükrözi. 255 00:11:03,500 --> 00:11:04,700 >> -Tud fokozza a kép innen? 256 00:11:04,700 --> 00:11:05,700 >> -Tud fokozza neki itt? 257 00:11:05,700 --> 00:11:06,500 >> -El tudod növelni, hogy? 258 00:11:06,500 --> 00:11:07,380 >> -El tudod növelni, hogy? 259 00:11:07,380 --> 00:11:08,190 >> -Tudjuk fokozzák ezt? 260 00:11:08,190 --> 00:11:08,940 >> -El tudod növelni, hogy? 261 00:11:08,940 --> 00:11:10,280 >> -Várj egy kicsit, én fokozza. 262 00:11:10,280 --> 00:11:11,570 >> -Zoom be az ajtón. 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 >> [Nevetés] 266 00:11:13,197 --> 00:11:14,360 >> -Move in 267 00:11:14,360 --> 00:11:15,100 >> -Várj, állj. 268 00:11:15,100 --> 00:11:15,740 >> -Stop. 269 00:11:15,740 --> 00:11:16,290 >> Szünet-azt. 270 00:11:16,290 --> 00:11:19,390 >> -Forgatása 75 fok körül a függőleges kérem. 271 00:11:19,390 --> 00:11:19,886 >> [Nevetés] 272 00:11:19,886 --> 00:11:24,350 >> -Stop, és vissza a rész az ajtót. 273 00:11:24,350 --> 00:11:26,330 >> -Van egy Image Enhancer hogy képes bitmap? 274 00:11:26,330 --> 00:11:28,990 >> -Talán használhatjuk a Pradeep Sen módszer, hogy a Windows. 275 00:11:28,990 --> 00:11:30,680 >> -Ez a szoftver a legkorszerűbb. 276 00:11:30,680 --> 00:11:31,676 >> -Az ikon érték ki van kapcsolva. 277 00:11:31,676 --> 00:11:34,166 >> -A megfelelő kombináció algoritmusok. 278 00:11:34,166 --> 00:11:38,399 >> -Elvette megvilágítás algoritmusok a következő szintre, és tudom használni őket, hogy 279 00:11:38,399 --> 00:11:38,648 fokozzák ezt a fényképet. 280 00:11:38,648 --> 00:11:42,050 >> -Lock, és bővíteni a z-tengely. 281 00:11:42,050 --> 00:11:42,760 >> -Javítása. 282 00:11:42,760 --> 00:11:43,060 >> -Javítása. 283 00:11:43,060 --> 00:11:43,760 >> -Javítása. 284 00:11:43,760 --> 00:11:45,010 >> -Freeze és fokozza. 285 00:11:45,010 --> 00:11:47,470 286 00:11:47,470 --> 00:11:47,910 >> [END VIDEÓ LEJÁTSZÁS] 287 00:11:47,910 --> 00:11:51,470 >> DAVID J. MALAN: So Probléma Set 5. mi vár ránk ott. 288 00:11:51,470 --> 00:11:55,260 Így hamarosan, hogy jobban megértsék mikor és miért lehet 289 00:11:55,260 --> 00:11:57,300 és mi nem növeli az említett módon. 290 00:11:57,300 --> 00:12:00,090 De először is, nézzük vissza a figyelmünket néhány az építőelemek fogjuk 291 00:12:00,090 --> 00:12:02,250 kell tudni mondani a történetet. 292 00:12:02,250 --> 00:12:05,580 >> Így emlékeztetni arra, hogy felhívta ezt a képet a Hétfő és egy kicsit a múlt héten. 293 00:12:05,580 --> 00:12:09,970 És ez írja le az elrendezés a dolgok a számítógép memóriájában, amikor 294 00:12:09,970 --> 00:12:11,000 fut néhány programot. 295 00:12:11,000 --> 00:12:14,310 A tech szegmens fel tetején, visszahívás utal a tényleges nullák és egyesek 296 00:12:14,310 --> 00:12:16,000 alkotó a program. 297 00:12:16,000 --> 00:12:19,340 Van, hogy az alábbiakban néhány inicializált vagy inicializált adat, ami általában 298 00:12:19,340 --> 00:12:22,910 utal a dolgok, mint konstans vagy szövegek és globális változók, amelyek 299 00:12:22,910 --> 00:12:24,200 bejelentették előre. 300 00:12:24,200 --> 00:12:26,500 Ott van a halom, de majd jön vissza, hogy egy kicsit. 301 00:12:26,500 --> 00:12:27,410 >> És akkor ott van a verem. 302 00:12:27,410 --> 00:12:30,660 Hasonlóan egy köteg tálcák a cafeteria, ez az, ahol a memória lesz 303 00:12:30,660 --> 00:12:33,610 réteges és réteges, amikor azt teszed, amit a programban? 304 00:12:33,610 --> 00:12:36,380 305 00:12:36,380 --> 00:12:37,730 Mi a stack használatát? 306 00:12:37,730 --> 00:12:39,320 >> Igen? 307 00:12:39,320 --> 00:12:40,000 >> Call of funkciót. 308 00:12:40,000 --> 00:12:42,890 Minden alkalommal, amikor hívja a függvényt, akkor adott szelet memória a 309 00:12:42,890 --> 00:12:45,020 lokális változók vagy a paramétereit. 310 00:12:45,020 --> 00:12:48,810 És képileg, azt látjuk, hogy minden követő funkció neve, ha A 311 00:12:48,810 --> 00:12:52,520 hívások B hívások C hívások D, akkor kap rakott a verembe. 312 00:12:52,520 --> 00:12:55,630 És egyes fenti szelet memória lényegében egyedülálló hatály 313 00:12:55,630 --> 00:12:58,590 adott funkció, amely, természetesen, problematikus, ha azt szeretné, hogy kézzel 314 00:12:58,590 --> 00:13:01,850 egyik funkcióról a másikra egy darab Az adatok azt szeretné, hogy 315 00:13:01,850 --> 00:13:03,500 mutáció vagy módosíthatja. 316 00:13:03,500 --> 00:13:08,060 >> Tehát mi volt a megoldás, hogy lehetővé tegye A függvény képviseli egy verem 317 00:13:08,060 --> 00:13:11,390 keret változtatni a memória benne Egy másik stack frame? 318 00:13:11,390 --> 00:13:14,590 Hogyan két beszélni egymással? 319 00:13:14,590 --> 00:13:18,510 Így útján mutatók vagy címek, ami megint csak le, ahol 320 00:13:18,510 --> 00:13:22,280 memória, útján egy specifikus harapás szám, az adott 321 00:13:22,280 --> 00:13:23,830 érték megtalálható. 322 00:13:23,830 --> 00:13:26,860 Így emlékszem utoljára is folytattuk a történet, és nézett 323 00:13:26,860 --> 00:13:28,280 meglehetősen hibás program. 324 00:13:28,280 --> 00:13:32,900 És ez a program hibás, néhány okok miatt, de a leginkább aggasztó az egyik 325 00:13:32,900 --> 00:13:34,620 mert nem, hogy ellenőrizze, mi? 326 00:13:34,620 --> 00:13:39,111 327 00:13:39,111 --> 00:13:40,450 >> Igen, nem, hogy ellenőrizze a bemenet. 328 00:13:40,450 --> 00:13:41,870 Tessék? 329 00:13:41,870 --> 00:13:43,880 >> Ha ez több, mint 12 karakter. 330 00:13:43,880 --> 00:13:47,260 Tehát nagyon okosan, amikor a hívás memcopy, amely, mint a neve is sugallja, csak 331 00:13:47,260 --> 00:13:50,630 másolatokat memória második argumentumként be az első érv. 332 00:13:50,630 --> 00:13:54,730 A harmadik érv, nagyon okosan, a ellenőrizni, hogy megbizonyosodjon arról, hogy nem 333 00:13:54,730 --> 00:13:59,400 több, mint másolja, ebben az esetben, a hossza Bar, karakterek száma, 334 00:13:59,400 --> 00:14:03,810 a hely, ami a array C. De a probléma az, hogy milyen 335 00:14:03,810 --> 00:14:07,230 ha C önmagában nem elég nagy kezelni ezt? 336 00:14:07,230 --> 00:14:09,900 Fogod másolni száma byte, amit kapott. 337 00:14:09,900 --> 00:14:13,040 De mit valójában több bájt, mint van hely? 338 00:14:13,040 --> 00:14:16,770 >> Nos, ez a program nagyon ostobán csak vakon halad, hogy bármi legyen is az 339 00:14:16,770 --> 00:14:20,650 adott, helló backslash a 0 nagyszerű, ha karakterlánc rövid 340 00:14:20,650 --> 00:14:22,040 Elég, mint öt karakter. 341 00:14:22,040 --> 00:14:26,470 De ha ez tényleg 12 karakter vagy 1200 karakterekből láttuk utoljára 342 00:14:26,470 --> 00:14:29,380 hogy csak most lesz teljesen felülírják memória 343 00:14:29,380 --> 00:14:30,470 nem a tiéd. 344 00:14:30,470 --> 00:14:34,390 És ami a legrosszabb esetben, ha felülírja, hogy piros része, ott, hogy hívják a 345 00:14:34,390 --> 00:14:35,380 vissza cím - 346 00:14:35,380 --> 00:14:38,370 ez az, éppen ott, ahol a számítógép automatikusan, az Ön számára, mögött 347 00:14:38,370 --> 00:14:43,130 jelenetek, redő el egy 32 bites érték, emlékeztet, hogy milyen címre kellene 348 00:14:43,130 --> 00:14:47,080 vissza, amikor foo, ez a másik funkció történik végrehajtása. 349 00:14:47,080 --> 00:14:49,320 Ez egy morzsát a fajta amelyre visszatér. 350 00:14:49,320 --> 00:14:52,490 Ha felülírja, hogy a potenciálisan ha te vagy a rossz fiú, lehet lehetne 351 00:14:52,490 --> 00:14:54,750 potenciálisan átvenni valakinek számítógépét. 352 00:14:54,750 --> 00:14:58,020 És akkor minden bizonnyal összeomlik ez a legtöbb esetben. 353 00:14:58,020 --> 00:15:01,690 >> Most ez a probléma csak súlyosbította ahogy elkezdtünk beszélni memória 354 00:15:01,690 --> 00:15:03,010 kezelés általában. 355 00:15:03,010 --> 00:15:07,150 És malloc, a memória kiosztás, egy funkció, hogy tudjuk használni, hogy fordítsanak 356 00:15:07,150 --> 00:15:11,260 memóriát, ha nem tudjuk előre , hogy szükség lehet néhány. 357 00:15:11,260 --> 00:15:13,960 Így például, ha visszamegyek a készüléket itt. 358 00:15:13,960 --> 00:15:21,010 És megnyitja a múlt idő hello2.c, emlékszem a program itt, ami úgy festett, 359 00:15:21,010 --> 00:15:23,500 egy kis valamit, mint ez, mindössze három sor - 360 00:15:23,500 --> 00:15:27,940 meg nevét, majd a karakterlánc nevét, a bal oldalon, egyenlő getstring. 361 00:15:27,940 --> 00:15:29,690 És akkor nyomtassa ki, a felhasználó nevét. 362 00:15:29,690 --> 00:15:31,170 >> Szóval ez egy szuper egyszerű program. 363 00:15:31,170 --> 00:15:34,870 Ahhoz, hogy tiszta, hadd menjek előre és hello-2. 364 00:15:34,870 --> 00:15:36,680 Fogok csinálni dot slash hello-2-. 365 00:15:36,680 --> 00:15:37,750 Mi a neve - 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 Helló David. 369 00:15:39,540 --> 00:15:41,060 Úgy tűnik, hogy a munka az OK gombra. 370 00:15:41,060 --> 00:15:43,140 De mi folyik valójában alatt Hood itt? 371 00:15:43,140 --> 00:15:44,670 Először hadd húzza vissza néhány réteg. 372 00:15:44,670 --> 00:15:48,380 Karakterlánc csak egy szinonimája voltunk rájött, milyen? 373 00:15:48,380 --> 00:15:49,110 Char csillag. 374 00:15:49,110 --> 00:15:52,740 Szóval, hogy ez egy kicsit misztikus de technikailag korrekt, hogy ez a 375 00:15:52,740 --> 00:15:55,570 egy char csillag, ami azt jelenti, hogy a név, igen, ez a változó. 376 00:15:55,570 --> 00:15:59,920 De milyen nevet tárolja a címe a char, amely úgy érzi, egy kicsit furcsa 377 00:15:59,920 --> 00:16:01,050 mert én kapok vissza a string. 378 00:16:01,050 --> 00:16:03,580 Kezdek újra több karakter nem char. 379 00:16:03,580 --> 00:16:07,400 >> De persze, csak akkor kell az első char címét emlékezni, ahol a 380 00:16:07,400 --> 00:16:08,870 egész szöveg, mert miért? 381 00:16:08,870 --> 00:16:12,700 Hogyan kitalálni, ahol a végén a szöveg is tudta az elején? 382 00:16:12,700 --> 00:16:13,630 A backslash nulla. 383 00:16:13,630 --> 00:16:17,260 Tehát a két nyomokat kitalálni kezdete előtt és a végén a 384 00:16:17,260 --> 00:16:20,280 minden húr van, mindaddig, amíg ők megfelelően alakult azzal a null 385 00:16:20,280 --> 00:16:22,110 terminátor, hogy backslash nulla. 386 00:16:22,110 --> 00:16:24,520 >> De ez hívja getstring. 387 00:16:24,520 --> 00:16:28,020 És kiderül, hogy getstring Ennyi idő már egyfajta 388 00:16:28,020 --> 00:16:28,820 csalás nekünk. 389 00:16:28,820 --> 00:16:32,460 Már ezt a munkaerő, az biztos, kapok egy húr a felhasználó. 390 00:16:32,460 --> 00:16:34,580 De hol van a memória nem jön? 391 00:16:34,580 --> 00:16:38,440 Ha visszamegyünk a kép itt meghatározását alkalmazni, mindössze egy 392 00:16:38,440 --> 00:16:42,610 az előbb, hogy a verem, ahol memória megy, ha függvény megkapja, 393 00:16:42,610 --> 00:16:45,370 az, hogy a logika, amikor telefonál getstring, aztán írja 394 00:16:45,370 --> 00:16:50,900 D-A-V-I-D Enter, ahol a D-A-V-I-D backslash nulla tárolt alapuló 395 00:16:50,900 --> 00:16:53,480 történetet már elmondta messzire? 396 00:16:53,480 --> 00:16:55,190 >> Úgy tűnik, hogy a a verem, nem igaz? 397 00:16:55,190 --> 00:16:58,120 Ha telefonál, hogy kapsz egy húr kis szelet memóriát a stack. 398 00:16:58,120 --> 00:17:01,630 Így magától értetődik, hogy a D-A-V-I-D backslash nulla tárolja 399 00:17:01,630 --> 00:17:02,770 ott a verem. 400 00:17:02,770 --> 00:17:07,680 De várjunk egy percet, getString visszatér hogy a string, hogy úgy mondjam, ami azt jelenti, 401 00:17:07,680 --> 00:17:11,700 ez tálcát a cafeteria lekerült a verem. 402 00:17:11,700 --> 00:17:14,560 És mi azt mondtuk utolsó alkalom, hogy amint a függvény, és hogy ezt a 403 00:17:14,560 --> 00:17:20,109 tálcát, hogy úgy mondjam, le a verem, milyen lehet feltételezni, a maradék 404 00:17:20,109 --> 00:17:21,819 hogy a memória? 405 00:17:21,819 --> 00:17:25,160 Valahogy átrajzolták őket kérdőjelek válnak, mert hatásosan 406 00:17:25,160 --> 00:17:26,250 ismeretlen értékeket. 407 00:17:26,250 --> 00:17:29,500 Ezeket újra fel lehet használni, ha valamilyen következő függvényt. 408 00:17:29,500 --> 00:17:31,870 >> Más szóval, ha történetesen kell tárolni - 409 00:17:31,870 --> 00:17:34,350 Én rajzolni egy gyors kép Itt a verem. 410 00:17:34,350 --> 00:17:38,690 Ha történetesen rajz aljára Az emlékezetemben szegmensben, és mi mondjuk 411 00:17:38,690 --> 00:17:42,230 , hogy ez az a hely a memória által elfoglalt fő és talán arg C 412 00:17:42,230 --> 00:17:46,790 arg v és bármi mást, a programban, ha getstring hívják, 413 00:17:46,790 --> 00:17:51,120 feltehetően getstring lesz egy darab memória itt. 414 00:17:51,120 --> 00:17:53,940 És akkor D-A-V-I-D valahogy végül ezt a funkciót. 415 00:17:53,940 --> 00:17:55,320 És fogok túlzottan leegyszerűsít. 416 00:17:55,320 --> 00:18:00,050 De tegyük fel, hogy a D-A-V-I-D backslash nulla. 417 00:18:00,050 --> 00:18:03,500 Tehát ennyi bájtot használják A keret getstring. 418 00:18:03,500 --> 00:18:08,270 >> De amint getstring visszatér, akkor mondta utolsó alkalom, hogy a memória több mint 419 00:18:08,270 --> 00:18:11,340 itt minden lesz - woops! - 420 00:18:11,340 --> 00:18:14,270 minden lesz hatékonyan törli. 421 00:18:14,270 --> 00:18:17,220 És mi lehet gondolni ezt most olyan kérdés pont azért, mert ki tudja, 422 00:18:17,220 --> 00:18:18,720 mi fog válni, hogy a memóriát. 423 00:18:18,720 --> 00:18:22,130 Sőt, gyakran hívják funkciók kivéve getstring. 424 00:18:22,130 --> 00:18:24,750 És amint hívom más funkció, mint getstring, talán nem 425 00:18:24,750 --> 00:18:28,860 az adott program keretében csak nézett at, de egy másik, biztosan más 426 00:18:28,860 --> 00:18:34,180 funkció lehet, hogy a végén, hogy adott Ez a következő helyszínen, a verem. 427 00:18:34,180 --> 00:18:39,410 >> Tehát nem lehet, hogy getstring üzletek D-A-V-I-D a verem mert én 428 00:18:39,410 --> 00:18:41,040 azonnal elveszítik hozzáférést. 429 00:18:41,040 --> 00:18:43,720 De mi tudjuk, hogy getString csak akkor tér vissza, mi? 430 00:18:43,720 --> 00:18:47,220 Ez nem tér vissza a nekem hat karakter. 431 00:18:47,220 --> 00:18:51,090 Mit, hogy valóban vissza nem arra a következtetésre jutunk utoljára? 432 00:18:51,090 --> 00:18:52,480 A cím az első. 433 00:18:52,480 --> 00:18:56,650 Tehát valahogy, mikor hívott getstring, ez elosztása egy darab memória 434 00:18:56,650 --> 00:18:59,620 a szöveg, hogy a felhasználók típusa és akkor vissza címét is. 435 00:18:59,620 --> 00:19:02,930 És kiderül, hogy ha azt szeretné, hogy funkció segítségével a memória ebben 436 00:19:02,930 --> 00:19:08,390 útra vagy oda annak a személynek, aki hívott ezt a funkciót, a címét 437 00:19:08,390 --> 00:19:11,870 hogy a darab a memória, akkor feltétlenül nem tudod, hogy a verem, a 438 00:19:11,870 --> 00:19:14,750 alul, mert funkcionálisan ez csak majd nem lesz a tiéd túl 439 00:19:14,750 --> 00:19:17,800 gyorsan, így valószínűleg hiszem, ha mi valószínűleg lesz, hogy dobálják meg 440 00:19:17,800 --> 00:19:20,130 ehelyett, az úgynevezett kupac. 441 00:19:20,130 --> 00:19:25,290 >> Tehát az alján az emlékezet elrendezése és a tetején a emlékezet 442 00:19:25,290 --> 00:19:26,820 elrendezés egy csomó szegmensben. 443 00:19:26,820 --> 00:19:29,270 Az egyik a verem, és a jobb felett ez a kupac. 444 00:19:29,270 --> 00:19:33,680 És halom csak egy másik darab memória nem használható funkciók 445 00:19:33,680 --> 00:19:34,770 ha ők hívják. 446 00:19:34,770 --> 00:19:38,100 Ez használt hosszú távú memóriát, ha szeretnénk egy funkciót, hogy megragad néhány 447 00:19:38,100 --> 00:19:42,700 memória és képesnek kell lennie, hogy tarts ki, hogy anélkül, hogy elveszítené az irányítást felette. 448 00:19:42,700 --> 00:19:45,550 >> Most talán azonnal látni, hogy ez nem 449 00:19:45,550 --> 00:19:48,060 feltétlenül tökéletes design. 450 00:19:48,060 --> 00:19:51,350 Mivel a program támogatását, memória a verem, vagy hívja egyre több és 451 00:19:51,350 --> 00:19:55,540 több funkciót lát el, vagy ahogy osztja memóriát a kupac malloc le, mint 452 00:19:55,540 --> 00:20:00,690 getstring csinál, amit egyértelműen úgy tűnik, hogy elkerülhetetlen probléma? 453 00:20:00,690 --> 00:20:00,860 >> Rendben. 454 00:20:00,860 --> 00:20:03,150 Mint a tény, hogy ezek a nyilak mutatnak egymásnak 455 00:20:03,150 --> 00:20:04,380 nem jót. 456 00:20:04,380 --> 00:20:08,630 És valóban, mi is nagyon gyorsan összeomolhat egy programot a tetszőleges számú módon. 457 00:20:08,630 --> 00:20:12,050 Sőt, azt hiszem, lehet, hogy tette ezt véletlenül egyszer. 458 00:20:12,050 --> 00:20:14,020 Vagy ha nem, csináljuk szándékosan most. 459 00:20:14,020 --> 00:20:21,330 Hadd menjek előre, és írni szuper gyorsan a program neve dontdothis.c. 460 00:20:21,330 --> 00:20:26,730 És most megyek ide, és nem éles tartalmazzák stdio.h. 461 00:20:26,730 --> 00:20:32,620 Nézzük kijelentik function ize vesz nem érv, ami 462 00:20:32,620 --> 00:20:34,040 jelöli, jól semmis. 463 00:20:34,040 --> 00:20:37,830 >> És az egyetlen dolog foo fog tenni a meghívni az ize, ami valószínűleg nem a 464 00:20:37,830 --> 00:20:39,100 legokosabb ötlet, de hát legyen. 465 00:20:39,100 --> 00:20:40,490 Ent fő semmis. 466 00:20:40,490 --> 00:20:45,270 Most az egyetlen dolog fontos lesz tennie, hogy hívja ize is. 467 00:20:45,270 --> 00:20:51,050 És csak a hecc kedvéért, én megyek előre, itt, és azt mondják, printf "Hello 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 Tehát, ha nem hibázni, Legyen dontdothis dot perjel. 471 00:21:00,160 --> 00:21:01,960 És tegyük azt egy nagyobb ablak - 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 Gyerünk. 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 Úgy tűnik, meg tudod csinálni. 478 00:21:13,100 --> 00:21:15,190 A fenébe is. 479 00:21:15,190 --> 00:21:16,190 OK. 480 00:21:16,190 --> 00:21:16,580 Várjon. 481 00:21:16,580 --> 00:21:17,370 Készenlét. 482 00:21:17,370 --> 00:21:18,270 Vajon mi - 483 00:21:18,270 --> 00:21:20,110 Mi nem használjuk a make. 484 00:21:20,110 --> 00:21:22,050 >> [Sóhaj] 485 00:21:22,050 --> 00:21:25,110 >> Tudom, de azt hiszem, csak hagyni, hogy az. 486 00:21:25,110 --> 00:21:28,410 Uh, igen. 487 00:21:28,410 --> 00:21:30,660 A fenébe is. 488 00:21:30,660 --> 00:21:32,640 Megoldani ezt a Rob. 489 00:21:32,640 --> 00:21:34,678 Mi van? 490 00:21:34,678 --> 00:21:35,928 Ez nagyon egyszerű. 491 00:21:35,928 --> 00:21:43,820 492 00:21:43,820 --> 00:21:47,360 Igen, mi lett optimalizálás ki. 493 00:21:47,360 --> 00:21:48,970 OK, állvány szia. 494 00:21:48,970 --> 00:21:49,950 Most már jobban érzem magam. 495 00:21:49,950 --> 00:21:51,390 OK. 496 00:21:51,390 --> 00:21:51,780 Rendben van. 497 00:21:51,780 --> 00:21:53,430 >> Szóval újrafordítani a - 498 00:21:53,430 --> 00:21:55,880 Legyen Ön dontdothis. 499 00:21:55,880 --> 00:22:00,090 Lehet, hogy nevezze át ezt a dothis.c csak egy pillanat. 500 00:22:00,090 --> 00:22:00,710 Ott vagyunk. 501 00:22:00,710 --> 00:22:01,240 Köszönöm. 502 00:22:01,240 --> 00:22:02,050 OK. 503 00:22:02,050 --> 00:22:05,480 Tehát az a tény, hogy én nyomtatás valami volt, valójában csak 504 00:22:05,480 --> 00:22:08,150 lassítja a folyamat, amely által volna el ezen a ponton. 505 00:22:08,150 --> 00:22:08,510 OK. 506 00:22:08,510 --> 00:22:08,870 Pfuj! 507 00:22:08,870 --> 00:22:11,180 >> Tehát mi történik valójában? 508 00:22:11,180 --> 00:22:14,440 Az ok, mint egy félre, nem bármit tekintetében bemeneti és 509 00:22:14,440 --> 00:22:17,270 kimenet általában a lassabb, mert kell írni a karaktereket 510 00:22:17,270 --> 00:22:18,600 képernyőn Meg görgetni. 511 00:22:18,600 --> 00:22:21,720 Tehát hosszú történet rövid volt, én valójában történt, így türelmetlen, mi lett volna 512 00:22:21,720 --> 00:22:23,260 látta ezt a végeredmény is. 513 00:22:23,260 --> 00:22:26,220 Most, hogy van út a print-up, látjuk azonnal. 514 00:22:26,220 --> 00:22:28,410 Miért történik ez. 515 00:22:28,410 --> 00:22:31,300 Nos, az egyszerű magyarázat, persze, az, hogy a foo talán nem kellene 516 00:22:31,300 --> 00:22:32,500 is nevezte magát. 517 00:22:32,500 --> 00:22:34,470 >> Most általánosságban, ez rekurziót. 518 00:22:34,470 --> 00:22:36,970 És úgy gondoltuk, egy pár hétig óra rekurzív jó. 519 00:22:36,970 --> 00:22:40,330 Rekurzió ez varázslatos módon kifejezni magát super tömören. 520 00:22:40,330 --> 00:22:41,400 És ez csak működik. 521 00:22:41,400 --> 00:22:45,060 De van egy fontos jellemzője az A rekurzív programok beszéltünk 522 00:22:45,060 --> 00:22:48,260 szó és nézett eddig, ami az volt, hogy volt, mi? 523 00:22:48,260 --> 00:22:52,610 A alapeset, ami néhány kemény kódolt esetben, mondta bizonyos helyzetekben 524 00:22:52,610 --> 00:22:56,210 nem hívja ize, ami egyértelműen nem ez a helyzet. 525 00:22:56,210 --> 00:22:58,920 >> Tehát mi történik valójában tekintve ezt a képet? 526 00:22:58,920 --> 00:23:01,790 Nos, amikor a fő hívja ize kap egy szeletet a memória. 527 00:23:01,790 --> 00:23:04,150 Amikor foo foo hívja, nem lesz egy szelet memóriát. 528 00:23:04,150 --> 00:23:06,430 Amikor hívja foo foo, kap egy szeletet. 529 00:23:06,430 --> 00:23:07,080 Kap egy szeletet. 530 00:23:07,080 --> 00:23:08,120 Kap egy szeletet. 531 00:23:08,120 --> 00:23:09,460 Mivel foo soha nem vissza. 532 00:23:09,460 --> 00:23:12,160 Mi soha nem töröl egy ilyen keretek a veremből. 533 00:23:12,160 --> 00:23:15,930 Szóval fúj át a kupac, nem beszélve ki tudja még mit, és 534 00:23:15,930 --> 00:23:19,600 mi túllépése határain a úgynevezett szegmens a memória. 535 00:23:19,600 --> 00:23:21,790 Hiba megy szegmentálás hamis. 536 00:23:21,790 --> 00:23:24,110 >> Tehát a megoldás van nyilvánvalóan nem ezt. 537 00:23:24,110 --> 00:23:28,830 De a nagyobb következmény az, hogy igen, van egyáltalán némi limit, 538 00:23:28,830 --> 00:23:32,470 még akkor is, ha ez nem jól definiált, hogy miként számos olyan funkcióval hívhatja a 539 00:23:32,470 --> 00:23:34,970 programot, hányszor egy függvény is nevezi magát. 540 00:23:34,970 --> 00:23:38,430 Így, bár a mi prédikálni rekurzió mivel ez potenciálisan varázslatos dolog, amit egy 541 00:23:38,430 --> 00:23:41,870 Néhány héttel ezelőtt a szigma funkció, és amikor megkapjuk az adatokat 542 00:23:41,870 --> 00:23:45,270 struktúrák és CS50, akkor látni más alkalmazások is, ez nem 543 00:23:45,270 --> 00:23:46,500 feltétlenül a legjobb dolog. 544 00:23:46,500 --> 00:23:50,070 Mert ha egy függvény nevezi magát, nevezi magát, akkor is, ha van egy alap 545 00:23:50,070 --> 00:23:54,860 az esetben, ha nem nyomja meg, hogy alapesetben a 1000 hívások vagy 10000 hívásokat, a 546 00:23:54,860 --> 00:23:58,800 Akkor lehet, hogy elfogy a hely az úgynevezett stack és hit 547 00:23:58,800 --> 00:24:00,400 más szegmensei memóriát. 548 00:24:00,400 --> 00:24:03,950 Tehát ez is egy tervezési trade-off között elegancia között 549 00:24:03,950 --> 00:24:06,920 megbízhatóságát az adott végrehajtását. 550 00:24:06,920 --> 00:24:10,780 >> Tehát van egy másik hátránya, vagy egy másik fontos dolog, amire mi már 551 00:24:10,780 --> 00:24:11,720 csináltál eddig. 552 00:24:11,720 --> 00:24:12,980 Amikor felhívtam getstring - 553 00:24:12,980 --> 00:24:15,120 hadd menjek vissza a hello-2. 554 00:24:15,120 --> 00:24:18,170 Figyeljük meg, hogy én hívom getstring, amely visszatér egy címet. 555 00:24:18,170 --> 00:24:20,730 És azt állítják, hogy ma cím ez a kupac. 556 00:24:20,730 --> 00:24:24,480 És most én vagyok kinyomtatása a szöveg azon a címen. 557 00:24:24,480 --> 00:24:27,000 De soha nem nevezett ellentéte getstring. 558 00:24:27,000 --> 00:24:30,850 Soha nem kellett calll funkció, mint a ungetstring, ahol a kéz vissza 559 00:24:30,850 --> 00:24:31,610 hogy a memória. 560 00:24:31,610 --> 00:24:33,250 De őszintén akkor valószínűleg kellett volna. 561 00:24:33,250 --> 00:24:37,390 Mert ha folyamatosan azt kérdezi, a számítógép memória útján valaki, mint 562 00:24:37,390 --> 00:24:40,830 getstring de soha nem adja vissza, biztosan ez is köteles vezetni a 563 00:24:40,830 --> 00:24:42,970 problémák ahol elfogy a memória. 564 00:24:42,970 --> 00:24:46,140 >> És valóban, akkor keresse meg ezeket a problémák az új eszköz, amelynek használatát 565 00:24:46,140 --> 00:24:47,640 egy kicsit rejtélyes, hogy írja. 566 00:24:47,640 --> 00:24:50,960 De hadd menjen előre, és pancsoló fel A képernyőn csak egy pillanat. 567 00:24:50,960 --> 00:24:56,940 Én megyek előre, és fuss Valgrid paraméterrel amelynek első parancs 568 00:24:56,940 --> 00:25:00,260 argumentum a neve Az, hogy a program hello-2. 569 00:25:00,260 --> 00:25:02,650 És sajnos ez kimenet atrociously 570 00:25:02,650 --> 00:25:04,290 komplex ok nélkül. 571 00:25:04,290 --> 00:25:06,280 Tehát látjuk, hogy a rendetlenség. 572 00:25:06,280 --> 00:25:07,530 David az állami nevem. 573 00:25:07,530 --> 00:25:09,760 Szóval ez a program ténylegesen fut. 574 00:25:09,760 --> 00:25:11,180 És most, hogy ez a kimenet. 575 00:25:11,180 --> 00:25:13,400 >> Tehát Valgrind hasonló lélekben GDB. 576 00:25:13,400 --> 00:25:14,950 Ez nem egy debugger önmagában. 577 00:25:14,950 --> 00:25:16,270 De ez egy memória-ellenőrző. 578 00:25:16,270 --> 00:25:20,140 Ez egy program, amely fut a programozását és megmondja, ha kéri a 579 00:25:20,140 --> 00:25:23,860 számítógép memória és soha nem adta vissza, ami azt jelenti, hogy van 580 00:25:23,860 --> 00:25:24,570 memóriavesztés. 581 00:25:24,570 --> 00:25:26,240 És a memória szivárgás általában rossz. 582 00:25:26,240 --> 00:25:29,120 És neked, felhasználói számítógépek Valószínűleg éreztem, hogy van-e 583 00:25:29,120 --> 00:25:30,300 Mac vagy PC. 584 00:25:30,300 --> 00:25:33,730 Használtál már a számítógépet ideig, és nem újraindul több 585 00:25:33,730 --> 00:25:36,820 nap, vagy épp most van egy csomó program fut, és a szart 586 00:25:36,820 --> 00:25:42,360 lassítja az őrlési megállt, vagy legalábbis ez szuper idegesítő a használata, mert a 587 00:25:42,360 --> 00:25:44,350 minden csak most szuper lassú. 588 00:25:44,350 --> 00:25:46,260 >> Most, hogy lehet tetszőleges számú oka. 589 00:25:46,260 --> 00:25:49,600 Ez lehet egy végtelen ciklus, a hiba valaki kódot, vagy még egyszerűbben, a 590 00:25:49,600 --> 00:25:53,250 azt jelentheti, hogy a 'használ több memória, vagy megpróbálja, mint az 591 00:25:53,250 --> 00:25:54,920 számítógép valójában. 592 00:25:54,920 --> 00:25:57,770 És talán van egy hiba a programban hogy folyamatosan azt kérdezi a memória. 593 00:25:57,770 --> 00:26:02,480 Böngészők évek hírhedt Ehhez kér egyre több memóriát 594 00:26:02,480 --> 00:26:03,870 de soha nem adják vissza. 595 00:26:03,870 --> 00:26:07,220 Bizonyára, ha csak véges memória, nem lehet kérni 596 00:26:07,220 --> 00:26:09,990 végtelen sokszor bizonyos, hogy a memóriát. 597 00:26:09,990 --> 00:26:13,070 >> És amit itt látsz, bár Ismét Valgrind kimenete 598 00:26:13,070 --> 00:26:17,490 szükségtelenül bonyolult, hogy pillantást Először is, ez az érdekes rész. 599 00:26:17,490 --> 00:26:18,890 Heap - 600 00:26:18,890 --> 00:26:20,060 használatban exit. 601 00:26:20,060 --> 00:26:22,810 Tehát itt van, hogy mennyi memória volt használatban van az a kupac 602 00:26:22,810 --> 00:26:24,300 alkalommal, amikor a programot kilépett - 603 00:26:24,300 --> 00:26:27,280 látszólag hat bájt egyben. 604 00:26:27,280 --> 00:26:28,710 Így fogok hullám kezem hogy mi a blokk. 605 00:26:28,710 --> 00:26:31,270 Gondold azt, hogy csak egy darab, egy technikai szó darab. 606 00:26:31,270 --> 00:26:33,140 De hat bájt - 607 00:26:33,140 --> 00:26:36,870 milyen hat byte még használatban? 608 00:26:36,870 --> 00:26:37,390 >> Pontosan. 609 00:26:37,390 --> 00:26:41,520 D-A-V-I-D backslash nulla, öt betű nevét, valamint a null terminátor. 610 00:26:41,520 --> 00:26:46,350 Így ez a program valgrind észre, hogy én kért hat bájt, úgy tűnik, a 611 00:26:46,350 --> 00:26:48,950 módja getstring, de soha nem adta vissza. 612 00:26:48,950 --> 00:26:52,030 És valóban, ez lehet, hogy nem annyira Nyilvánvaló, ha a program nem három 613 00:26:52,030 --> 00:26:53,590 vonalak, de 300 sor. 614 00:26:53,590 --> 00:26:56,920 Tehát valójában hogy egy másik parancs argumentum a Valgrid a 615 00:26:56,920 --> 00:26:58,290 hogy még inkább bőbeszédű. 616 00:26:58,290 --> 00:26:59,760 Ez egy kicsit bosszantó, hogy emlékezzen. 617 00:26:59,760 --> 00:27:01,580 De ha - 618 00:27:01,580 --> 00:27:01,930 lássuk. 619 00:27:01,930 --> 00:27:03,540 Szivárgás - 620 00:27:03,540 --> 00:27:05,030 Volt szivárgás - 621 00:27:05,030 --> 00:27:07,580 még nem emlékszem mi az, ki kezét. 622 00:27:07,580 --> 00:27:08,550 >> - Szivárgás-ellenőrzés teljes értéke. 623 00:27:08,550 --> 00:27:10,180 Igen, köszönöm. 624 00:27:10,180 --> 00:27:12,520 - Szivárgás-ellenőrzés teljes értéke. 625 00:27:12,520 --> 00:27:13,800 Enter. 626 00:27:13,800 --> 00:27:14,940 Ugyanaz a program fut. 627 00:27:14,940 --> 00:27:16,180 Írja be a David újra. 628 00:27:16,180 --> 00:27:17,660 Most már látom, egy kicsit részletesebben. 629 00:27:17,660 --> 00:27:20,890 De lent a kupac összefoglalóját megegyezik a négy - ah, 630 00:27:20,890 --> 00:27:22,120 ez elég szép. 631 00:27:22,120 --> 00:27:25,460 Most Valgrind valóban keres egy kicsit nehezebb a kódomat. 632 00:27:25,460 --> 00:27:29,580 És ez azt mondja, hogy, úgy tűnik, malloc sorban - 633 00:27:29,580 --> 00:27:30,580 mi kicsinyíteni. 634 00:27:30,580 --> 00:27:31,980 Sorban - 635 00:27:31,980 --> 00:27:32,930 nem látjuk, mi vonal van. 636 00:27:32,930 --> 00:27:35,110 De malloc az első bűnös. 637 00:27:35,110 --> 00:27:38,630 Van egy blog malloc. 638 00:27:38,630 --> 00:27:39,810 >> Minden rendben? 639 00:27:39,810 --> 00:27:40,450 OK, nem. 640 00:27:40,450 --> 00:27:40,940 Nem igaz? 641 00:27:40,940 --> 00:27:42,520 Felhívtam getString. 642 00:27:42,520 --> 00:27:44,460 getstring látszólag hívások malloc. 643 00:27:44,460 --> 00:27:47,800 Tehát mi kódsor látszólag a hibás, amiért 644 00:27:47,800 --> 00:27:49,050 juttatott a memória? 645 00:27:49,050 --> 00:27:51,560 646 00:27:51,560 --> 00:27:55,540 Tegyük fel, hogy aki írta malloc már kb elég hosszú, hogy ez 647 00:27:55,540 --> 00:27:56,390 nem az ő hibájuk. 648 00:27:56,390 --> 00:27:57,520 Így talán az enyém. 649 00:27:57,520 --> 00:28:02,000 getString in cs50.c -, hogy ez a fájlt valahol a számítógépen - 650 00:28:02,000 --> 00:28:05,210 sorban 286 úgy tűnik, hogy a tettes. 651 00:28:05,210 --> 00:28:08,140 Most tegyük fel, hogy CS50 volt körül tisztességes mennyiségű időt, így 652 00:28:08,140 --> 00:28:09,720 mi is tévedhetetlen. 653 00:28:09,720 --> 00:28:14,080 És így talán nem getString hogy a hiba abban rejlik, hanem 654 00:28:14,080 --> 00:28:17,810 hello-2.c 18. sor. 655 00:28:17,810 --> 00:28:20,670 >> Szóval vessünk egy pillantást hogy mi volt a 18. sor. 656 00:28:20,670 --> 00:28:21,130 Oh. 657 00:28:21,130 --> 00:28:27,130 Valahogy ez a sor nem feltétlenül hibás, per se, de ez az oka 658 00:28:27,130 --> 00:28:28,630 mögött memóriavesztés. 659 00:28:28,630 --> 00:28:32,140 Tehát egyszerűen szuper, mi lenne ösztönösen a megoldás itt? 660 00:28:32,140 --> 00:28:34,710 Ha kérünk a memória, soha nem így vissza, és úgy tűnik, hogy a 661 00:28:34,710 --> 00:28:37,940 probléma, mert az idő múlásával a számítógép is elfogy a memória, esetleg lassú 662 00:28:37,940 --> 00:28:42,110 le, rossz dolgok történnek, nos, mi az egyszerű intuitív megoldás? 663 00:28:42,110 --> 00:28:43,140 Csak add vissza. 664 00:28:43,140 --> 00:28:44,770 >> Hogyan szabaduljon fel, hogy a memória? 665 00:28:44,770 --> 00:28:49,970 Nos, szerencsére ez nagyon egyszerű hogy csak annyit szabad nevét. 666 00:28:49,970 --> 00:28:51,260 És még soha nem csináltam ilyet. 667 00:28:51,260 --> 00:28:55,890 De akkor lényegében gondolni szabad, mint az ellenkezője malloc. 668 00:28:55,890 --> 00:28:58,030 szabad az ellentéte kiosztása memória. 669 00:28:58,030 --> 00:28:59,540 Tehát most hadd fordítanod ezt. 670 00:28:59,540 --> 00:29:02,050 Legyen hello-2. 671 00:29:02,050 --> 00:29:04,620 Hadd futtassa újra. hello-2-David. 672 00:29:04,620 --> 00:29:07,290 Tehát úgy tűnik, hogy a munka pontosan ugyanúgy. 673 00:29:07,290 --> 00:29:11,180 De ha visszamegyek a Valgrid és újra futni hogy ugyanazt a parancsot az én újonnan 674 00:29:11,180 --> 00:29:14,720 lefordított programot, gépelés az én nevemben, mint korábban - 675 00:29:14,720 --> 00:29:15,370 szép. 676 00:29:15,370 --> 00:29:16,760 Heap Összegzés - 677 00:29:16,760 --> 00:29:17,740 használatban kilépés - 678 00:29:17,740 --> 00:29:19,370 nulla bájt nulla blokkokat. 679 00:29:19,370 --> 00:29:21,840 És ez szuper jó, minden halom blokkok felszabadult. 680 00:29:21,840 --> 00:29:23,480 Szivárgás nem lehetséges. 681 00:29:23,480 --> 00:29:27,200 >> Tehát jön, nem a problémás Set 4 de probléma Set 5, a törvényszéki 682 00:29:27,200 --> 00:29:30,740 és tovább, ez is lesz mérőszáma helyességét 683 00:29:30,740 --> 00:29:33,630 programot, függetlenül attól, hogy van vagy nincs memóriavesztés. 684 00:29:33,630 --> 00:29:36,900 De szerencsére, nem csak, hogy érvelni rajtuk keresztül ösztönösen, ami 685 00:29:36,900 --> 00:29:40,430 az, vitathatatlanul, könnyű kis programok de nehezebb a nagyobb programok 686 00:29:40,430 --> 00:29:43,860 Valgrind, azoknak nagyobb programok segít azonosítani 687 00:29:43,860 --> 00:29:45,360 az adott problémát. 688 00:29:45,360 --> 00:29:47,500 >> De van egy másik probléma , hogy az esetleg. 689 00:29:47,500 --> 00:29:51,245 Hadd nyissa meg ezt a fájlt itt, ami, ismét egy kissé egyszerű példát. 690 00:29:51,245 --> 00:29:53,760 De nézzük koncentrálni, hogy mit ez a program nem. 691 00:29:53,760 --> 00:29:55,190 Ezt hívják memory.c. 692 00:29:55,190 --> 00:29:58,380 Majd tegye később ma a zip a mai forráskódját. 693 00:29:58,380 --> 00:30:01,610 És észre, hogy van egy függvény neve f argumentum nélküli és 694 00:30:01,610 --> 00:30:02,800 vissza semmit. 695 00:30:02,800 --> 00:30:07,240 A vonal 20, én látszólag nyilvánító mutató egy int, és felszólította, hogy x. 696 00:30:07,240 --> 00:30:09,570 Én hozzárendelése a visszatérés értéke malloc. 697 00:30:09,570 --> 00:30:14,590 És csak hogy tisztázzuk, hogy hány bájt vagyok Talán kapok vissza malloc 698 00:30:14,590 --> 00:30:17,080 ebben a helyzetben? 699 00:30:17,080 --> 00:30:18,040 >> Valószínűleg 40. 700 00:30:18,040 --> 00:30:18,840 Honnan veszed ezt? 701 00:30:18,840 --> 00:30:22,410 Nos, ha emlékeztetni arra, hogy egy int gyakran 4 bájt, legalább is a 702 00:30:22,410 --> 00:30:25,110 készülék, 10-szer 4 nyilvánvalóan 40.. 703 00:30:25,110 --> 00:30:28,920 Így malloc visszatér a címet, egy darab memória és tárolja, hogy 704 00:30:28,920 --> 00:30:30,800 foglalkozni végül az x. 705 00:30:30,800 --> 00:30:32,570 Tehát egyértelmű, hogy mi akkor történik? 706 00:30:32,570 --> 00:30:34,990 Nos, hadd váltson vissza a mi képet. 707 00:30:34,990 --> 00:30:38,150 Hadd ne csak felhívni az alján az én számítógép memóriája, hadd menjen előre, és 708 00:30:38,150 --> 00:30:42,990 felhívni az egész téglalap képviseli az összes az én RAM. 709 00:30:42,990 --> 00:30:44,790 >> Azt mondjuk, hogy a verem van az alján. 710 00:30:44,790 --> 00:30:47,010 És van egy szöveges szegmens A nem inicializált adat. 711 00:30:47,010 --> 00:30:49,880 De én csak megy, elvont azokat más dolog, el, mint pont, pont pont. 712 00:30:49,880 --> 00:30:53,470 Elmegyek, hogy olvassa el ezt a mivel a kupac tetején. 713 00:30:53,470 --> 00:30:57,070 És akkor az alján ezt a képet, képviseletére fő, megyek 714 00:30:57,070 --> 00:30:59,880 hogy ez egy szelet memória a verem. 715 00:30:59,880 --> 00:31:03,150 A f, megyek, hogy ez egy szelet memória a verem. 716 00:31:03,150 --> 00:31:05,140 Most kaptam, hogy konzultáljon a forrás kódot. 717 00:31:05,140 --> 00:31:07,170 Melyek a lokális változók legfontosabb? 718 00:31:07,170 --> 00:31:10,710 Úgy látszik semmi, hogy a szelet gyakorlatilag üres, vagy nem is olyan nagy 719 00:31:10,710 --> 00:31:11,600 ahogy már készült is. 720 00:31:11,600 --> 00:31:15,730 De f, van egy helyi változó, amely az úgynevezett x. 721 00:31:15,730 --> 00:31:20,410 Szóval megyek előre, és f egy darab memória, amelyben az x. 722 00:31:20,410 --> 00:31:24,680 >> És most malloc 10-szer 4 Tehát malloc 40, hol van 723 00:31:24,680 --> 00:31:25,430 memória érkezik? 724 00:31:25,430 --> 00:31:27,530 Már nem készült a kép mint ez előtt. 725 00:31:27,530 --> 00:31:31,140 De tegyük fel, hogy ez hatékonyan érkező van, így az egyik, 726 00:31:31,140 --> 00:31:33,170 kettő, három, négy, öt. 727 00:31:33,170 --> 00:31:34,680 És most kell 40 e. 728 00:31:34,680 --> 00:31:37,540 Úgyhogy csak csináld, pont, pont, pont, hogy azt sugallják, hogy van még több memóriát 729 00:31:37,540 --> 00:31:39,350 jön vissza a kupac. 730 00:31:39,350 --> 00:31:40,710 Most mi a címe? 731 00:31:40,710 --> 00:31:42,620 Nézzük választani a tetszőleges kezelni, mint mindig - 732 00:31:42,620 --> 00:31:46,310 Ox123, annak ellenére, hogy valószínűleg meg , hogy valami teljesen más. 733 00:31:46,310 --> 00:31:50,420 Ez a címe az első byte-ban memória kérek malloc számára. 734 00:31:50,420 --> 00:31:53,630 >> Tehát röviden, ha egyszer sor 20 végrehajtja, mi szó 735 00:31:53,630 --> 00:31:57,170 tárolt az x itt? 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 Az ökör is érdektelen. 739 00:32:01,550 --> 00:32:03,200 Ez csak azt jelenti, itt egy hexadecimális szám. 740 00:32:03,200 --> 00:32:06,490 De mi a legfontosabb az, hogy amit én már boltban x-ben, amely egy helyi változót. 741 00:32:06,490 --> 00:32:10,260 De az adatok típusát, ismét egy cím egy int. 742 00:32:10,260 --> 00:32:12,710 Nos, én megyek, hogy tárolja Ox123. 743 00:32:12,710 --> 00:32:16,610 De ismétlem, ha ez egy kicsit túl bonyolult feleslegesen, ha görgetni 744 00:32:16,610 --> 00:32:21,490 vissza tudjuk absztrakt ezt el egészen ésszerűen és csak annyit, hogy az x 745 00:32:21,490 --> 00:32:23,910 mutatót, hogy a darab a memória. 746 00:32:23,910 --> 00:32:24,070 >> OK. 747 00:32:24,070 --> 00:32:26,230 Most az a kérdés kéznél a következő - 748 00:32:26,230 --> 00:32:29,910 line 21, kiderült, hibás. 749 00:32:29,910 --> 00:32:31,160 Miért? 750 00:32:31,160 --> 00:32:34,890 751 00:32:34,890 --> 00:32:36,930 >> Tessék? 752 00:32:36,930 --> 00:32:38,640 Nem kell - 753 00:32:38,640 --> 00:32:40,390 azt mondják, hogy még egyszer. 754 00:32:40,390 --> 00:32:41,240 Nos, ez nem szabad. 755 00:32:41,240 --> 00:32:42,350 Szóval ez a második, de. 756 00:32:42,350 --> 00:32:45,000 Tehát itt van egy másik, de kifejezetten at line 21. 757 00:32:45,000 --> 00:32:49,480 758 00:32:49,480 --> 00:32:50,040 >> Pontosan. 759 00:32:50,040 --> 00:32:54,980 Ez az egyszerű vonal a kód csak egy puffer túlcsordulás, puffer túllépése. 760 00:32:54,980 --> 00:32:57,050 A buffer csak azt jelenti, egy darab memóriát. 761 00:32:57,050 --> 00:33:01,520 De ez a darab memória mérete 10, 10 egész számok, ami azt jelenti, ha 762 00:33:01,520 --> 00:33:05,350 index bele a szintaktikai cukor A tömb jelölés, a tér 763 00:33:05,350 --> 00:33:09,220 zárójelben, van hozzáférése x 0 x tartó konzol 1 x, 764 00:33:09,220 --> 00:33:10,390 konzol pont, pont, pont. 765 00:33:10,390 --> 00:33:13,270 x konzol 9 a legnagyobb. 766 00:33:13,270 --> 00:33:17,680 Tehát, ha én x konzol 10, ahol Én valóban megy a memóriában? 767 00:33:17,680 --> 00:33:19,120 >> Nos, ha már 10 int - 768 00:33:19,120 --> 00:33:21,070 nézzük valóban felhívni minden ezek itt. 769 00:33:21,070 --> 00:33:22,700 Szóval ez volt az első öt. 770 00:33:22,700 --> 00:33:24,660 Itt van a másik öt ints. 771 00:33:24,660 --> 00:33:29,580 Tehát x konzol 0 van itt. x konzol 1 itt. x konzol 9 itt. x konzol 772 00:33:29,580 --> 00:33:37,960 10. itt van, ami azt jelenti, én mondom, sorban 21, a számítógép, hogy a 773 00:33:37,960 --> 00:33:39,400 számát, ahol? 774 00:33:39,400 --> 00:33:42,010 A szám 0, ahol? 775 00:33:42,010 --> 00:33:43,380 Nos, ez 0, igen. 776 00:33:43,380 --> 00:33:45,460 De az a tény, hogy a 0 egyfajta véletlen. 777 00:33:45,460 --> 00:33:47,140 Lehet, hogy a szám 50, minden érdekel. 778 00:33:47,140 --> 00:33:50,480 De próbáljuk tedd x konzol 10, ott, ahol ez a 779 00:33:50,480 --> 00:33:53,700 kérdőjel készül, amely nem egy jó dolog. 780 00:33:53,700 --> 00:33:57,070 Ez a program is nagyon jól ennek eredményeként összeomlik. 781 00:33:57,070 --> 00:33:59,400 >> Nos, menjünk előre, és nézd meg, ez Valóban, mi történik. 782 00:33:59,400 --> 00:34:02,600 Legyen memória, mivel a fájl hívják memory.c. 783 00:34:02,600 --> 00:34:05,950 Menjünk előre, és fuss A program memória. 784 00:34:05,950 --> 00:34:08,239 Tehát van szerencsénk, valóban, úgy tűnik. 785 00:34:08,239 --> 00:34:09,340 Szerencsénk van. 786 00:34:09,340 --> 00:34:11,060 De lássuk most fut Valgrind. 787 00:34:11,060 --> 00:34:14,170 Első pillantásra, a program esetleg úgy tűnik, hogy teljesen korrekt. 788 00:34:14,170 --> 00:34:18,010 De hadd futni Valgrid a - Szivárgás-ellenőrzés felel teljes a memória. 789 00:34:18,010 --> 00:34:20,110 >> És most, amikor én vezetem ezt - 790 00:34:20,110 --> 00:34:21,030 érdekes. 791 00:34:21,030 --> 00:34:26,800 Hibás írni méret 4-es vonal 21 memory.c. 792 00:34:26,800 --> 00:34:29,284 Vonal 21 memory.c az melyik? 793 00:34:29,284 --> 00:34:30,340 Ó, érdekes. 794 00:34:30,340 --> 00:34:31,080 De várjunk csak. 795 00:34:31,080 --> 00:34:32,389 Méret: 4, mi ez utal? 796 00:34:32,389 --> 00:34:34,969 Csak nem egy ír, de ez a 4-es méretű. 797 00:34:34,969 --> 00:34:36,889 Miért 4? 798 00:34:36,889 --> 00:34:39,280 Azért, mert ez egy int, amely , ismét négy bájt. 799 00:34:39,280 --> 00:34:42,510 Tehát Valgrind találtál egy hibát, hogy én, pillantva a kód, nem. 800 00:34:42,510 --> 00:34:45,040 És talán a TF, illetve nem. 801 00:34:45,040 --> 00:34:48,469 Milyen De Valgrind biztos megállapította, hogy a már hibázott is, akkor is, 802 00:34:48,469 --> 00:34:52,719 de szerencsénk volt, és a számítógép úgy döntött, igaz, én nem fog zuhanni 803 00:34:52,719 --> 00:34:57,470 csak azért, mert megérintett egy byte, egy int-nyi memória, hogy nem 804 00:34:57,470 --> 00:34:58,550 tulajdonképpen saját. 805 00:34:58,550 --> 00:35:00,380 >> Nos, mi mást is hibás itt. 806 00:35:00,380 --> 00:35:01,180 Cím - 807 00:35:01,180 --> 00:35:03,190 ez egy őrült keresi cím hexadecimális. 808 00:35:03,190 --> 00:35:06,890 Ez csak azt jelenti, valahol a halom nulla byte után egy blokk mérete 40 809 00:35:06,890 --> 00:35:07,620 osztják. 810 00:35:07,620 --> 00:35:10,610 Hadd kicsinyítés ide, és nézd meg ez egy kicsit több segítséget. 811 00:35:10,610 --> 00:35:11,410 Érdekes. 812 00:35:11,410 --> 00:35:15,600 40 bájt egyértelműen elveszett veszteség rekord 1 of 1. 813 00:35:15,600 --> 00:35:17,840 Ismét több szót, mint hasznos itt. 814 00:35:17,840 --> 00:35:21,350 Alapján azonban a kiemelt vonalak, hol Talán fókuszálom 815 00:35:21,350 --> 00:35:24,070 figyelmet egy bug? 816 00:35:24,070 --> 00:35:26,570 Úgy néz ki, mint egy sor 20 memory.c. 817 00:35:26,570 --> 00:35:30,990 >> Tehát, ha megyünk vissza a sorban 20, ez a az egyik, hogy korábban kijelölt. 818 00:35:30,990 --> 00:35:33,030 És ez nem feltétlenül hibás. 819 00:35:33,030 --> 00:35:35,160 De mi ez megfordult hatásait. 820 00:35:35,160 --> 00:35:38,790 Szóval hogyan tudom kijavítani legalább egy ilyen hibát? 821 00:35:38,790 --> 00:35:42,240 Mit tehettem volna, miután line 21? 822 00:35:42,240 --> 00:35:47,110 Tehettem mentes x, így a , hogy adja vissza, hogy a memória. 823 00:35:47,110 --> 00:35:49,230 És hogyan tudom kijavítani ezt a hibát? 824 00:35:49,230 --> 00:35:52,120 Azt kell feltétlenül megy nem messzebb, mint 0-ra. 825 00:35:52,120 --> 00:35:53,670 Hadd próbálja újra futtatásához. 826 00:35:53,670 --> 00:35:56,080 Sajnálom, biztosan menni nem messzebb, mint 9. 827 00:35:56,080 --> 00:35:57,510 Legyen memória. 828 00:35:57,510 --> 00:36:00,650 Hadd futtasd Valgrid egy nagyobb ablak. 829 00:36:00,650 --> 00:36:01,580 És most meg. 830 00:36:01,580 --> 00:36:02,250 Szép. 831 00:36:02,250 --> 00:36:03,270 Minden halom blokkok felszabadult. 832 00:36:03,270 --> 00:36:04,270 Szivárgás nem lehetséges. 833 00:36:04,270 --> 00:36:07,520 És itt fönt, nincs említés többé az érvénytelen jobbra. 834 00:36:07,520 --> 00:36:09,820 >> Csak azért, hogy kapzsi, és nézzük ha újabb bizonyítéka 835 00:36:09,820 --> 00:36:11,050 nem megy a tervezettnek - 836 00:36:11,050 --> 00:36:12,560 Én szerencsés egy perce. 837 00:36:12,560 --> 00:36:15,530 És az a tény, hogy ez talán 0 feleslegesen félrevezető. 838 00:36:15,530 --> 00:36:20,650 Csak csináljuk 50, egy kissé önkényes szám, hogy a memória pont perjel memória - 839 00:36:20,650 --> 00:36:21,410 még mindig szerencsés. 840 00:36:21,410 --> 00:36:22,510 Semmi sem összeomlik. 841 00:36:22,510 --> 00:36:26,150 Tegyük fel, hogy csak nem valami igazán ostoba, és én 100 fő. 842 00:36:26,150 --> 00:36:30,360 Hadd remake memória, dot slash memória - 843 00:36:30,360 --> 00:36:31,075 szerencséje volt megint. 844 00:36:31,075 --> 00:36:32,800 Hogy a 1000? 845 00:36:32,800 --> 00:36:35,370 ints túl durván, hol kellene? 846 00:36:35,370 --> 00:36:37,410 Legyen memória - 847 00:36:37,410 --> 00:36:38,570 a fenébe is. 848 00:36:38,570 --> 00:36:39,920 >> [Nevetés] 849 00:36:39,920 --> 00:36:41,270 >> OK. 850 00:36:41,270 --> 00:36:43,920 Ne szórakozz körül már. 851 00:36:43,920 --> 00:36:45,120 Futtasd memória. 852 00:36:45,120 --> 00:36:45,840 Ott vagyunk. 853 00:36:45,840 --> 00:36:46,410 Rendben van. 854 00:36:46,410 --> 00:36:52,500 Szóval úgy tűnik, hogy index 100.000 ints túl, ahol kellett volna 855 00:36:52,500 --> 00:36:54,410 memória, rossz dolgok történnek. 856 00:36:54,410 --> 00:36:56,430 Tehát ez nyilvánvalóan nem kemény, gyors szabály. 857 00:36:56,430 --> 00:36:58,190 Kedves volt a vizsgálat és hiba, hogy ott. 858 00:36:58,190 --> 00:37:02,230 De ez azért van, mert hosszú történet rövid, A számítógép memóriája is megosztott 859 00:37:02,230 --> 00:37:03,580 be ezeket a dolgokat nevezett szegmensben. 860 00:37:03,580 --> 00:37:07,260 És néha, a számítógép valóban adott egy kicsit több memóriát 861 00:37:07,260 --> 00:37:08,400 mint kér. 862 00:37:08,400 --> 00:37:12,170 De a hatékonyság, ez csak egyszerűbb még több memóriát, de csak neked 863 00:37:12,170 --> 00:37:13,780 hogy kapsz egy részét. 864 00:37:13,780 --> 00:37:16,370 >> És ha szerencséd lesz néha, Ezért lehet, hogy képes megérinteni 865 00:37:16,370 --> 00:37:17,795 memória, ami nem a tiéd. 866 00:37:17,795 --> 00:37:21,860 Ön nincs garancia arra, hogy milyen értéket teszel nem lesz ott, mert 867 00:37:21,860 --> 00:37:25,080 a számítógép még mindig azt hiszi, hogy nem a tiéd, de ez nem feltétlenül fog 868 00:37:25,080 --> 00:37:29,910 a hit egy másik szegmens a memória, a számítógép és indukál hiba, mint 869 00:37:29,910 --> 00:37:31,710 ezt itt. 870 00:37:31,710 --> 00:37:32,060 Rendben van. 871 00:37:32,060 --> 00:37:37,240 Bármilyen kérdése majd memória? 872 00:37:37,240 --> 00:37:37,590 >> Rendben van. 873 00:37:37,590 --> 00:37:40,610 Vessünk egy pillantást ide, akkor, olyasmi, amit már szedett 874 00:37:40,610 --> 00:37:48,361 nyújtott jó ideje, amely Ebben nevű fájlt cs50.h. 875 00:37:48,361 --> 00:37:49,420 Tehát ez a fájl. 876 00:37:49,420 --> 00:37:51,130 Ez csak egy csomó Hozzászólások fel tetején. 877 00:37:51,130 --> 00:37:53,900 És lehet, hogy nézett erre, ha Ön megbökte körül a készülék. 878 00:37:53,900 --> 00:37:57,000 De kiderül, hogy minden alkalommal, amikor használtam karakterláncot 879 00:37:57,000 --> 00:38:01,130 szinonimája, az eszköz, ami által deklarált hogy szinonimája volt a 880 00:38:01,130 --> 00:38:03,990 kulcsszó typedef, típusú definíció. 881 00:38:03,990 --> 00:38:07,500 És mi lényegében azt mondja, hogy a string egy szinonimája char csillag. 882 00:38:07,500 --> 00:38:11,190 Ez az eszköz, amellyel a verem létre ezek a képzés kerekek ismert 883 00:38:11,190 --> 00:38:12,040 a húr. 884 00:38:12,040 --> 00:38:14,830 >> Most itt van, csak a prototípus A getchar. 885 00:38:14,830 --> 00:38:17,350 Talán már látta korábban, de ez sőt, hogy mit csinál. getchar 886 00:38:17,350 --> 00:38:19,070 argumentum nélküli, vissza char. 887 00:38:19,070 --> 00:38:21,340 getdouble argumentum nélküli, visszaad egy dupla. 888 00:38:21,340 --> 00:38:24,440 getFloat argumentum nélküli, vissza egy úszó, és így tovább. 889 00:38:24,440 --> 00:38:27,270 getInt van itt. getlonglong van itt. 890 00:38:27,270 --> 00:38:28,820 És getstring van itt. 891 00:38:28,820 --> 00:38:29,420 És ennyi. 892 00:38:29,420 --> 00:38:33,080 Ez a lila vonal másik előfeldolgozó irányelvet, mert az 893 00:38:33,080 --> 00:38:35,550 hashtag elején azt. 894 00:38:35,550 --> 00:38:35,870 >> Rendben van. 895 00:38:35,870 --> 00:38:38,380 Tehát most hadd menjen cs50.c. 896 00:38:38,380 --> 00:38:40,400 És nem fogunk beszélni túl sokáig ezt. 897 00:38:40,400 --> 00:38:43,280 De, hogy egy pillantást, hogy mi folyik mindez 898 00:38:43,280 --> 00:38:46,434 idő, hadd menjen - 899 00:38:46,434 --> 00:38:48,250 csináljuk getchar. 900 00:38:48,250 --> 00:38:51,050 Tehát getchar többnyire megjegyzéseket. 901 00:38:51,050 --> 00:38:52,060 De úgy néz ki, mint ez. 902 00:38:52,060 --> 00:38:54,800 Tehát ez a tényleges funkció getchar, hogy már 903 00:38:54,800 --> 00:38:56,055 Ha igaz, létezik. 904 00:38:56,055 --> 00:38:59,370 És bár még nem használja ezt gyakran, ha egyáltalán, akkor legalább 905 00:38:59,370 --> 00:39:00,470 viszonylag egyszerű. 906 00:39:00,470 --> 00:39:02,580 Tehát érdemes egy gyors pillantást itt. 907 00:39:02,580 --> 00:39:06,540 >> Tehát getchar van egy végtelen ciklusba, szándékosan így látszólag. 908 00:39:06,540 --> 00:39:10,050 Ezután hívja - és ez egyfajta szép újrafelhasználását kód magunk írta. 909 00:39:10,050 --> 00:39:11,220 Arra kéri getstring. 910 00:39:11,220 --> 00:39:12,460 Mert mit is azt jelenti, hogy egy char? 911 00:39:12,460 --> 00:39:14,730 Nos, lehet, hogy meg is próbálja, hogy egy egész sor szöveget a felhasználó és 912 00:39:14,730 --> 00:39:16,940 akkor csak nézd meg egy ezeket a karaktereket. 913 00:39:16,940 --> 00:39:19,170 A vonal 60, itt van egy kis kis józanság csekket. 914 00:39:19,170 --> 00:39:21,610 Ha getstring vissza null, ne folytassa. 915 00:39:21,610 --> 00:39:22,820 Valami nem stimmel. 916 00:39:22,820 --> 00:39:28,120 >> Most ez kissé bosszantó, de hagyományos C-ben char max talán 917 00:39:28,120 --> 00:39:29,960 képviseli azt, amit csak név alapján? 918 00:39:29,960 --> 00:39:31,670 Ez egy állandó. 919 00:39:31,670 --> 00:39:36,040 Ez olyan, mint a numerikus értéke legnagyobb char is képviselt 920 00:39:36,040 --> 00:39:40,370 egy falatot, ami talán a 255, amely a legnagyobb szám 921 00:39:40,370 --> 00:39:42,720 képviseli nyolc bit, kiindulva nulla. 922 00:39:42,720 --> 00:39:47,460 Úgyhogy ezt, hogy ezt a funkciót, ha a írom ezt a kódot, csak azért, mert 923 00:39:47,460 --> 00:39:51,753 Ha valami elromlik, de getchar a célja az életben, hogy vissza 924 00:39:51,753 --> 00:39:54,830 char, meg kell, hogy valahogy képes hogy jelezze a felhasználónak, hogy 925 00:39:54,830 --> 00:39:55,840 valami elromlott. 926 00:39:55,840 --> 00:39:56,970 Nem tér vissza null. 927 00:39:56,970 --> 00:39:58,480 Kiderül, hogy egy null mutató. 928 00:39:58,480 --> 00:40:01,030 És ismét, getchar van vissza a char. 929 00:40:01,030 --> 00:40:04,760 >> Így az egyezmény, ha valami rossz, te, a programozó, vagy 930 00:40:04,760 --> 00:40:08,160 Ebben az esetben nekem a könyvtárban volt a csak úgy önkényesen, ha 931 00:40:08,160 --> 00:40:12,230 valami elromlik, megyek vissza a szám 255, amely valóban 932 00:40:12,230 --> 00:40:17,240 azt jelenti, hogy nem, a felhasználó nem írja a karakter által képviselt 933 00:40:17,240 --> 00:40:21,410 szám 255, mert volt egy ellopni mint egy úgynevezett sentinel értéket 934 00:40:21,410 --> 00:40:23,410 jelentenek problémát. 935 00:40:23,410 --> 00:40:27,010 Most kiderült, hogy a karakter 255 nem az, amit akkor írja be 936 00:40:27,010 --> 00:40:28,380 a billentyűzet, így nem nagy ügy. 937 00:40:28,380 --> 00:40:30,910 A felhasználó nem veszi észre, hogy Loptam ezt a karaktert. 938 00:40:30,910 --> 00:40:34,620 De ha valaha is látni man oldalakat a számítógépes rendszer néhány utalás egy 939 00:40:34,620 --> 00:40:38,560 nagybetűs állandó, mint ez, azt mondja, abban az esetben hiba ez az állandó erővel 940 00:40:38,560 --> 00:40:42,720 vissza, ez minden egyes emberi nem évvel ezelőtt önkényesen úgy döntött, hogy 941 00:40:42,720 --> 00:40:45,680 vissza ezt a különleges értéket, és ez egy állandó, ha 942 00:40:45,680 --> 00:40:46,840 valami elromlik. 943 00:40:46,840 --> 00:40:48,580 >> Most a varázslat történik itt. 944 00:40:48,580 --> 00:40:52,600 Először is, én kijelentette sorban 67 két karakter, C1 és C2. 945 00:40:52,600 --> 00:40:57,080 És akkor a sorban 68, van valójában egy sor kód, amely az emlékeztető 946 00:40:57,080 --> 00:41:01,140 barátunk printf, tekintettel arra, hogy nem rendelkezik százalékos Cs. idézi. 947 00:41:01,140 --> 00:41:06,490 De vegyük észre, mi történik itt. sscanf jelenti húr Scan - 948 00:41:06,490 --> 00:41:11,690 azt beolvasása formázott string, ergo sscanf. 949 00:41:11,690 --> 00:41:12,590 Mit jelent ez? 950 00:41:12,590 --> 00:41:16,310 Ez azt jelenti, hogy át sscanf egy string. 951 00:41:16,310 --> 00:41:18,420 És vonal bármi a felhasználó beír be 952 00:41:18,420 --> 00:41:23,520 Azt át sscanf a formátum string, mint ez, ami megmondja scanf mik 953 00:41:23,520 --> 00:41:25,870 Ön remélve, hogy a felhasználó által beírt szöveg 954 00:41:25,870 --> 00:41:29,730 Ezután át-a címét két darabokban a memóriát, ebben az esetben, 955 00:41:29,730 --> 00:41:31,150 mert van két helyőrző. 956 00:41:31,150 --> 00:41:34,610 Így fogom, hogy ez a cím A C1 és C2 a címét. 957 00:41:34,610 --> 00:41:37,700 >> És emlékszem, hogy adjon egy funkciót a címét, néhány változó, mi 958 00:41:37,700 --> 00:41:38,950 a hatása? 959 00:41:38,950 --> 00:41:41,400 960 00:41:41,400 --> 00:41:45,050 Mit lehet tenni, hogy a funkció eredményeként Az így ez a címét 961 00:41:45,050 --> 00:41:48,170 változó, szemben a változó maga? 962 00:41:48,170 --> 00:41:49,450 Meg lehet változtatni, igaz? 963 00:41:49,450 --> 00:41:53,250 Ha lenne valaki, egy térképet a fizikai cím, akkor ott, és nem 964 00:41:53,250 --> 00:41:54,750 amit akarnak az adott címre. 965 00:41:54,750 --> 00:41:55,800 Ugyanaz ötlet. 966 00:41:55,800 --> 00:41:59,950 Ha át sscanf, a cím két darabokban a memóriát, még ezek az apró 967 00:41:59,950 --> 00:42:03,585 kis darabokban a memóriát, a C1 és C2, de azt mondani, hogy a cím őket, 968 00:42:03,585 --> 00:42:05,170 sscanf megváltoztathatja. 969 00:42:05,170 --> 00:42:08,530 >> Így sscanf célja az életben, ha azt olvassuk a man oldalt, hogy olvassa el, amit a 970 00:42:08,530 --> 00:42:13,420 felhasználó beírt, remélem, hogy a felhasználónak, beírt egy karaktert, és talán 971 00:42:13,420 --> 00:42:16,470 másik karakter, és, amit a felhasználó gépelt, az első karakter megy 972 00:42:16,470 --> 00:42:19,310 Itt, a második karakter megy itt. 973 00:42:19,310 --> 00:42:22,470 Most, mint egy félre, ezt, és akkor csak hogy ez a dokumentáció, 974 00:42:22,470 --> 00:42:25,570 az a tény, hogy tettem egy üres hely van csak azt jelenti, hogy nem érdekel, ha 975 00:42:25,570 --> 00:42:28,440 a felhasználó megnyomja a szóköz, néhány szer, mielőtt ő veszi a 976 00:42:28,440 --> 00:42:30,400 karakter fogom figyelmen kívül hagyni minden fehér térben. 977 00:42:30,400 --> 00:42:32,510 Úgy, hogy tudom, a dokumentációt. 978 00:42:32,510 --> 00:42:36,570 >> Az a tény, hogy van egy másik% c majd szóköz valójában 979 00:42:36,570 --> 00:42:37,410 szándékos. 980 00:42:37,410 --> 00:42:41,190 Azt akarom, hogy képes érzékelni, ha a felhasználó elrontottam, vagy nem működött együtt. 981 00:42:41,190 --> 00:42:45,630 Szóval remélem, hogy a felhasználó csak beírt egy karakter, ezért remélem, 982 00:42:45,630 --> 00:42:50,640 hogy sscanf csak akkor fog visszatérni a értéke 1, mert újra, ha olvastam 983 00:42:50,640 --> 00:42:55,400 A dokumentáció sscanf célja a élet, hogy visszatérjen a számát 984 00:42:55,400 --> 00:42:59,170 változók töltöttek a felhasználói. 985 00:42:59,170 --> 00:43:02,270 >> Átmentem a két változó címeket, a C1 és C2. 986 00:43:02,270 --> 00:43:06,420 Remélem azonban, hogy csak az egyik megölik őket, mert ha sscanf 987 00:43:06,420 --> 00:43:11,130 vissza 2, mi feltehetőleg a hatása logikus? 988 00:43:11,130 --> 00:43:14,600 Ez a felhasználó nem csak add nekem karaktert, mint mondtam neki. 989 00:43:14,600 --> 00:43:17,860 Valószínűleg begépelt legalább két karakter. 990 00:43:17,860 --> 00:43:22,430 Tehát, ha ahelyett, hogy nem volt a második % C, csak volt egy, amely 991 00:43:22,430 --> 00:43:25,370 őszintén lenne intuitívabb megközelítés, azt hiszem, az első pillantásra, 992 00:43:25,370 --> 00:43:30,220 akkor nem lesz képes felismerni ha a felhasználó már így több 993 00:43:30,220 --> 00:43:31,780 input, mint amennyit valójában akart. 994 00:43:31,780 --> 00:43:34,100 Tehát ez egy implicit formában hiba ellenőrzése. 995 00:43:34,100 --> 00:43:35,640 >> De észre, mit csinálok itt. 996 00:43:35,640 --> 00:43:39,970 Egyszer vagyok benne, hogy a felhasználó adott nekem egy karakter, azt szabad a vonal, ennek 997 00:43:39,970 --> 00:43:44,450 az ellenkezője getstring, ami viszont használ malloc, aztán vissza 998 00:43:44,450 --> 00:43:51,030 C1, a karakter, hogy reméltem a Felhasználó által megadott, és csak biztosítani. 999 00:43:51,030 --> 00:43:54,680 Tehát egy gyors megpillantotta csak, de a bármilyen kérdése van getchar? 1000 00:43:54,680 --> 00:43:57,450 1001 00:43:57,450 --> 00:43:59,590 Majd gyere vissza néhány, a többiek. 1002 00:43:59,590 --> 00:44:03,770 >> Nos, hadd menjen előre, és ezt - Tegyük fel, hogy csak motiválni 1003 00:44:03,770 --> 00:44:08,910 vita egy hét plusz idő, ez a egy fájl neve structs.h. 1004 00:44:08,910 --> 00:44:11,440 És ismét, ez csak egy kis ízelítőt valami, ami előttünk. 1005 00:44:11,440 --> 00:44:13,090 De vegyük észre, hogy sok erre megjegyzéseket. 1006 00:44:13,090 --> 00:44:17,440 Hadd kiemelni csak az érdekes része most. 1007 00:44:17,440 --> 00:44:18,020 typedef - 1008 00:44:18,020 --> 00:44:19,700 van, hogy ugyanazt a kulcsszót újra. 1009 00:44:19,700 --> 00:44:23,100 typedef használjuk nyilatkozni húr egy speciális adattípust. 1010 00:44:23,100 --> 00:44:27,490 Használhatja typedef létre új adattípusok nem létezett, amikor 1011 00:44:27,490 --> 00:44:28,570 C találták. 1012 00:44:28,570 --> 00:44:32,520 Például, int jön C. char jön a C. dupla jön C. De 1013 00:44:32,520 --> 00:44:34,000 nincs fogalma a diák. 1014 00:44:34,000 --> 00:44:37,230 És mégis lenne elég hasznos, hogy képes írni egy programot, amely tárolja 1015 00:44:37,230 --> 00:44:40,440 a változó, a diák azonosító száma, a neve, és a házukat. 1016 00:44:40,440 --> 00:44:42,890 Más szavakkal, három darab Az adatok, mint egy int, és a 1017 00:44:42,890 --> 00:44:44,420 szöveg és egy másik string. 1018 00:44:44,420 --> 00:44:48,220 >> A typedef, mi elég erős erről, és a kulcsszó a sturct 1019 00:44:48,220 --> 00:44:53,660 struktúra, akkor a programozó 2013-ban, ténylegesen meg a saját a 1020 00:44:53,660 --> 00:44:57,530 adattípusok nem létezett év ezelőtt, de hogy illeszkedjen a célra. 1021 00:44:57,530 --> 00:45:01,910 És itt, a sorok 13 keresztül 19, mi nyilvánító új adattípus, mint a 1022 00:45:01,910 --> 00:45:04,320 int, de nevezni diák. 1023 00:45:04,320 --> 00:45:09,310 És azon belül a változó fog három dolgot - int egy string, 1024 00:45:09,310 --> 00:45:09,930 és egy sor. 1025 00:45:09,930 --> 00:45:13,040 Szóval lehet gondolni, mi az igazán itt történt, annak ellenére, hogy ez a 1026 00:45:13,040 --> 00:45:17,160 kicsit egyszerűsítése a mai, egy diák lényegében folyik 1027 00:45:17,160 --> 00:45:19,450 hogy néz ki. 1028 00:45:19,450 --> 00:45:22,580 Hogy lesz egy darab memória egy azonosítót, a nevet 1029 00:45:22,580 --> 00:45:25,580 mezőt, és egy házat a területen. 1030 00:45:25,580 --> 00:45:30,670 És képes lesz használni ezeket a darabokat memória és elérheti őket az alábbiak szerint. 1031 00:45:30,670 --> 00:45:38,870 >> Ha bemegy struct0.c, itt van egy viszonylag hosszú, de a következő egy 1032 00:45:38,870 --> 00:45:42,630 minta, a kód használja ezt az új trükköt. 1033 00:45:42,630 --> 00:45:45,790 Tehát először, hadd hívjam fel a figyelmet Az érdekes részek felfelé tetején. 1034 00:45:45,790 --> 00:45:49,670 Sharp határozza meg a diákok 3, kijelenti, állandó nevezett diákok és a jogutód 1035 00:45:49,670 --> 00:45:53,450 azt önkényesen a 3-as szám, csak így már három diák segítségével 1036 00:45:53,450 --> 00:45:54,830 ezt a programot most. 1037 00:45:54,830 --> 00:45:55,960 Itt jön Main. 1038 00:45:55,960 --> 00:45:58,860 És figyelje, hogyan kijelentem egy sor diák? 1039 00:45:58,860 --> 00:46:00,480 Nos, csak használja ugyanazt a szintaxist. 1040 00:46:00,480 --> 00:46:02,110 A szó hallgató nyilvánvalóan új. 1041 00:46:02,110 --> 00:46:04,790 De diák, osztály, konzol diákok. 1042 00:46:04,790 --> 00:46:06,720 >> Így sajnos nagyon sok újrafelhasználás kifejezések itt. 1043 00:46:06,720 --> 00:46:07,660 Ez csak egy szám. 1044 00:46:07,660 --> 00:46:09,040 Tehát ez, mintha azt mondanánk három. 1045 00:46:09,040 --> 00:46:11,430 Class csak amit akarok hívni a változó. 1046 00:46:11,430 --> 00:46:12,840 Nevezhetném diákok. 1047 00:46:12,840 --> 00:46:15,880 De osztály, ez nem egy osztály egy objektum-orientált Java módján. 1048 00:46:15,880 --> 00:46:17,220 Ez csak egy osztály a diákok. 1049 00:46:17,220 --> 00:46:20,590 És az adatokat a fajta minden eleme abban a tömb diák. 1050 00:46:20,590 --> 00:46:23,040 Tehát ez egy kicsit más és mond valamit 1051 00:46:23,040 --> 00:46:25,250 mint ez, ez csak - 1052 00:46:25,250 --> 00:46:29,500 Azt mondom, hogy nekem három diák és hívja a tömbben osztályban. 1053 00:46:29,500 --> 00:46:29,800 >> Rendben van. 1054 00:46:29,800 --> 00:46:30,680 Most itt van a négy hurok. 1055 00:46:30,680 --> 00:46:33,480 Ez a fickó ismerős - hajtogat nullától akár három. 1056 00:46:33,480 --> 00:46:35,160 És itt van az új darab szintaxis. 1057 00:46:35,160 --> 00:46:37,710 A program fog megkérdezze, az ember, hogy ez a diák 1058 00:46:37,710 --> 00:46:39,200 Azonosító, amely int. 1059 00:46:39,200 --> 00:46:44,650 És itt van a szintaxis, amellyel tárolja valamit az ID mező 1060 00:46:44,650 --> 00:46:48,630 elhelyezkedés osztály konzol I. Tehát Ez a szintaxis nem új. 1061 00:46:48,630 --> 00:46:51,450 Ez csak azt jelenti, hogy nekem a nyolcadik tanuló az osztályban. 1062 00:46:51,450 --> 00:46:52,940 De ez a szimbólum az új. 1063 00:46:52,940 --> 00:46:56,320 Eddig, már nem használt pont, legalábbis kódot, mint ez. 1064 00:46:56,320 --> 00:47:01,490 Ez azt jelenti, megy a struct ismert egy diák és valami ott. 1065 00:47:01,490 --> 00:47:05,670 Hasonlóképpen, a következő sorban, 31, menj előre, és tedd, amit a felhasználó beír 1066 00:47:05,670 --> 00:47:10,530 a nevét itt, és mit csinálnak a ház, ugyanaz a dolog, megy előre, és 1067 00:47:10,530 --> 00:47:13,230 tegye. házban. 1068 00:47:13,230 --> 00:47:15,955 >> Mit is jelent ez a program végül csinálni? 1069 00:47:15,955 --> 00:47:17,220 Láthatjuk a kis teaser is. 1070 00:47:17,220 --> 00:47:24,780 Hadd menjek előre, és nem teszik struktúrákat 0 dot slash struct 0, hallgatói azonosító 1, 1071 00:47:24,780 --> 00:47:28,250 mondjuk David Mather, diákigazolvány 2.. 1072 00:47:28,250 --> 00:47:32,070 Rob Kirkland, diákigazolvány 3. 1073 00:47:32,070 --> 00:47:35,010 Lauren Leverit - 1074 00:47:35,010 --> 00:47:38,380 és az egyetlen dolog, amit ez a program nem, ami csak teljesen önkényes, a 1075 00:47:38,380 --> 00:47:40,980 Szerettem volna tenni valamit ezekkel az adatokkal, most, hogy megtanította nekünk, hogyan 1076 00:47:40,980 --> 00:47:43,450 használata struktúrákat, az csak volt az extra loop itt. 1077 00:47:43,450 --> 00:47:45,260 Én hatunk végig tömb diákok. 1078 00:47:45,260 --> 00:47:49,170 Régebben a, talán most már ismerős barát, karakterlánc összehasonlítani, stircomp a 1079 00:47:49,170 --> 00:47:53,780 ellenőrzés 8. diák háza egyenlő Mather? 1080 00:47:53,780 --> 00:47:56,760 És ha igen, csak nyomtatni valami önkényesen tetszik, igen, ez az. 1081 00:47:56,760 --> 00:47:59,430 De ismétlem, csak hogy nekem lehetőséget használni, és újra, és 1082 00:47:59,430 --> 00:48:02,270 újra az új pont jelölést. 1083 00:48:02,270 --> 00:48:03,250 >> Tehát kit érdekel, igaz? 1084 00:48:03,250 --> 00:48:06,270 Jön egy hallgató program kissé önkényes, de kiderült, 1085 00:48:06,270 --> 00:48:09,800 amit tehetünk hasznos dolgokat Ez például a következőképpen. 1086 00:48:09,800 --> 00:48:14,600 Ez egy sokkal bonyolultabb struktúra C-ben Van rajta egy tucat vagy több területen, 1087 00:48:14,600 --> 00:48:15,880 kissé rejtélyesen nevét. 1088 00:48:15,880 --> 00:48:20,110 De ha valaha is hallottam, hogy egy grafikus fájlformátumot úgynevezett bitmap, BMP, akkor 1089 00:48:20,110 --> 00:48:22,830 Kiderül, hogy a bitmap formátumban nagyjából így néz ki, hogy ez a. 1090 00:48:22,830 --> 00:48:24,200 Ez egy buta kis mosolygó arc. 1091 00:48:24,200 --> 00:48:27,840 Ez egy kis képet, hogy én már nagyított az elég nagy, hogy láttam minden 1092 00:48:27,840 --> 00:48:30,410 Az egyes pontok vagy pixel. 1093 00:48:30,410 --> 00:48:33,800 Most kiderül, mi is jelenthet fekete pont, mondjuk, a 0 szám. 1094 00:48:33,800 --> 00:48:35,520 És egy fehér pont az 1-es szám. 1095 00:48:35,520 --> 00:48:39,140 >> Más szóval, ha azt szeretnénk, hogy dolgozzon a Smiley és mentse a képet a 1096 00:48:39,140 --> 00:48:42,680 számítógép, elegendő tárolására nullák és is, hogy néz ki, hol, 1097 00:48:42,680 --> 00:48:45,250 Ismét, közül, fehér és nullák fekete. 1098 00:48:45,250 --> 00:48:48,290 És együtt, ha hatékonyan kell a övez egyesek és nullák, van egy 1099 00:48:48,290 --> 00:48:51,030 rács pixel, és ha laikus őket, van egy aranyos 1100 00:48:51,030 --> 00:48:52,560 kis smiley. 1101 00:48:52,560 --> 00:48:58,150 Most bitmap formátumban, BMP, a hatékonyan, hogy a motorháztető alatt, 1102 00:48:58,150 --> 00:49:00,970 de több pixel iszákos, hogy valóban képviseli színeket. 1103 00:49:00,970 --> 00:49:05,170 >> De ha van kifinomultabb formátumok, mint a BMP és a JPEG és GIF 1104 00:49:05,170 --> 00:49:09,360 amellyel lehet, hogy ismeri, azok fájlok a lemezen általában nem csak 1105 00:49:09,360 --> 00:49:13,760 van nullák a pixel, de van néhány metaadatokat is - 1106 00:49:13,760 --> 00:49:16,960 meta-ban az értelemben, hogy nem igazán adatokat, de nem árt, ha van. 1107 00:49:16,960 --> 00:49:21,370 Tehát ezek a mezők itt céloz, és majd meglátjuk ezt részletesebben P-set 1108 00:49:21,370 --> 00:49:25,810 5., hogy mielőtt a nullák és egyesek, hogy képviseli a képpontok, 1109 00:49:25,810 --> 00:49:29,110 van egy csomó, mint a metaadatok a méret a kép és a 1110 00:49:29,110 --> 00:49:30,250 a kép szélességét. 1111 00:49:30,250 --> 00:49:32,910 És észre én kopasztás ki néhány önkényes dolog van - 1112 00:49:32,910 --> 00:49:34,260 szélesség és magasság. 1113 00:49:34,260 --> 00:49:36,160 Bit-szám és néhány más dolog. 1114 00:49:36,160 --> 00:49:37,840 Szóval egy kis metaadatokat a fájlban. 1115 00:49:37,840 --> 00:49:41,470 >> De hogy miként fájlok cikkben ki ily módon, akkor valóban 1116 00:49:41,470 --> 00:49:45,890 akkor dolgozhatja fel a képeket, vissza képeket lemezről, a képek átméretezése. 1117 00:49:45,890 --> 00:49:47,560 De nem feltétlenül fokozza őket. 1118 00:49:47,560 --> 00:49:48,480 Szükségem volt egy fénykép. 1119 00:49:48,480 --> 00:49:52,840 Szóval visszamentem RJ itt, ki látta A képernyőn jó néhány évvel ezelőtt. 1120 00:49:52,840 --> 00:49:57,160 És ha én nyit Keynote itt, ez mi történik, ha megpróbálja a nagyításhoz és a 1121 00:49:57,160 --> 00:49:59,380 fokozza RJ. 1122 00:49:59,380 --> 00:50:01,480 Ő nem lesz jobb igazán. 1123 00:50:01,480 --> 00:50:06,240 Most Keynote egyfajta elmosódás, hogy egy kicsit, csak azért, hogy a elkendőz 1124 00:50:06,240 --> 00:50:11,040 tény, hogy a RJ nem lesz különösen jobb, ha nagyításhoz 1125 00:50:11,040 --> 00:50:13,310 És ha ezt így, lásd a négyzetek? 1126 00:50:13,310 --> 00:50:15,490 Ja, akkor feltétlenül látni A négyzetek egy projektor. 1127 00:50:15,490 --> 00:50:17,690 >> Ez az, amit kapunk, ha növeli. 1128 00:50:17,690 --> 00:50:22,570 De hogy miként az RJ vagy Smiley arc végre megengedi, hogy 1129 00:50:22,570 --> 00:50:24,950 valójában kódot írni, hogy manipulálja ezeket a dolgokat. 1130 00:50:24,950 --> 00:50:29,970 És azt gondoltam, hogy véget ér ez a megjegyzés, a 55 másodperc az fokozza, hogy ez, 1131 00:50:29,970 --> 00:50:31,230 Merem, mondjuk inkább félrevezető. 1132 00:50:31,230 --> 00:50:32,990 >> [VIDEÓ LEJÁTSZÁS] 1133 00:50:32,990 --> 00:50:34,790 >> -Hazudik. 1134 00:50:34,790 --> 00:50:38,310 Arról, hogy mi, azt nem tudom. 1135 00:50:38,310 --> 00:50:41,200 >> -Szóval, mit tudunk? 1136 00:50:41,200 --> 00:50:45,280 >> -Az at 09:15 Ray Santoya volt az ATM. 1137 00:50:45,280 --> 00:50:47,830 >> -Tehát a kérdés az, hogy mi csinált a 09:16? 1138 00:50:47,830 --> 00:50:50,750 >> -A kilenc milliméteres Fényképezés valamit. 1139 00:50:50,750 --> 00:50:52,615 Lehet, hogy látta a mesterlövész. 1140 00:50:52,615 --> 00:50:54,760 >> -Vagy dolgozott vele. 1141 00:50:54,760 --> 00:50:56,120 >> -Várjon. 1142 00:50:56,120 --> 00:50:57,450 Menj vissza egy. 1143 00:50:57,450 --> 00:50:58,700 >> -Mit látsz? 1144 00:50:58,700 --> 00:51:05,530 1145 00:51:05,530 --> 00:51:09,490 >> -Hozd az arcát, teljes képernyőn. 1146 00:51:09,490 --> 00:51:09,790 >> -A szemüvegét. 1147 00:51:09,790 --> 00:51:11,040 >> -Van egy reflexió. 1148 00:51:11,040 --> 00:51:21,790 1149 00:51:21,790 --> 00:51:23,520 >> -Ez az Neuvitas baseball csapat. 1150 00:51:23,520 --> 00:51:24,530 Ez a logó. 1151 00:51:24,530 --> 00:51:27,040 >> És ő beszél bárki is rajta, hogy kabát. 1152 00:51:27,040 --> 00:51:27,530 >> [END VIDEÓ LEJÁTSZÁS] 1153 00:51:27,530 --> 00:51:29,180 >> DAVID J. MALAN: ez Probléma lehet Set 5. 1154 00:51:29,180 --> 00:51:30,720 Látni fogjuk, hogy a jövő héten. 1155 00:51:30,720 --> 00:51:32,330 >> FÉRFI SPEAKER: A következő CS50. 1156 00:51:32,330 --> 00:51:39,240 >> [Tücskök csiripelnek] 1157 00:51:39,240 --> 00:51:41,270 >> [MUSIC PLAYING]