1 00:00:00,000 --> 00:00:10,970 >> [MUZIKO ludi] 2 00:00:10,970 --> 00:00:12,536 >> DAVID J. Malan: Bone. 3 00:00:12,536 --> 00:00:13,392 >> [Ridado] 4 00:00:13,392 --> 00:00:14,240 >> Bonvenon dorso. 5 00:00:14,240 --> 00:00:14,990 Ĉi tiu estas CS50. 6 00:00:14,990 --> 00:00:16,890 Kaj jen la fino de semajno kvin. 7 00:00:16,890 --> 00:00:20,020 Kaj ĝis nun, ni sufiĉe multe estis prenante por koncedis ke ekzistas 8 00:00:20,020 --> 00:00:23,480 Ekzistas tiu tradukilo, Clang, ke vi havas estis alpreĝi pere de ĉi tiu 9 00:00:23,480 --> 00:00:27,100 alia ilo nomita Faru ke iel magie konvertas via fontkodo 10 00:00:27,100 --> 00:00:31,350 en celkodo, la nuloj kaj ke via komputiloj CPU, centra 11 00:00:31,350 --> 00:00:33,410 prilaborado unueco, vere komprenas. 12 00:00:33,410 --> 00:00:36,770 Sed rezultu ke estas nombro kiu estas okazas sub la kapuĉo en 13 00:00:36,770 --> 00:00:38,690 inter enigo kaj eligo. 14 00:00:38,690 --> 00:00:41,800 >> Kaj mi ŝatus proponi ke ni viandon ke el en iom pli detale en 15 00:00:41,800 --> 00:00:45,130 ĉi tiuj kvar paŝoj, ili havas ion nomatan antaŭ-prilaborado, iu 16 00:00:45,130 --> 00:00:48,300 vokis kompili, kion ni vidis, iu nomita kunmetado, kaj 17 00:00:48,300 --> 00:00:49,420 iu nomita kunligi. 18 00:00:49,420 --> 00:00:53,270 Do ĝis nun, en kelkaj el niaj programoj, ni havis akran inkludas. 19 00:00:53,270 --> 00:00:56,650 Pli lastatempe ni spertis akran difinas por konstantoj. 20 00:00:56,650 --> 00:01:00,660 Do rezultas ke tiuj aĵoj kiujn estas prefiksita per la hash simbolo aŭ 21 00:01:00,660 --> 00:01:04,150 la funto simbolo estas antaŭ-procesoro direktivojn. 22 00:01:04,150 --> 00:01:07,960 Tio estas nur imago maniero diri ĝin estas linio de kodo kiu estas vere 23 00:01:07,960 --> 00:01:12,280 konvertita en ion alian antaŭ la komputilo eĉ provi konverti vian 24 00:01:12,280 --> 00:01:13,800 programo en nuloj kaj. 25 00:01:13,800 --> 00:01:19,000 >> Ekzemple, akrajn inkludas normon I / O. H, preskaux nur signifas iri 26 00:01:19,000 --> 00:01:24,010 antaŭe, havigu la enhavo de la dosieroj stdio.h kaj gluu ilin ĝuste tie. 27 00:01:24,010 --> 00:01:25,880 Do ne nuloj kaj aĵoj en tiu punkto ankoraŭ. 28 00:01:25,880 --> 00:01:27,470 Estas vere nur anstataŭo. 29 00:01:27,470 --> 00:01:30,790 Kaj tio estas farita dum la tn antaŭ-prilaborado etapo, kiam vi 30 00:01:30,790 --> 00:01:34,230 fakte kuri Clang aŭ specife Faru en plej kazoj. 31 00:01:34,230 --> 00:01:36,950 Do ĉio tio estis okazante unua aŭtomate tiom. 32 00:01:36,950 --> 00:01:38,800 >> Tiam venas la kompilaĵon paŝo. 33 00:01:38,800 --> 00:01:40,920 Sed ni estis trosimpligita kompilaĵo. 34 00:01:40,920 --> 00:01:45,060 Kompilado de programo vere signifas prenu ĝin de iu kiel C, la 35 00:01:45,060 --> 00:01:48,430 fontkodon ni estis skribante, sube al iu nomita asembleo. 36 00:01:48,430 --> 00:01:52,900 Asembleo lingvo estas pli malalta nivelo lingvo kiu, feliĉe, ni ne volas 37 00:01:52,900 --> 00:01:55,480 esti multe okazon por skribi ĉi semestro. 38 00:01:55,480 --> 00:01:59,100 Sed ĝi estas en la plej malalta nivelo en la senco ke vi laŭvorte komenci skribi 39 00:01:59,100 --> 00:02:04,270 adicii kaj subtrahi kaj multigxu, kaj montru el memoro kaj savi al memoro, la 40 00:02:04,270 --> 00:02:08,259 tre bazaj instrukcioj ke komputilo, sub la kapuĉo, 41 00:02:08,259 --> 00:02:09,639 vere komprenas. 42 00:02:09,639 --> 00:02:14,930 >> Laste, ariganta prenas tiun lingvon al la nuloj kaj ke ni estis 43 00:02:14,930 --> 00:02:16,190 priskribante tiom. 44 00:02:16,190 --> 00:02:19,270 Kaj vere laste, ne estas la tn kunligi fazo, kiun ni instruos vin 45 00:02:19,270 --> 00:02:22,360 vidi en nur momenta, kiu kombinas via nuloj kaj kun nuloj kaj 46 00:02:22,360 --> 00:02:24,870 karaj aliaj personoj antaŭ ol vi kreis. 47 00:02:24,870 --> 00:02:26,660 >> Do konsideru ĉi tiu super simpla programo. 48 00:02:26,660 --> 00:02:27,560 Ĝi estis de Semajno 1. 49 00:02:27,560 --> 00:02:29,610 Ĝi nur diris, Saluton Mondo, en la ekrano. 50 00:02:29,610 --> 00:02:30,920 Ni kuris tiu tra Clang. 51 00:02:30,920 --> 00:02:33,200 Aŭ ni kuris tra Make kiu kuris Clang. 52 00:02:33,200 --> 00:02:36,170 Kaj outputted tiutempe kie iuj nuloj kaj. 53 00:02:36,170 --> 00:02:38,100 Sed rezultu ekzistas intera paŝo. 54 00:02:38,100 --> 00:02:40,460 Se mi transiru tie - ups, ne volas vidi lin ankoraŭ. 55 00:02:40,460 --> 00:02:44,800 Se mi iras tien al mia aparato kaj mi malfermas hello.c, jen 56 00:02:44,800 --> 00:02:46,160 estas tiu sama programo. 57 00:02:46,160 --> 00:02:48,600 Kaj kion mi tuj faros en mia fina stacio fenestro tie Mi tuj 58 00:02:48,600 --> 00:02:51,430 kuri Clang anstataŭ Faru, kion aŭtomatigas la kvar 59 00:02:51,430 --> 00:02:52,870 tiujn paŝojn por ni. 60 00:02:52,870 --> 00:02:58,620 Kaj mi faros clang-S kaj tiam hello.c kaj poste eniri. 61 00:02:58,620 --> 00:03:00,590 >> Mi ricevas palpebrumante prompto denove, kio estas bona. 62 00:03:00,590 --> 00:03:05,280 Kaj nun en iomete pli granda fenestro, Mi tuj malfermi gedit en ĉi tie. 63 00:03:05,280 --> 00:03:09,610 Kaj mi tuj malfermi dosieron kiu, Rezultas, nomiĝas hello.s ĉi 64 00:03:09,610 --> 00:03:11,870 enhavas tiu asembleo lingvo Mi raportis al pli frua. 65 00:03:11,870 --> 00:03:15,060 Kaj jen estas, kion oni nomas asembleo lingvo, sufiĉe malalta nivelo 66 00:03:15,060 --> 00:03:18,470 instrukcioj ke via Intel CPU aŭ kion estas kiu estas interne de 67 00:03:18,470 --> 00:03:19,350 komprenas. 68 00:03:19,350 --> 00:03:24,480 Kaj mov estas por movado. alvoko estas por nomante, tre malalta nivelo funkcio. 69 00:03:24,480 --> 00:03:26,380 sub estas por subtrahi. 70 00:03:26,380 --> 00:03:30,370 >> Do kiam vi havas apartan CPU ene de via komputilo, kio faras ĝin 71 00:03:30,370 --> 00:03:34,300 distinga, kontre aliaj CPU en la merkato, estas kion instrukcioj 72 00:03:34,300 --> 00:03:39,460 komprenas kaj ofte kiel efika ĝi estas, kiom rapide gi estas je ekzekuti iuj 73 00:03:39,460 --> 00:03:40,380 de tiuj instrukcioj. 74 00:03:40,380 --> 00:03:45,150 Nun por pli sur ĉi, vi povas preni sekva Aŭtuno CS61 ĉe la kolegio. 75 00:03:45,150 --> 00:03:48,170 Sed ĉi tie ni havas, ekzemple, malmultaj ensalutiloj kiuj povus rigardi familiara. 76 00:03:48,170 --> 00:03:50,150 hello.c estas la nomo de la programo. 77 00:03:50,150 --> 00:03:51,070 >> . Teksto - 78 00:03:51,070 --> 00:03:54,190 tie ne estas multe de intereso tie gxuste nun, memoru ke la teksto 79 00:03:54,190 --> 00:03:59,190 segmento, ekde lundo, estas kie en memoro via programo fakte finas. 80 00:03:59,190 --> 00:04:01,330 Do jen almenaŭ pigre familiara tie. 81 00:04:01,330 --> 00:04:03,730 Ĉi tie, kompreneble, estas mencio de nia ĉefa funkcio. 82 00:04:03,730 --> 00:04:07,220 Movo malsupren, tiuj referi al aĵoj nomita registroj, tre malgrandajn pecojn de 83 00:04:07,220 --> 00:04:09,190 memoro ene de via reala CPU. 84 00:04:09,190 --> 00:04:12,930 Kaj se mi rulu suben ĝis plu, mi vidas ian 85 00:04:12,930 --> 00:04:14,240 nerekta mencio de ASCII. 86 00:04:14,240 --> 00:04:17,120 Kaj tie, ja, estas ke kordoj, saluton, komo, mondo. 87 00:04:17,120 --> 00:04:20,079 >> Do longan rakonton, ĉi tio estis okazas al vi, aŭtomate, 88 00:04:20,079 --> 00:04:22,140 sub la kapuĉo ĉio ĉi tempo. 89 00:04:22,140 --> 00:04:26,450 Kaj kio estis okazante vere estas unufoje vi kuros Clang, aŭ pere de 90 00:04:26,450 --> 00:04:29,150 Faru, vi fariĝas unua, el la fonta kodo, la 91 00:04:29,150 --> 00:04:30,700 tn asembla lingvo. 92 00:04:30,700 --> 00:04:35,210 Tiam Clang estas konvertanta ĉi asembleo lingvo malsupren al nuloj kaj. 93 00:04:35,210 --> 00:04:38,340 Kaj jen estas la glito, ke ni komencis nian diskuton en Semajno 0 sur - 94 00:04:38,340 --> 00:04:39,840 kaj tiam Semajno 1 sur. 95 00:04:39,840 --> 00:04:44,030 Kaj poste fine, tiuj nuloj kaj estas kombinitaj kun la nuloj kaj 96 00:04:44,030 --> 00:04:47,190 de tiuj bibliotekoj ni iris prenante por donita kiel Standard I / O aŭ la 97 00:04:47,190 --> 00:04:50,010 String Biblioteko aŭ eĉ la CS50 biblioteko. 98 00:04:50,010 --> 00:04:54,200 >> Do por pentri tiun bildon pli vide, ni havas hello.c. 99 00:04:54,200 --> 00:04:57,220 Kaj, kompreneble, ĝi uzas la printf funkcii diri, saluton mondo. 100 00:04:57,220 --> 00:05:01,810 La kompilaĵo paŝo prenas sin al tiu dosiero ni vidis hello.s, eĉ 101 00:05:01,810 --> 00:05:04,290 kvankam tio estas tipe forigita aŭtomate por vi. 102 00:05:04,290 --> 00:05:06,050 Sed tio estas la asembleo kodo en la mezo paŝo. 103 00:05:06,050 --> 00:05:09,750 Kaj poste kiam ni kunvenigi la komunumon lingvo, por tiel diri, tio estas, kiam vi 104 00:05:09,750 --> 00:05:10,830 akiri tiujn nuloj kaj. 105 00:05:10,830 --> 00:05:13,920 Do ni zomita en efike hodiaŭ sur kion ni estis prenante por fakto, 106 00:05:13,920 --> 00:05:16,430 signifas iri fontkodo por kontesti kodo. 107 00:05:16,430 --> 00:05:18,850 >> Sed laste, nun tiu sama bildo - ni baton ĝin al 108 00:05:18,850 --> 00:05:20,020 la maldekstra flanko. 109 00:05:20,020 --> 00:05:22,880 Kaj rimarku, ke en la pinto Mi menciis stdio.h. 110 00:05:22,880 --> 00:05:25,030 Tio estas arkivo kiu ni inkludis en preskaŭ ĉiuj 111 00:05:25,030 --> 00:05:26,250 programoj ni skribis. 112 00:05:26,250 --> 00:05:28,830 Kaj tio estas la dosiero kies enhavon get kopio batitaj, 113 00:05:28,830 --> 00:05:30,350 efektive sur la pinto de via kodo. 114 00:05:30,350 --> 00:05:34,170 Sed rezultu ke, en komputilo Sistemo ie, tie estas supozeble 115 00:05:34,170 --> 00:05:39,150 stdio.c dosiero kiun iu skribis jaroj antaŭe ke implementa ĉiuj 116 00:05:39,150 --> 00:05:41,870 funkcioj, kiujn oni sciigis en stdio.h. 117 00:05:41,870 --> 00:05:45,465 >> Nun fakte estas probable ne sur Mac aŭ vian PC aŭ eĉ en la 118 00:05:45,465 --> 00:05:47,660 CS50 aparato estas kruda C kodo. 119 00:05:47,660 --> 00:05:52,710 Iu jam kompilita kaj inkludis . O dosiero por celkodo aŭ. A 120 00:05:52,710 --> 00:05:56,020 dosiero, kiu referencas al bindebla biblioteko ke tio estis antaŭ-instalita kaj 121 00:05:56,020 --> 00:05:57,240 antaŭ-kompilis por vi. 122 00:05:57,240 --> 00:06:01,950 Sed supozu ke ja ekzistas sur nia komputilo stdio.c en paralela 123 00:06:01,950 --> 00:06:02,650 kun Clang. 124 00:06:02,650 --> 00:06:04,960 Via kodo estas esti kompilita kaj kunvenis. 125 00:06:04,960 --> 00:06:09,200 stdio.c-ejon kodo estas kompilita kaj kunvenis, tiel ke tiu ĉi lasta 126 00:06:09,200 --> 00:06:13,730 treti, cxi tie, ni devas iel ligilo, por tiel diri, via nuloj kaj 127 00:06:13,730 --> 00:06:18,430 kun lia aŭ ŝia nuloj kaj en unu simpla programo kiu finfine estas 128 00:06:18,430 --> 00:06:20,540 nomata simple Saluton. 129 00:06:20,540 --> 00:06:23,340 >> Do jen ĉio de la magion kiu estas estis okazas tiom. 130 00:06:23,340 --> 00:06:26,430 Kaj daŭre prenos tiujn procezoj por koncedis, sed realigi 131 00:06:26,430 --> 00:06:28,750 ekzistas multajn sukajn detalojn okazas sube. 132 00:06:28,750 --> 00:06:31,920 Kaj ĉi tiu estas kion faras via komputilo kun Intel ene 133 00:06:31,920 --> 00:06:33,940 aparte klara. 134 00:06:33,940 --> 00:06:37,020 >> Do en tiu noto, se vi volas kuniĝi kun ni por tagmanĝi tiun vendredon, do iru 135 00:06:37,020 --> 00:06:41,570 al la kutima loko cs50.net/rsvp, 1:15 am ĉi vendredo. 136 00:06:41,570 --> 00:06:43,400 Kaj nun kelkaj anoncoj. 137 00:06:43,400 --> 00:06:44,670 Do ni havas kelkajn bonajn novaĵojn. 138 00:06:44,670 --> 00:06:45,970 Kaj ni havas iujn malbonajn novaĵojn. 139 00:06:45,970 --> 00:06:47,260 Komencu kun iu bona novaĵo ĉi tie. 140 00:06:47,260 --> 00:06:52,038 141 00:06:52,038 --> 00:06:54,510 >> [Gxemadon] 142 00:06:54,510 --> 00:06:54,710 >> Ĉio bone. 143 00:06:54,710 --> 00:06:56,670 Nu, estas teknike ferio, do ĝi ne estas tiel donaco de ni. 144 00:06:56,670 --> 00:06:58,030 Sed tiam la malbonaj novaĵoj kompreneble. 145 00:06:58,030 --> 00:07:00,550 146 00:07:00,550 --> 00:07:01,880 >> [Gxemadon] 147 00:07:01,880 --> 00:07:03,530 >> Mi pasigis multan tempon sur ĉi tiuj kuraĝigoj. 148 00:07:03,530 --> 00:07:04,690 >> [Ridado] 149 00:07:04,690 --> 00:07:07,000 >> Estos recenzo kunsido ĉi tiu venonta lundo. 150 00:07:07,000 --> 00:07:08,340 Ĝi tuj estos je 5:30 ptm. 151 00:07:08,340 --> 00:07:11,210 Ni memorigas vin pri cxiuj cxi tiuj detaloj per retpoŝto en la kurso de 152 00:07:11,210 --> 00:07:13,470 retejo en nur kelkaj tagoj tempo. 153 00:07:13,470 --> 00:07:16,610 Ĝi estos filmado kaj disponigitaj nelonge post tio. 154 00:07:16,610 --> 00:07:19,200 Do se vi ne povas fari tiun lundo nokto fendo, ne maltrankviliĝu. 155 00:07:19,200 --> 00:07:22,270 Sekcioj tiu venonta semajno vin ankaŭ enfokusigi recenzo por la kvizo. 156 00:07:22,270 --> 00:07:25,670 Se via alineo estas lunde, kiu estas ja universitato ferioj, ni faros 157 00:07:25,670 --> 00:07:26,920 ankoraŭ kunvenas en sekcio. 158 00:07:26,920 --> 00:07:28,890 Se vi simple ne povas fari tiun sekcio ĉar vi tuj 159 00:07:28,890 --> 00:07:29,860 for, tio estas bone. 160 00:07:29,860 --> 00:07:33,710 Ĉeesti dimanĉo aŭ mardo sekcio aŭ melodio-en al Jason la sekcio, kio estas 161 00:07:33,710 --> 00:07:35,110 disponebla rete. 162 00:07:35,110 --> 00:07:37,490 >> Do, pli malbonaj novaĵoj. 163 00:07:37,490 --> 00:07:41,960 Do laŭ la Syllabus, ni havas prelego venontan vendredon. 164 00:07:41,960 --> 00:07:43,690 Sed la bona novaĵo - 165 00:07:43,690 --> 00:07:44,860 klare, mi pasis tro da tempo en ĉi tio. 166 00:07:44,860 --> 00:07:45,280 >> [Ridado] 167 00:07:45,280 --> 00:07:47,140 >> Ni nuligi sekva vendreda prelegoj. 168 00:07:47,140 --> 00:07:50,590 Por ke estos donaco por ni, por vi povas vere havas belan faciligxo en 169 00:07:50,590 --> 00:07:52,990 inter ĉi tiu semajno kaj du semajnojn ĉi tie. 170 00:07:52,990 --> 00:07:57,460 Do ne prelegoj proksima semajno, nur eta iom kvizo, por kiu vi devas esti 171 00:07:57,460 --> 00:07:59,030 ekuzi pli ekscitita. 172 00:07:59,030 --> 00:08:03,870 >> Do ni nun turnu nian atenton al iu kiu ja estas pli vida 173 00:08:03,870 --> 00:08:06,990 kaj pli ekscita kaj starigi la scenejo por kio okazas al esti sur la horizonto 174 00:08:06,990 --> 00:08:08,420 en nur kelkaj semajnoj tempo. 175 00:08:08,420 --> 00:08:12,160 Post la unua kvizo, ni turnas la enfokusigi de nia problemo aroj al alia 176 00:08:12,160 --> 00:08:16,710 domajno specifa problemo, tiu de forensics aŭ sekureco pli ĝenerale. 177 00:08:16,710 --> 00:08:19,550 >> Fakte, la tradicio kun tiu problemo aro estas por mi unu el la 178 00:08:19,550 --> 00:08:24,850 instruante ulo aŭ CAS marŝi trans kampuso prenante iujn fotojn de 179 00:08:24,850 --> 00:08:29,450 identigebla sed ne evidenta popolo, lokoj, aux tion, tiam ĉiu jaro mi 180 00:08:29,450 --> 00:08:34,520 iel sukcesas hazarde forviŝi aŭ korupti la diĝita amaskomunikiloj karto 181 00:08:34,520 --> 00:08:35,720 kiu estas interne de nia ĉambro. 182 00:08:35,720 --> 00:08:36,860 Sed ne estas granda interkonsento. 183 00:08:36,860 --> 00:08:39,200 Mi povas antaŭeniri kaj ŝtopi ke en mia komputilo. 184 00:08:39,200 --> 00:08:43,010 Mi povas fari jura bildon de ĝi, do paroli, kopiante la nuloj kaj 185 00:08:43,010 --> 00:08:46,830 ones for de tiu memoro karto, ĉu lia SD karto aŭ kompakta flash karto aŭ 186 00:08:46,830 --> 00:08:48,100 kion ajn vi konas. 187 00:08:48,100 --> 00:08:49,300 Kaj tiam ni povas transdoni ke eksteren. 188 00:08:49,300 --> 00:08:53,190 >> Kaj tial la defio antaŭen, inter aliaj tion por vi, estos al skribi 189 00:08:53,190 --> 00:08:58,630 C-kodo kiu rekuperas tutan faskon da JPEG-oj por mi kaj malkaŝis estos 190 00:08:58,630 --> 00:09:00,190 tiuj homoj, lokoj, aŭ aĵoj. 191 00:09:00,190 --> 00:09:03,340 Kaj ni ankaŭ parolas, en ĉi tiu problemo aro kaj en la tempo estonta, pri 192 00:09:03,340 --> 00:09:04,440 grafiko pli ĝenerale. 193 00:09:04,440 --> 00:09:06,140 Ni uzas ilin, kurso, por rompi. 194 00:09:06,140 --> 00:09:09,080 Sed vi jam ia memkompreneble tie ekzistas tiuj alta nivelo nocioj 195 00:09:09,080 --> 00:09:10,680 de rektanguloj kaj ovaloj. 196 00:09:10,680 --> 00:09:12,450 Sed sub la kapuĉo estas rastrumeroj. 197 00:09:12,450 --> 00:09:14,370 Kaj vi devis komenci pensante pri tiuj. 198 00:09:14,370 --> 00:09:18,800 Aŭ vi donos por p-aro 4 devos pensi pri la diferenco inter via brikoj, kiel 199 00:09:18,800 --> 00:09:21,990 rapide vi pilko estas movanta tra la ekrano por rompi. 200 00:09:21,990 --> 00:09:24,830 Do ekzistas ĉi tiu nocio de la dots sur via ekrano kiu estas 201 00:09:24,830 --> 00:09:26,290 veni en ludo jam. 202 00:09:26,290 --> 00:09:29,430 >> Nun kion vi vidas, tamen, estas kion vi ricevas sur ekrano de komputilo. 203 00:09:29,430 --> 00:09:33,680 Se vi iam spektis kelkajn bonajn aŭ malbona TV, prognozoj estas ili sufiĉe multe 204 00:09:33,680 --> 00:09:36,280 trakti la publikon kiel technophobes kiuj ne vere 205 00:09:36,280 --> 00:09:37,630 scias multe pri komputado. 206 00:09:37,630 --> 00:09:40,840 Kaj tial ĝi estas tre facila por la policano detektivo diri, ĉu vi 207 00:09:40,840 --> 00:09:41,710 purigi ke por mi? 208 00:09:41,710 --> 00:09:42,710 Aŭ plibonigi, ĉu ne? 209 00:09:42,710 --> 00:09:45,550 Enhance estas kiel la zumado vorto en plej ajna krimo rilatajn spektaklo. 210 00:09:45,550 --> 00:09:49,240 Kaj la realaĵo estas, se vi prenos tre neklara bildo de suspekta fari 211 00:09:49,240 --> 00:09:51,620 io malbona, vi ne povas nur plibonigi ĝin. 212 00:09:51,620 --> 00:09:53,080 Vi ne povas zomi senfine. 213 00:09:53,080 --> 00:09:56,350 Vi ne povas vidi en la ekbrilon de ies okulo, kiu faris tiun 214 00:09:56,350 --> 00:09:59,860 aparta krimo, malgraŭ la superado de tiu en televido. 215 00:09:59,860 --> 00:10:04,110 >> Kaj tial kun tiu ni motivi ke venonta problemo starigis kun ekrigardo al 216 00:10:04,110 --> 00:10:05,765 iuj shows kun kiu vi eble familiara. 217 00:10:05,765 --> 00:10:06,500 >> [VIDEO reprodukto] 218 00:10:06,500 --> 00:10:07,835 >> -Akcepti. 219 00:10:07,835 --> 00:10:09,956 Nun, ni akiras bonan rigardon al vi. 220 00:10:09,956 --> 00:10:17,060 221 00:10:17,060 --> 00:10:17,766 >> -Tenu ĝin. 222 00:10:17,766 --> 00:10:18,658 Kuru ke dorso. 223 00:10:18,658 --> 00:10:19,550 >> -Atendu minuton. 224 00:10:19,550 --> 00:10:21,580 Iru dekstren. 225 00:10:21,580 --> 00:10:21,800 >> -Tie. 226 00:10:21,800 --> 00:10:22,690 Frostigi tio. 227 00:10:22,690 --> 00:10:23,692 >> -Plena ekrano. 228 00:10:23,692 --> 00:10:23,846 >> -Akcepti. 229 00:10:23,846 --> 00:10:24,154 Frostigi tio. 230 00:10:24,154 --> 00:10:25,140 >> -Tighten supren sur tiu, estos ya? 231 00:10:25,140 --> 00:10:27,090 >> -Vektoraj en sur tiu ulo per la dorso rado. 232 00:10:27,090 --> 00:10:29,730 >> -Zoom en ĝuste ĉi tie sur ĉi tiu loko. 233 00:10:29,730 --> 00:10:33,700 >> -Kun la dekstra teamo, la fotita povas esti plivastigita kaj akraj. 234 00:10:33,700 --> 00:10:34,490 >> -Kio estas tio? 235 00:10:34,490 --> 00:10:35,870 >> -Ĝi estas plibonigo programo. 236 00:10:35,870 --> 00:10:36,793 >> -Ĉu vi povas purigi ke ĝis neniu? 237 00:10:36,793 --> 00:10:38,560 >> -Mi ne scias. 238 00:10:38,560 --> 00:10:39,090 Ni plibonigi ĝin. 239 00:10:39,090 --> 00:10:41,690 >> -Enhance sekcio A-6. 240 00:10:41,690 --> 00:10:43,510 >> -Mi plibonigis la detalo kaj - 241 00:10:43,510 --> 00:10:44,456 >> -Mi kredas, ke estas sufiĉa por plibonigi. 242 00:10:44,456 --> 00:10:45,402 Liberigas ĝin al mia ekrano. 243 00:10:45,402 --> 00:10:47,300 >> -Enhance la reflekto en sia okulo. 244 00:10:47,300 --> 00:10:49,330 >> -Ni kuru ĉi tra video plibonigo. 245 00:10:49,330 --> 00:10:50,340 >> -Edgar, vi povas plibonigi tion? 246 00:10:50,340 --> 00:10:52,320 >> -Atendu. 247 00:10:52,320 --> 00:10:54,290 >> -Mi estis laborante en ĉi reflekto. 248 00:10:54,290 --> 00:10:55,560 >> -Iu rebrilon. 249 00:10:55,560 --> 00:10:56,440 >> -Pripensoj. 250 00:10:56,440 --> 00:10:57,940 >> -Estas reflekto de la homa vizaĝo. 251 00:10:57,940 --> 00:10:58,860 >> -La interkonsiliĝo. 252 00:10:58,860 --> 00:10:59,710 >> -Tie estas reflekto. 253 00:10:59,710 --> 00:11:00,900 >> -Zomi en la spegulo. 254 00:11:00,900 --> 00:11:03,500 >> -Vi povas vidi reflekto. 255 00:11:03,500 --> 00:11:04,700 >> -Ĉu vi povas plibonigi la bildon de ĉi tie? 256 00:11:04,700 --> 00:11:05,700 >> -Ĉu vi povas plibonigi li ĝuste ĉi tie? 257 00:11:05,700 --> 00:11:06,500 >> -Ĉu vi povas plibonigi ĝin? 258 00:11:06,500 --> 00:11:07,380 >> -Ĉu vi povas plibonigi ĝin? 259 00:11:07,380 --> 00:11:08,190 >> -Ĉu ni povas plibonigi tion? 260 00:11:08,190 --> 00:11:08,940 >> -Ĉu vi povas plibonigi ĝin? 261 00:11:08,940 --> 00:11:10,280 >> -Atendu duan, mi plibonigas. 262 00:11:10,280 --> 00:11:11,570 >> -Zomi al la pordo. 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 >> [Ridado] 266 00:11:13,197 --> 00:11:14,360 >> -Movu in 267 00:11:14,360 --> 00:11:15,100 >> -Atendu, halti. 268 00:11:15,100 --> 00:11:15,740 >> -Haltu. 269 00:11:15,740 --> 00:11:16,290 >> -Paŭzo ĝi. 270 00:11:16,290 --> 00:11:19,390 >> -Ĉu turni ĉirkaŭ 75 gradoj ĉirkaŭ la vertikala bv. 271 00:11:19,390 --> 00:11:19,886 >> [Ridado] 272 00:11:19,886 --> 00:11:24,350 >> -Haltu, kaj reen al la parto pri la pordon denove. 273 00:11:24,350 --> 00:11:26,330 >> -Got bildo mejorador kiu povas bitmap? 274 00:11:26,330 --> 00:11:28,990 >> -Eble ni povas uzi la Pradeep Sen metodo por vidi en la fenestroj. 275 00:11:28,990 --> 00:11:30,680 >> -Ĉi tiu programaro estas stato de la arto. 276 00:11:30,680 --> 00:11:31,676 >> -La ikono valoro estas malŝaltita. 277 00:11:31,676 --> 00:11:34,166 >> -Kun la ĝustan kombinon de algoritmoj. 278 00:11:34,166 --> 00:11:38,399 >> -Li estas prenita lumigado algoritmoj por la sekva nivelo kaj mi povas uzi ilin por 279 00:11:38,399 --> 00:11:38,648 plibonigi ĉi tiun foton. 280 00:11:38,648 --> 00:11:42,050 >> -Ŝlosu en kaj grandigas la z-akso. 281 00:11:42,050 --> 00:11:42,760 >> -Enhance. 282 00:11:42,760 --> 00:11:43,060 >> -Enhance. 283 00:11:43,060 --> 00:11:43,760 >> -Enhance. 284 00:11:43,760 --> 00:11:45,010 >> -Freeze kaj plibonigi. 285 00:11:45,010 --> 00:11:47,470 286 00:11:47,470 --> 00:11:47,910 >> [FINO reprodukto de vídeo] 287 00:11:47,910 --> 00:11:51,470 >> DAVID J. Malan: Do Problemo Ara 5 estas kio kuŝas antaŭen tie. 288 00:11:51,470 --> 00:11:55,260 Do ni baldaŭ akiri pli bonan komprenon de kiam kaj kial vi povas 289 00:11:55,260 --> 00:11:57,300 kaj nia ne povas plibonigi en tiu vojo. 290 00:11:57,300 --> 00:12:00,090 Sed unue, ni revenos nian atenton al kelkaj el la blokoj ni instruos vin 291 00:12:00,090 --> 00:12:02,250 bezonas por povi diri ke rakonton. 292 00:12:02,250 --> 00:12:05,580 >> Do memoru, ke ni tiris tiu bildo en Lundo kaj iom pasinta semajno. 293 00:12:05,580 --> 00:12:09,970 Kaj tion priskribas la aranĝo de la aferoj en via komputilo memoro kiam 294 00:12:09,970 --> 00:12:11,000 kurante iu programo. 295 00:12:11,000 --> 00:12:14,310 La teknologio segmento ĝis supro, revokon, referas al la reala nuloj kaj 296 00:12:14,310 --> 00:12:16,000 kiuj formas via programo. 297 00:12:16,000 --> 00:12:19,340 Jen, sube, ke iuj inicializado aŭ uninitialized datumoj, kiuj tipe 298 00:12:19,340 --> 00:12:22,910 referencas al aĵoj kiel konstantaj aŭ kordoj aŭ mallokajn variablojn, kiuj havas 299 00:12:22,910 --> 00:12:24,200 estis deklarita anticipe. 300 00:12:24,200 --> 00:12:26,500 Estas la havaĵon, sed ni venos reen al kiu en iom. 301 00:12:26,500 --> 00:12:27,410 >> Kaj tiam tie estas la pilo. 302 00:12:27,410 --> 00:12:30,660 Multe kiel stako de pletoj en la kafejo, tio estas kie memoro gets 303 00:12:30,660 --> 00:12:33,610 manteloj kaj manteloj kiam ajn vi faras kion en programo? 304 00:12:33,610 --> 00:12:36,380 305 00:12:36,380 --> 00:12:37,730 Kio estas la pilo uzo por? 306 00:12:37,730 --> 00:12:39,320 >> Jes? 307 00:12:39,320 --> 00:12:40,000 >> Voku de funkcio. 308 00:12:40,000 --> 00:12:42,890 Ajn vi nomas funkcio, ĝi estas donita al strio de memoro por lia 309 00:12:42,890 --> 00:12:45,020 lokaj variabloj aŭ ties parametroj. 310 00:12:45,020 --> 00:12:48,810 Kaj pictóricamente, ni vidas ke kun ĉiu pluaj funkcio vokita, kiam A 311 00:12:48,810 --> 00:12:52,520 alvokoj B alvokoj C alvokoj D, ili get manteloj sur la stako. 312 00:12:52,520 --> 00:12:55,630 Kaj ene de ĉiu el tiuj tranĉaĵoj de memoro estas esence unika atingo 313 00:12:55,630 --> 00:12:58,590 por tiu funkcio, kiu, kompreneble, estas problema se oni volas transdoni 314 00:12:58,590 --> 00:13:01,850 de unu funkcio al alia Peco de datumoj, kiujn vi volas ĝin 315 00:13:01,850 --> 00:13:03,500 al mutate aŭ ŝanĝi. 316 00:13:03,500 --> 00:13:08,060 >> Do kio estis nia solvo ebliganta Funkcio reprezentitaj de unu stako 317 00:13:08,060 --> 00:13:11,390 kadro por ŝanĝi la memoro ene de alia stack frame? 318 00:13:11,390 --> 00:13:14,590 Kiel fari tiujn du Debato unu al alia? 319 00:13:14,590 --> 00:13:18,510 Do, per vojo de montriloj aŭ adreson, kiu, denove, ĝuste priskribi kie en 320 00:13:18,510 --> 00:13:22,280 memoro, pere de specifaj mordo numero, la aparta 321 00:13:22,280 --> 00:13:23,830 valoro povas esti trovita. 322 00:13:23,830 --> 00:13:26,860 Do memoru lasta fojo tro ni daŭre la historio kaj rigardas 323 00:13:26,860 --> 00:13:28,280 sufiĉe kalesxon programo. 324 00:13:28,280 --> 00:13:32,900 Kaj tiu programo estas kalesxon por kelkaj kialoj, sed la plej preocupante estas 325 00:13:32,900 --> 00:13:34,620 ĉar ĝi mankas al kontroli kio? 326 00:13:34,620 --> 00:13:39,111 327 00:13:39,111 --> 00:13:40,450 >> Jes, ĝi mankas al kontrolu la enigo. 328 00:13:40,450 --> 00:13:41,870 Pardonu? 329 00:13:41,870 --> 00:13:43,880 >> Se estas pli ol 12 signoj. 330 00:13:43,880 --> 00:13:47,260 Do tre smartly, nominte memcopy, kiuj, kiel la nomo sugestas, nur 331 00:13:47,260 --> 00:13:50,630 kopioj memoro de lia dua argumento en lia unua argumento. 332 00:13:50,630 --> 00:13:54,730 La tria argumento, tre smartly, estas kontrolis por certigi ke vi ne 333 00:13:54,730 --> 00:13:59,400 kopii pli, en tiu kazo, la longo de trinkejo, nombro da karakteroj, 334 00:13:59,400 --> 00:14:03,810 en la celloko, kiu estas tiu tabelo C. Sed la problemo estas ke tio, kion 335 00:14:03,810 --> 00:14:07,230 se C si mem ne estas sufiĉe granda manipuli tio? 336 00:14:07,230 --> 00:14:09,900 Vi tuj kopii la nombro de bajtoj ke vi donis. 337 00:14:09,900 --> 00:14:13,040 Sed kion vi fakte havas pli bajtoj ol vi havas ĉambron por? 338 00:14:13,040 --> 00:14:16,770 >> Nu, tiu programo tre malsagxe nur blinde procedas por preni kion ajn ĝi estas 339 00:14:16,770 --> 00:14:20,650 ĵetkubo, saluton backslash 0 estas granda se kordo estas mallonga 340 00:14:20,650 --> 00:14:22,040 sufiĉas, kiel kvin signoj. 341 00:14:22,040 --> 00:14:26,470 Sed se ĝi estas fakte 12 karakteroj aŭ 1200 karakteroj, ni vidis lasta fojo 342 00:14:26,470 --> 00:14:29,380 ke vi simple iras al tute anstataŭigi memoro kiun 343 00:14:29,380 --> 00:14:30,470 ne apartenas al vi. 344 00:14:30,470 --> 00:14:34,390 Kaj plej malbona kazo, se vi anstataŭigi ke ruĝa porcion tie ni nomas la 345 00:14:34,390 --> 00:14:35,380 revenu adreso - 346 00:14:35,380 --> 00:14:38,370 ĉi tio estas nur kie la komputilo aŭtomate, ĉar vi, malantaŭ la 347 00:14:38,370 --> 00:14:43,130 scenoj, tucks for de 32-bita valoro kiu memorigas al kion adreso ĝi devus 348 00:14:43,130 --> 00:14:47,080 reveni kiam foo, tiu alia funkcio, estas farita ekzekuti. 349 00:14:47,080 --> 00:14:49,320 Ĝi estas pano panero de varoj al kiu revenas. 350 00:14:49,320 --> 00:14:52,490 Se vi anstatauxigas ke, potenciale, se vi estas la malbona, ĉu povis 351 00:14:52,490 --> 00:14:54,750 potenciale transpreni ies komputilo. 352 00:14:54,750 --> 00:14:58,020 Kaj Vi certe frakasi ĝin en la plimulto de kazoj. 353 00:14:58,020 --> 00:15:01,690 >> Nun ĉi tiu problemo estis nur pligravigita kiel ni komencis paroli pri memoro 354 00:15:01,690 --> 00:15:03,010 demarŝo pli ĝenerale. 355 00:15:03,010 --> 00:15:07,150 Kaj malloc, por memoro atribuo, estas funkcio kiu ni povas uzi por destini 356 00:15:07,150 --> 00:15:11,260 memoro, kiam ni ne scias anticipe ke ni bezonas. 357 00:15:11,260 --> 00:15:13,960 Do, ekzemple, se mi reirus al la aparato tie. 358 00:15:13,960 --> 00:15:21,010 Kaj mi malfermas el lasta fojo hello2.c, memoras tiun programon tie, kiu aspektis 359 00:15:21,010 --> 00:15:23,500 iom io tiamaniere, nur tri linioj - 360 00:15:23,500 --> 00:15:27,940 deklari vian nomon, tiam string nomo, sur la maldekstra, egalas getstring. 361 00:15:27,940 --> 00:15:29,690 Kaj tiam ni presas ĝin, la uzanto nomo. 362 00:15:29,690 --> 00:15:31,170 >> Do tio estis super simpla programo. 363 00:15:31,170 --> 00:15:34,870 Por esti klaraj, lasu min iri antaŭen kaj faru saluton-2. 364 00:15:34,870 --> 00:15:36,680 Mi tuj faros dot oblikvo saluton-2. 365 00:15:36,680 --> 00:15:37,750 Deklari vian nomon - 366 00:15:37,750 --> 00:15:38,140 Davido. 367 00:15:38,140 --> 00:15:38,840 Eniru. 368 00:15:38,840 --> 00:15:39,540 Saluton David. 369 00:15:39,540 --> 00:15:41,060 Ĝi ŝajnas funkcii bone. 370 00:15:41,060 --> 00:15:43,140 Sed kio vere okazas sub kapuĉo tie? 371 00:15:43,140 --> 00:15:44,670 Unue ni senŝeligas reen kelkaj tavoloj. 372 00:15:44,670 --> 00:15:48,380 String estas nur sinonimo ni realigis por kio? 373 00:15:48,380 --> 00:15:49,110 Char stelo. 374 00:15:49,110 --> 00:15:52,740 Do ni faru ĝin iom pli arkaikaj sed pli teknike korekta ke tiu 375 00:15:52,740 --> 00:15:55,570 Estas char stelo, kio signifas, ke nomo, jes, estas variablo. 376 00:15:55,570 --> 00:15:59,920 Sed kion nomon tendencas estas la adreso de oni char, kiuj sentas iom stranga 377 00:15:59,920 --> 00:16:01,050 ĉar mi reatingas ĉenon. 378 00:16:01,050 --> 00:16:03,580 Mi reatingas multnombra signoj ne estas char. 379 00:16:03,580 --> 00:16:07,400 >> Sed kompreneble, vi nur bezonas la unua char la adreso por memori, kie la 380 00:16:07,400 --> 00:16:08,870 tuta ĉeno estas ĉar kial? 381 00:16:08,870 --> 00:16:12,700 Kiel vi povas diveni, kie la fino de la kordo estas koni la komenco? 382 00:16:12,700 --> 00:16:13,630 La backslash nulo. 383 00:16:13,630 --> 00:16:17,260 Do kun tiuj du postsignoj vi povas diveni, antaŭ la komenco kaj la fino de 384 00:16:17,260 --> 00:16:20,280 neniu kordo estas, tiel longe kiel ili estas adekvate formita kun tiu nula 385 00:16:20,280 --> 00:16:22,110 Terminator, ke backslash nulo. 386 00:16:22,110 --> 00:16:24,520 >> Sed ĉi tiu vokas getstring. 387 00:16:24,520 --> 00:16:28,020 Kaj ĝi rezultas ke getstring tiu tuta tempo estis speco de 388 00:16:28,020 --> 00:16:28,820 cheating por ni. 389 00:16:28,820 --> 00:16:32,460 Ĝi estis farante tiu laboro, certe, prenanta kordoj de la uzanto. 390 00:16:32,460 --> 00:16:34,580 Sed kie estas tiu memoro venas de? 391 00:16:34,580 --> 00:16:38,440 Se ni reiru al la bildo tie kaj aplikas la difinon de nur 392 00:16:38,440 --> 00:16:42,610 antaŭ momento, ke la pilo estas kie memoro iras kiam funkcioj estas vokitaj, 393 00:16:42,610 --> 00:16:45,370 de tiu logiko, kiam vi nomas getstring, kaj tiam mi tajpas en 394 00:16:45,370 --> 00:16:50,900 D-Al-V-mi-D Enter, kie estas D-Al-V-mi-D backslash nulo stokita, bazita sur la 395 00:16:50,900 --> 00:16:53,480 rakonto ni diris al ni nun? 396 00:16:53,480 --> 00:16:55,190 >> Ĝi ŝajnis esti en la pilo, ĉu ne? 397 00:16:55,190 --> 00:16:58,120 Kiam vi nomas akiri string vi ricevas iom tranĉaĵo de memoro en la pilo. 398 00:16:58,120 --> 00:17:01,630 Do estas logike rezoni ke D-Al-V-mi-D backslash nulo estas stokita 399 00:17:01,630 --> 00:17:02,770 tie en la stako. 400 00:17:02,770 --> 00:17:07,680 Sed atendu momenton, getstring revenas ke kordoj, por tiel diri, kio signifas 401 00:17:07,680 --> 00:17:11,700 ĝi estas pleto de la kafejo estas prenita for de la pilo. 402 00:17:11,700 --> 00:17:14,560 Kaj ni diris lastan fojon ke tiel frue kiel funkcio revenas, kaj vi prenas tiun 403 00:17:14,560 --> 00:17:20,109 pleto, por tiel diri, fronte al la pilo, kion vi povas supozi pri la spuroj de 404 00:17:20,109 --> 00:17:21,819 tiu memoro? 405 00:17:21,819 --> 00:17:25,160 Mi ia redrew ilin kiel demandosignojn ĉar ili efektive fariĝis 406 00:17:25,160 --> 00:17:26,250 nekonataj valoroj. 407 00:17:26,250 --> 00:17:29,500 Ili povas reuzi kiam iuj sekva funkcio estas nomita. 408 00:17:29,500 --> 00:17:31,870 >> En aliaj vortoj, se ni okazi esti stoki - 409 00:17:31,870 --> 00:17:34,350 Mi desegnas rapida bildo tie de la pilo. 410 00:17:34,350 --> 00:17:38,690 Se ni okazi esti desegnante la fundo de mia memoro segmento, kaj ni diru 411 00:17:38,690 --> 00:17:42,230 ke tiu estas la loko de memoro okupita de ĉefa kaj eble arg c kaj 412 00:17:42,230 --> 00:17:46,790 arg v kaj io ajn alia en la programo, kiam getstring estas nomita, 413 00:17:46,790 --> 00:17:51,120 supozeble getstring gets eron de memoro tie. 414 00:17:51,120 --> 00:17:53,940 Kaj tiam D-Al-V-mi-D iel finas en ĉi tiu funkcio. 415 00:17:53,940 --> 00:17:55,320 Kaj mi tuj oversimplify. 416 00:17:55,320 --> 00:18:00,050 Sed ni supozu, ke lia D-Al-V-mi-D backslash nulo. 417 00:18:00,050 --> 00:18:03,500 Do tio multaj bajtoj estas uzataj en la kadron por getstring. 418 00:18:03,500 --> 00:18:08,270 >> Sed tuj kiam getstring revenas, ni diris lasta fojo ke tiu memoro super 419 00:18:08,270 --> 00:18:11,340 tie ĉiuj iĝas - Woops! - 420 00:18:11,340 --> 00:18:14,270 ĉiuj iĝas efike viŝitaj. 421 00:18:14,270 --> 00:18:17,220 Kaj ni povas pensi pri tio nun kiel demando markoj ĉar kiu scias 422 00:18:17,220 --> 00:18:18,720 kio okazos al tiu memoro. 423 00:18:18,720 --> 00:18:22,130 Efektive mi tre ofte nomas funkcioj alia ol getstring. 424 00:18:22,130 --> 00:18:24,750 Kaj tuj kiam mi vokas iu alia funkcio ol getstring, eble ne en 425 00:18:24,750 --> 00:18:28,860 tiu aparta programo ni nur rigardis ĉe sed iuj aliaj, verŝajne iu alia 426 00:18:28,860 --> 00:18:34,180 funkcio povus fini donante ĉi sekva makulo en la pilo. 427 00:18:34,180 --> 00:18:39,410 >> Do ĝi ne povas esti, ke getstring tendencas D-Al-V-mi-D sur la pilo ĉar mi volus 428 00:18:39,410 --> 00:18:41,040 tuj perdos aliron al ĝi. 429 00:18:41,040 --> 00:18:43,720 Sed ni scias ke getstring nur revenas kio? 430 00:18:43,720 --> 00:18:47,220 Tio ne reveni al mi ses karakterojn. 431 00:18:47,220 --> 00:18:51,090 Kio estas tio vere reveni tute ni konkludi lasta tempo? 432 00:18:51,090 --> 00:18:52,480 La adreso de la unua. 433 00:18:52,480 --> 00:18:56,650 Do iel, kiam vi nomis getstring, ĝi estas atribuo eron de memoro por 434 00:18:56,650 --> 00:18:59,620 la kordo, ke la uzantoj tipo kaj tiam reveni adreso de ĝi. 435 00:18:59,620 --> 00:19:02,930 Kaj ĝi rezultas ke kiam oni volas funkcii por rezervi memoron en ĉi 436 00:19:02,930 --> 00:19:08,390 vojo kaj reveno al la persono kiu nomis tiun funkcion, la adreso de 437 00:19:08,390 --> 00:19:11,870 ke eron de memoro, vi absolute ne povas meti ĝin en la stako ĉe la 438 00:19:11,870 --> 00:19:14,750 fundo, ĉar funkcie estas nur tuj ne farigxu via tre 439 00:19:14,750 --> 00:19:17,800 rapide, do vi versxajne povas diveni kie ni probable tuj ĵeti ĝin 440 00:19:17,800 --> 00:19:20,130 anstataŭe, la tn havaĵo. 441 00:19:20,130 --> 00:19:25,290 >> Do inter la fundo de via memoro estas aranĝo kaj la supro de via memoro estas 442 00:19:25,290 --> 00:19:26,820 aranĝo estas tuta aro da segmentoj. 443 00:19:26,820 --> 00:19:29,270 Unu estas la pilo, kaj dekstra super ĝi estas la havaĵo. 444 00:19:29,270 --> 00:19:33,680 Kaj amaso estas nur malsama eron de memoro kiu ne estas uzata por funkcioj 445 00:19:33,680 --> 00:19:34,770 kiam ili estas nomata. 446 00:19:34,770 --> 00:19:38,100 Ĝi estas uzata por pli longa termino memoro, kiam vi volas unu funkcio kapti iun 447 00:19:38,100 --> 00:19:42,700 memoro kaj povi pendigi sur gxi sen perdi kontrolon super ĝi. 448 00:19:42,700 --> 00:19:45,550 >> Nun vi povus eble tuj vidas, ke ĉi tio ne estas 449 00:19:45,550 --> 00:19:48,060 nepre perfektan dezajno. 450 00:19:48,060 --> 00:19:51,350 Kiel via programo asignitaj memoro la pilo, aŭ kiel vi nomas pli kaj 451 00:19:51,350 --> 00:19:55,540 pli funkcioj, aŭ kiel vi destini memoro sur la havaĵon per malloc off kiel 452 00:19:55,540 --> 00:20:00,690 getstring faras, kio klare Ŝajnas esti neevitebla problemo? 453 00:20:00,690 --> 00:20:00,860 >> Ĝuste. 454 00:20:00,860 --> 00:20:03,150 Kiel la fakto ke tiuj sagoj notas sin reciproke 455 00:20:03,150 --> 00:20:04,380 ne aŭguras bone. 456 00:20:04,380 --> 00:20:08,630 Kaj efektive, ni povus tre rapide frakasas programo en ajna kvanto de manieroj. 457 00:20:08,630 --> 00:20:12,050 Fakte, mi kredas ke ni povus havi faris tion akcidente unufoje. 458 00:20:12,050 --> 00:20:14,020 Aŭ se ne, ni faru ĝin intence nun. 459 00:20:14,020 --> 00:20:21,330 Lasu min kaj skribi super rapide programo nomata dontdothis.c. 460 00:20:21,330 --> 00:20:26,730 Kaj nun mi iros en tie kaj do akraj inkludas stdio.h. 461 00:20:26,730 --> 00:20:32,620 Ni deklaras funkcio foo prenas neniu argumentoj, kiuj estas 462 00:20:32,620 --> 00:20:34,040 skribata tiel per malplena. 463 00:20:34,040 --> 00:20:37,830 >> Kaj la sola afero foo tuj fari estas alvoko foo, kio verŝajne ne estas la 464 00:20:37,830 --> 00:20:39,100 plej inteligenta ideo, sed tiel estu. 465 00:20:39,100 --> 00:20:40,490 Ent ĉefa malplena. 466 00:20:40,490 --> 00:20:45,270 Nun la sola afero ĉefa tuj fari estas voki foo tiel. 467 00:20:45,270 --> 00:20:51,050 Kaj ĝuste por piedbatoj, mi tuj iros antaŭen tie kaj diru printf "Saluton el 468 00:20:51,050 --> 00:20:52,340 foo. " 469 00:20:52,340 --> 00:20:52,890 >> Akcepti. 470 00:20:52,890 --> 00:21:00,160 Do, se mi ne faris neniun eraron, Faru dontdothis dot oblikvo. 471 00:21:00,160 --> 00:21:01,960 Kaj ni faru tion en pli granda fenestro - 472 00:21:01,960 --> 00:21:03,210 dot oblikvo, dontdothis. 473 00:21:03,210 --> 00:21:07,590 474 00:21:07,590 --> 00:21:08,840 Venu. 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 Ŝajne, vi povas fari ĉi tion. 478 00:21:13,100 --> 00:21:15,190 Damn it. 479 00:21:15,190 --> 00:21:16,190 Akcepti. 480 00:21:16,190 --> 00:21:16,580 Atendu. 481 00:21:16,580 --> 00:21:17,370 Stand by. 482 00:21:17,370 --> 00:21:18,270 Ĉu ni - 483 00:21:18,270 --> 00:21:20,110 Ni ne uzas ĝin kun Make. 484 00:21:20,110 --> 00:21:22,050 >> [Suspiroj] 485 00:21:22,050 --> 00:21:25,110 >> Mi scias, sed mi kredas ke ni nur forigita tio. 486 00:21:25,110 --> 00:21:28,410 Uh, jes. 487 00:21:28,410 --> 00:21:30,660 Damn it. 488 00:21:30,660 --> 00:21:32,640 Solvi tiun Rob. 489 00:21:32,640 --> 00:21:34,678 Kio? 490 00:21:34,678 --> 00:21:35,928 Ĝi estas tre simpla. 491 00:21:35,928 --> 00:21:43,820 492 00:21:43,820 --> 00:21:47,360 Jes, ni turnis optimumigo malproksime. 493 00:21:47,360 --> 00:21:48,970 OK, staru adiaŭ. 494 00:21:48,970 --> 00:21:49,950 Nun mi sentas min pli bone. 495 00:21:49,950 --> 00:21:51,390 Akcepti. 496 00:21:51,390 --> 00:21:51,780 Ĉio bone. 497 00:21:51,780 --> 00:21:53,430 >> Do ni recompilar tiu - 498 00:21:53,430 --> 00:21:55,880 Faru vi dontdothis. 499 00:21:55,880 --> 00:22:00,090 Vi eble devus renomi ĉi tion al dothis.c en nur momento. 500 00:22:00,090 --> 00:22:00,710 Tie ni iru. 501 00:22:00,710 --> 00:22:01,240 Dankon. 502 00:22:01,240 --> 00:22:02,050 Akcepti. 503 00:22:02,050 --> 00:22:05,480 Do la fakto, ke mi estis presi ion estis fakte nur 504 00:22:05,480 --> 00:22:08,150 prokrastante la procezo per kiu ni estus atinginta tiu punkto. 505 00:22:08,150 --> 00:22:08,510 Akcepti. 506 00:22:08,510 --> 00:22:08,870 Phew! 507 00:22:08,870 --> 00:22:11,180 >> Do kio estas efektive okazas? 508 00:22:11,180 --> 00:22:14,440 La kialo estas, ĝuste kiel la rando, estas fari ion en terminoj de enigo kaj 509 00:22:14,440 --> 00:22:17,270 eligo emas esti pli malrapida, ĉar vi devas skribi karakteroj al la 510 00:22:17,270 --> 00:22:18,600 ekrano, ĝi devas rulumi. 511 00:22:18,600 --> 00:22:21,720 Do longan rakonton, se mi efektive okazis tiel terure, ni havus 512 00:22:21,720 --> 00:22:23,260 vidis tiun fina rezulto tiel. 513 00:22:23,260 --> 00:22:26,220 Nun ke mi ricevis promenado de la pres-ups, ni vidos tuj. 514 00:22:26,220 --> 00:22:28,410 Do kial estas tio okazas. 515 00:22:28,410 --> 00:22:31,300 Nu, la simpla klarigo, kompreneble, estas ke foo probable ne devus 516 00:22:31,300 --> 00:22:32,500 esti nomante sin. 517 00:22:32,500 --> 00:22:34,470 >> Nun en ĝeneralaj terminoj, ĉi tiu estas rekursio. 518 00:22:34,470 --> 00:22:36,970 Kaj ni pensis paron semajnoj antaŭe rekursie estas bona. 519 00:22:36,970 --> 00:22:40,330 Rekursio estas tiu magia vojo de esprimi vin mem super koncize. 520 00:22:40,330 --> 00:22:41,400 Kaj ĝuste funkcias. 521 00:22:41,400 --> 00:22:45,060 Sed estas ŝlosila trajto de ĉiuj la rekursiaj programoj ni parolis 522 00:22:45,060 --> 00:22:48,260 pri kaj rigardis tiel malproksime, kiuj estis, ke ili havis kio? 523 00:22:48,260 --> 00:22:52,610 Bazo kazo, kiu estis iom malfacile kodita kazo kiu diris en iuj situacioj 524 00:22:52,610 --> 00:22:56,210 ne nomas foo, kiu estas klare ne estas la kazo tie. 525 00:22:56,210 --> 00:22:58,920 >> Do kio vere okazas en terminoj de ĉi tiu bildo? 526 00:22:58,920 --> 00:23:01,790 Nu, kiam ĉefa nomas foo, ĝi ricevas tranĉaĵo de memoro. 527 00:23:01,790 --> 00:23:04,150 Kiam foo foo flamo, ĝi alvenas tranĉaĵo de memoro. 528 00:23:04,150 --> 00:23:06,430 Kiam foo foo flamo, ĝi alvenas tranĉaĵo. 529 00:23:06,430 --> 00:23:07,080 Ĝi alvenas tranĉaĵo. 530 00:23:07,080 --> 00:23:08,120 Ĝi alvenas tranĉaĵo. 531 00:23:08,120 --> 00:23:09,460 Ĉar foo neniam reveni. 532 00:23:09,460 --> 00:23:12,160 Ni neniam viŝante unu el tiuj, kadroj de la pilo. 533 00:23:12,160 --> 00:23:15,930 Do ni blovas tra la amaso, ne mencii kiu scias kion alian, kaj 534 00:23:15,930 --> 00:23:19,600 ni overstepping la limojn de nia tn segmento de memoro. 535 00:23:19,600 --> 00:23:21,790 Eraro iri segmentación falsaj. 536 00:23:21,790 --> 00:23:24,110 >> Do la solvo estas klare ne fari tion. 537 00:23:24,110 --> 00:23:28,830 Sed la pli granda signifo estas, ke, jes, tie absolute estas iu limo, 538 00:23:28,830 --> 00:23:32,470 eĉ se ĝi ne estas bone difinitaj, pri kiel multaj funkcioj povas nomi en 539 00:23:32,470 --> 00:23:34,970 programo, kiom da fojoj funkcio povas nomi sin. 540 00:23:34,970 --> 00:23:38,430 Do kvankam ni faris prediki rekursio kiel ĉi potenciale magia afero de 541 00:23:38,430 --> 00:23:41,870 paro de semajnoj por la sigmo funkcio, kaj kiam ni atingos la datumoj 542 00:23:41,870 --> 00:23:45,270 strukturoj kaj CS50, vi vidos aliajn aplikojn por ĝi, estas ne 543 00:23:45,270 --> 00:23:46,500 nepre la plej bona afero. 544 00:23:46,500 --> 00:23:50,070 Ĉar se funkcio nomas sin, nomas sin, eĉ se estas bazo 545 00:23:50,070 --> 00:23:54,860 kazo, se vi ne batis tiu bazo kazo por 1.000 alvokoj aŭ 10.000 alvokojn, por 546 00:23:54,860 --> 00:23:58,800 tiam vi povus kuri el ĉambron sur via tn pilo kaj sukceson 547 00:23:58,800 --> 00:24:00,400 iuj aliaj segmentoj de memoro. 548 00:24:00,400 --> 00:24:03,950 Do ĝi tro estas dezajno kompromiso inter eleganteco kaj inter 549 00:24:03,950 --> 00:24:06,920 solideco de via aparta efektivigo. 550 00:24:06,920 --> 00:24:10,780 >> Do ekzistas alia malfacilaĵo aŭ alia gotcha al kio ni 551 00:24:10,780 --> 00:24:11,720 estis farante tiom. 552 00:24:11,720 --> 00:24:12,980 Kiam mi vokis getstring - 553 00:24:12,980 --> 00:24:15,120 lasu min iri reen en saluton-2. 554 00:24:15,120 --> 00:24:18,170 Rimarku, ke mi vokas getstring, kiu estas revenante adreson. 555 00:24:18,170 --> 00:24:20,730 Kaj ni asertas hodiaŭ ke adreso estas el la havaĵo. 556 00:24:20,730 --> 00:24:24,480 Kaj nun mi presi el la kordo en tiu adreso. 557 00:24:24,480 --> 00:24:27,000 Sed ni neniam donis la malo de getstring. 558 00:24:27,000 --> 00:24:30,850 Ni neniam devis calll funkcio kiel ungetstring, kie vi manon 559 00:24:30,850 --> 00:24:31,610 tiu memoro. 560 00:24:31,610 --> 00:24:33,250 Sed sincere ni probable devus esti. 561 00:24:33,250 --> 00:24:37,390 Ĉar se ni observas petante la komputilo por memoro, pere de iu kiel 562 00:24:37,390 --> 00:24:40,830 getstring sed neniam redonas gxin, verŝajne ankaŭ tio nepre kondukas al 563 00:24:40,830 --> 00:24:42,970 problemoj per kiu ni elĉerpis de memoro. 564 00:24:42,970 --> 00:24:46,140 >> Kaj fakte, ni povas serĉi ĉi tiuj problemoj kun la nova ilo kies uzado 565 00:24:46,140 --> 00:24:47,640 estas iom enigmaj por tajpi. 566 00:24:47,640 --> 00:24:50,960 Sed lasu min antaŭeniri kaj ŝpruci ĝin sur la ekrano, en nur momento. 567 00:24:50,960 --> 00:24:56,940 Mi tuj iros antaŭen kaj kuri Valgrind kun parametro kies unua ordono 568 00:24:56,940 --> 00:25:00,260 linio argumento estas la nomo de tiu programo saluton-2. 569 00:25:00,260 --> 00:25:02,650 Kaj bedaŭrinde ĝi estas eligo estas atrociously 570 00:25:02,650 --> 00:25:04,290 kompleksa sen bona kialo. 571 00:25:04,290 --> 00:25:06,280 Do ni vidu cxion, kio salato. 572 00:25:06,280 --> 00:25:07,530 David estas elmontras mian nomon. 573 00:25:07,530 --> 00:25:09,760 Do jen la programo efektive funkcias. 574 00:25:09,760 --> 00:25:11,180 Kaj nun ni atingos ĉi eligo. 575 00:25:11,180 --> 00:25:13,400 >> Do Valgrind estas simila en spirito GDB. 576 00:25:13,400 --> 00:25:14,950 Ne erarserĉilo per si mem. 577 00:25:14,950 --> 00:25:16,270 Sed estas memoro kontrolilo. 578 00:25:16,270 --> 00:25:20,140 Ĝi estas programo kiu kuros via plani kaj diru al vi se vi petis 579 00:25:20,140 --> 00:25:23,860 komputilo por memoro kaj neniam donis ĝin dorso, per tio signifas, ke vi havas 580 00:25:23,860 --> 00:25:24,570 memoro liko. 581 00:25:24,570 --> 00:25:26,240 Kaj memoro likoj inklinas esti malbona. 582 00:25:26,240 --> 00:25:29,120 Kaj vi estas uzantoj de komputiloj havas probable sentis tion, ĉu vi havas 583 00:25:29,120 --> 00:25:30,300 Mac aŭ PC. 584 00:25:30,300 --> 00:25:33,730 Ĉu vi iam uzis komputilon por momenton kaj ne rebooted en pluraj 585 00:25:33,730 --> 00:25:36,820 tagoj, aŭ vi ĵus akiris multajn programoj ruliĝas, kaj la malbenita afero 586 00:25:36,820 --> 00:25:42,360 malrapidiĝas al muelantaj lama, aŭ almenaŭ ĝi estas super tedas uzi, ĉar 587 00:25:42,360 --> 00:25:44,350 ĉiun ĵus super malrapida. 588 00:25:44,350 --> 00:25:46,260 >> Nun tiu povas esti kiom ajn da kialoj. 589 00:25:46,260 --> 00:25:49,600 Ĝi povus esti malfinia ciklo, cimo en ies kodo, aŭ, pli simple, ĝi 590 00:25:49,600 --> 00:25:53,250 povus signifi, ke vi uzas pli memoro, aŭ provi, ol via 591 00:25:53,250 --> 00:25:54,920 komputilo fakte havas. 592 00:25:54,920 --> 00:25:57,770 Kaj eble tie estas cimo en iu programo kiu gardas petante memoro. 593 00:25:57,770 --> 00:26:02,480 Foliumiloj dum jaroj estis konata por tiu, petante pli kaj pli da memoro 594 00:26:02,480 --> 00:26:03,870 sed neniam cedi ŝin reen. 595 00:26:03,870 --> 00:26:07,220 Certe, se vi nur havas finia kvanto da memoro, vi ne povas demandi 596 00:26:07,220 --> 00:26:09,990 malfinie multfoje por iom de tiu memoro. 597 00:26:09,990 --> 00:26:13,070 >> Kaj do kion vi vidas tie, eĉ se denove Valgrind eligo estas 598 00:26:13,070 --> 00:26:17,490 nenecese kompleksa al ekrigard unue, tio estas la interesa parto. 599 00:26:17,490 --> 00:26:18,890 Multigu - 600 00:26:18,890 --> 00:26:20,060 en uzo ĉe eliro. 601 00:26:20,060 --> 00:26:22,810 Do jen kiom memoro estis en uzo en la havaĵo de la 602 00:26:22,810 --> 00:26:24,300 tempo mia programo eliris - 603 00:26:24,300 --> 00:26:27,280 ŝajne ses bitokoj en unu bloko. 604 00:26:27,280 --> 00:26:28,710 Do mi tuj skuos miaj manoj je kio bloko estas. 605 00:26:28,710 --> 00:26:31,270 Pensu pri ĝi estas nur chunk, pli teknika vorto por chunk. 606 00:26:31,270 --> 00:26:33,140 Sed ses bitokoj - 607 00:26:33,140 --> 00:26:36,870 kio estas la ses bitokoj ke estis ankoraŭ en uzo? 608 00:26:36,870 --> 00:26:37,390 >> Ekzakte. 609 00:26:37,390 --> 00:26:41,520 D-Al-V-mi-D backslash nulo, kvin letero nomo plus la nula terminator. 610 00:26:41,520 --> 00:26:46,350 Do tiu programo Valgrind rimarkis ke mi petis ses bitokoj, ŝajne, por 611 00:26:46,350 --> 00:26:48,950 vojo de getstring, sed neniam donis ilin reen. 612 00:26:48,950 --> 00:26:52,030 Kaj fakte, ĉi tiu eble ne estus tiel evidente se mia programo ne estas tri 613 00:26:52,030 --> 00:26:53,590 linioj, sed ĝi estas 300 linioj. 614 00:26:53,590 --> 00:26:56,920 Do ni vere povas doni alian komando linio argumento al Valgrind al 615 00:26:56,920 --> 00:26:58,290 fari ĝin pli abundajn. 616 00:26:58,290 --> 00:26:59,760 Estas iom ĝena por memori. 617 00:26:59,760 --> 00:27:01,580 Sed se mi faras - 618 00:27:01,580 --> 00:27:01,930 vidu. 619 00:27:01,930 --> 00:27:03,540 Filtri - 620 00:27:03,540 --> 00:27:05,030 Estis ĝin filtri - 621 00:27:05,030 --> 00:27:07,580 eĉ mi ne memoras kio estas ekstere mano. 622 00:27:07,580 --> 00:27:08,550 >> - Liko-ĉeko egalas plena. 623 00:27:08,550 --> 00:27:10,180 Yep, dankon. 624 00:27:10,180 --> 00:27:12,520 - Liko-ĉeko egalas plena. 625 00:27:12,520 --> 00:27:13,800 Eniru. 626 00:27:13,800 --> 00:27:14,940 Sama programo kuras. 627 00:27:14,940 --> 00:27:16,180 Tajpi en David denove. 628 00:27:16,180 --> 00:27:17,660 Nun mi vidas iom pli detale. 629 00:27:17,660 --> 00:27:20,890 Sed sub la havaĵon resumo, kiu estas identa al kvar - ah, 630 00:27:20,890 --> 00:27:22,120 ĉi tiu estas speco de agrabla. 631 00:27:22,120 --> 00:27:25,460 Nun Valgrind fakte serĉas iom pli malfacila en miaj kodo. 632 00:27:25,460 --> 00:27:29,580 Kaj ĝi estas dirante ke, ŝajne, malloc ĉe linio - 633 00:27:29,580 --> 00:27:30,580 ni malzomi. 634 00:27:30,580 --> 00:27:31,980 Ĉe linio - 635 00:27:31,980 --> 00:27:32,930 ni ne vidas kion linio estas. 636 00:27:32,930 --> 00:27:35,110 Sed malloc estas la unua kulpa. 637 00:27:35,110 --> 00:27:38,630 Tie estas blogo en malloc. 638 00:27:38,630 --> 00:27:39,810 >> Ĉio bone? 639 00:27:39,810 --> 00:27:40,450 OK, ne. 640 00:27:40,450 --> 00:27:40,940 Ĝuste? 641 00:27:40,940 --> 00:27:42,520 Mi vokis getstring. 642 00:27:42,520 --> 00:27:44,460 getstring ŝajne nomas malloc. 643 00:27:44,460 --> 00:27:47,800 Do kio linio de kodo estas ŝajne kulpis por havi 644 00:27:47,800 --> 00:27:49,050 asignitaj tiu memoro? 645 00:27:49,050 --> 00:27:51,560 646 00:27:51,560 --> 00:27:55,540 Supozu ke ĉiu, kiu skribis malloc estis ĉirkaŭ sufiĉe longe, ke ĝi estas 647 00:27:55,540 --> 00:27:56,390 ne ilia kulpo. 648 00:27:56,390 --> 00:27:57,520 Do estas probable mia. 649 00:27:57,520 --> 00:28:02,000 getstring en cs50.c - do tio estas dosieron ie en la komputilo - 650 00:28:02,000 --> 00:28:05,210 en linio 286 ŝajnas esti la kulpa. 651 00:28:05,210 --> 00:28:08,140 Nun ni supozu, ke cs50 estis ĉirkaŭrigardis por deca kvanton de tempo, tiel 652 00:28:08,140 --> 00:28:09,720 ni tro estas senerara. 653 00:28:09,720 --> 00:28:14,080 Kaj tial ĝi estas probable ne en getstring ke la besteto mensogas, sed en 654 00:28:14,080 --> 00:28:17,810 saluton-2.c linio 18. 655 00:28:17,810 --> 00:28:20,670 >> Do ni rigardu kion tio linio 18 estis. 656 00:28:20,670 --> 00:28:21,130 Oh. 657 00:28:21,130 --> 00:28:27,130 Iel tiu linio ne estas nepre kalesxon, per, sed estas la kialo 658 00:28:27,130 --> 00:28:28,630 malantaŭ tiu memoro liko. 659 00:28:28,630 --> 00:28:32,140 Do super simple, kion farus intuicie esti la solvo ĉi tie? 660 00:28:32,140 --> 00:28:34,710 Se ni petas memoro, estis neniam donante ĝin, kaj kiu ŝajnas esti 661 00:28:34,710 --> 00:28:37,940 problemo ĉar la tempo mia komputilo kuru el la memoro, povus malrapidigi 662 00:28:37,940 --> 00:28:42,110 malsupren, malbona aĵoj povus okazi, bone, kio estas la simpla intuicia solvo? 663 00:28:42,110 --> 00:28:43,140 Nur donu ĝin reen. 664 00:28:43,140 --> 00:28:44,770 >> Kiel vi liberigi tiu memoro? 665 00:28:44,770 --> 00:28:49,970 Nu, feliĉe ĝi estas sufiĉe simpla por simple diri liberaj nomo. 666 00:28:49,970 --> 00:28:51,260 Kaj ni neniam faris tion antaŭe. 667 00:28:51,260 --> 00:28:55,890 Sed vi povas esence pensas libera kiel la malo de malloc. 668 00:28:55,890 --> 00:28:58,030 libera estas la malo de atribuo memoro. 669 00:28:58,030 --> 00:28:59,540 Do nun mi recompilar ĉi. 670 00:28:59,540 --> 00:29:02,050 Faru saluton-2. 671 00:29:02,050 --> 00:29:04,620 Permesu al mi kuri ĝin denove. saluton-2 Davido. 672 00:29:04,620 --> 00:29:07,290 Do ĝi ŝajnas funkcii en ĝuste la sama maniero. 673 00:29:07,290 --> 00:29:11,180 Sed se mi reirus al Valgrind kaj re-kuri tiu sama komando sur mian nove 674 00:29:11,180 --> 00:29:14,720 kompilita programo, tajpi en mia nomo kiel antaŭe - 675 00:29:14,720 --> 00:29:15,370 nice. 676 00:29:15,370 --> 00:29:16,760 Multigu resumo - 677 00:29:16,760 --> 00:29:17,740 en uzo ĉe eliro - 678 00:29:17,740 --> 00:29:19,370 nulo bajtoj en nulo blokoj. 679 00:29:19,370 --> 00:29:21,840 Kaj ĉi tiu estas super bela, ĉiuj amaso blokoj estis liberigitaj. 680 00:29:21,840 --> 00:29:23,480 Neniu fugoj estas eblaj. 681 00:29:23,480 --> 00:29:27,200 >> Do kiam li eliris, ne kun Problemo Serio 4, sed kun Problemo Serio 5, la forensics 682 00:29:27,200 --> 00:29:30,740 kaj plue, tio tro iĝos mezuro de la praveco de via 683 00:29:30,740 --> 00:29:33,630 programo, ĉu vi havas aŭ ne havas memoron likoj. 684 00:29:33,630 --> 00:29:36,900 Sed feliĉe, ne nur vi povas rezoni tra ili intuicie, kiu 685 00:29:36,900 --> 00:29:40,430 estas, eble, facila por malgrandaj programoj sed malfacila por pli grandaj programoj, 686 00:29:40,430 --> 00:29:43,860 Valgrind, por tiuj pli grandaj programoj, povas helpi vin identigi 687 00:29:43,860 --> 00:29:45,360 la aparta problemo. 688 00:29:45,360 --> 00:29:47,500 >> Sed estas alia problemo kiuj povus ekesti. 689 00:29:47,500 --> 00:29:51,245 Permesu al mi malfermu tiun dosieron ĉi tie, tio estas, denove, iom simpla ekzemplo. 690 00:29:51,245 --> 00:29:53,760 Sed ni enfokusigas sur kio tiu programo faras. 691 00:29:53,760 --> 00:29:55,190 Ĉi tio estas nomita memory.c. 692 00:29:55,190 --> 00:29:58,380 Ni afiŝi ĉi poste hodiaŭ en la zip de hodiaŭa fontkodo. 693 00:29:58,380 --> 00:30:01,610 Kaj rimarki, ke mi havas funkcion nomita f kiu prenas neniun argumenton kaj 694 00:30:01,610 --> 00:30:02,800 redonas nenion. 695 00:30:02,800 --> 00:30:07,240 En linio 20, mi ŝajne deklari puntero al int kaj nomante ĝin x. 696 00:30:07,240 --> 00:30:09,570 Mi asignanta estas la reveno valoro de malloc. 697 00:30:09,570 --> 00:30:14,590 Kaj nur por esti klara, kiom da bitokoj am Mi verŝajne reatingas de malloc 698 00:30:14,590 --> 00:30:17,080 en ĉi tiu situacio? 699 00:30:17,080 --> 00:30:18,040 >> Probable 40. 700 00:30:18,040 --> 00:30:18,840 Kiel vi akiras, ke de? 701 00:30:18,840 --> 00:30:22,410 Nu, se vi memoras, ke int estas ofte 4 bajtoj, almenaŭ ĝi estas en la 702 00:30:22,410 --> 00:30:25,110 aparato, 10 fojojn 4 estas evidente 40. 703 00:30:25,110 --> 00:30:28,920 Do malloc revenas adreson de eron de memoro kaj stokante ke 704 00:30:28,920 --> 00:30:30,800 trakti finfine en x. 705 00:30:30,800 --> 00:30:32,570 Do por esti klara, kion tiam okazas? 706 00:30:32,570 --> 00:30:34,990 Nu, lasu min ŝanĝi reen al nia bildo tie. 707 00:30:34,990 --> 00:30:38,150 Lasu min, ne nur desegni la fundo de mia komputilo memoro, lasu min antaŭeniri kaj 708 00:30:38,150 --> 00:30:42,990 desegni la tuta rektangulo kiu reprezentas la tutan mian RAM. 709 00:30:42,990 --> 00:30:44,790 >> Ni diros ke la pilo estas sur la fundo. 710 00:30:44,790 --> 00:30:47,010 Kaj tie estas teksto segmento en la uninitialized datumoj. 711 00:30:47,010 --> 00:30:49,880 Sed mi simple tuj abstrakta tiuj aliaj aferoj for kiel punkto, dot dot. 712 00:30:49,880 --> 00:30:53,470 Mi simple tuj raporti al ĉi tiu kiel la amaso ĉe la supro. 713 00:30:53,470 --> 00:30:57,070 Kaj poste ĉe la malsupro de tiu ĉi bildo, por reprezenti ĉefa, mi tuj 714 00:30:57,070 --> 00:30:59,880 doni al ĝi tranĉaĵoj memoro sur la stako. 715 00:30:59,880 --> 00:31:03,150 Por f, mi ĝin donacos tranĉaĵo de memoro en la pilo. 716 00:31:03,150 --> 00:31:05,140 Nu, mi alvenis al konsulti mia fontkodon denove. 717 00:31:05,140 --> 00:31:07,170 Kiuj estas la lokaj variabloj por ĉefan? 718 00:31:07,170 --> 00:31:10,710 Ŝajne nenio, tiel ke tranĉaĵo estas efektive malplena aŭ eĉ tiel granda 719 00:31:10,710 --> 00:31:11,600 kiel mi desegnis ĝin. 720 00:31:11,600 --> 00:31:15,730 Sed en f, mi havas lokan variablon, kiu estas nomata x. 721 00:31:15,730 --> 00:31:20,410 Do mi tuj iros antaŭen kaj donu f eron de memoro, nomante ĝin x. 722 00:31:20,410 --> 00:31:24,680 >> Kaj nun malloc de 10 fojoj 4, Do malloc 40, kie estas tiu 723 00:31:24,680 --> 00:31:25,430 memoro devenante? 724 00:31:25,430 --> 00:31:27,530 Ni ne desegnita bildo like this antaŭe. 725 00:31:27,530 --> 00:31:31,140 Sed ni supozu, ke ĝi estas efektive venas de ĉi tie, do unu, 726 00:31:31,140 --> 00:31:33,170 du, tri, kvar, kvin. 727 00:31:33,170 --> 00:31:34,680 Kaj nun mi bezonas 40 de tiuj. 728 00:31:34,680 --> 00:31:37,540 Do mi nur faras dot, punkto, ĝi pentras sugesti ke estas eĉ pli memoro 729 00:31:37,540 --> 00:31:39,350 revenanta el la havaĵo. 730 00:31:39,350 --> 00:31:40,710 Nun kio estas la adreso? 731 00:31:40,710 --> 00:31:42,620 Ni elektas niajn arbitrajn trakti kiel ĉiam - 732 00:31:42,620 --> 00:31:46,310 Ox123, kvankam ĝi estas probable tuj esti iu tute malsama. 733 00:31:46,310 --> 00:31:50,420 Tio estas la adreso de la unua bajto en memoro kiun mi petas malloc por. 734 00:31:50,420 --> 00:31:53,630 >> Do mallonge, unufoje linio 20 ekzekutas, kio estas laŭvorte 735 00:31:53,630 --> 00:31:57,170 stokita ene de x ĉi tie? 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 Kaj la Bovo estas interesa. 739 00:32:01,550 --> 00:32:03,200 Ĝi nur signifas ĉi tie estas deksesuma nombro. 740 00:32:03,200 --> 00:32:06,490 Sed kio estas ŝlosilo estas tio kio mi havas vendejo en x, kiu estas loka variablo. 741 00:32:06,490 --> 00:32:10,260 Sed lia datumtipo, denove, estas adreso de int. 742 00:32:10,260 --> 00:32:12,710 Nu, mi tuj stoki Ox123. 743 00:32:12,710 --> 00:32:16,610 Sed denove, se tiu estas iom tro komplikas sennecese, se mi rulumas 744 00:32:16,610 --> 00:32:21,490 reen, ni povas abstrakta tiun for sufiĉe prudente kaj ĝuste diri ke x estas 745 00:32:21,490 --> 00:32:23,910 puntero al tiu bloko de memoro. 746 00:32:23,910 --> 00:32:24,070 >> Akcepti. 747 00:32:24,070 --> 00:32:26,230 Nun la demando en mano estas la sekva - 748 00:32:26,230 --> 00:32:29,910 linio 21, rezultas, estas kalesxo. 749 00:32:29,910 --> 00:32:31,160 Kial? 750 00:32:31,160 --> 00:32:34,890 751 00:32:34,890 --> 00:32:36,930 >> Pardonu? 752 00:32:36,930 --> 00:32:38,640 Ĝi ne havas - 753 00:32:38,640 --> 00:32:40,390 diri, ke denove. 754 00:32:40,390 --> 00:32:41,240 Nu, ne libera. 755 00:32:41,240 --> 00:32:42,350 Do jen la dua sed. 756 00:32:42,350 --> 00:32:45,000 Do ekzistas unu alia sed specife ĉe linio 21. 757 00:32:45,000 --> 00:32:49,480 758 00:32:49,480 --> 00:32:50,040 >> Ekzakte. 759 00:32:50,040 --> 00:32:54,980 Tiu simpla linio de kodo estas nur buffer overflow, buffer invadita. 760 00:32:54,980 --> 00:32:57,050 Al buffer nur signifas eron de memoro. 761 00:32:57,050 --> 00:33:01,520 Sed tio eron de memoro estas de amplekso 10, 10 entjeroj, kio signifas, se ni 762 00:33:01,520 --> 00:33:05,350 indekso en ĝin uzante la sintaksa sukero de tabelo skribmaniero, la kvadrata 763 00:33:05,350 --> 00:33:09,220 krampoj, vi havas aliron al x krampo 0 x krampo 1 x, 764 00:33:09,220 --> 00:33:10,390 krampo dot, punkto, ĝi pentras. 765 00:33:10,390 --> 00:33:13,270 x krampo 9 estas la plej granda unu. 766 00:33:13,270 --> 00:33:17,680 Do, se mi faras x krampo 10, kie Mi reale iras en memoro? 767 00:33:17,680 --> 00:33:19,120 >> Nu, se mi havas 10 int - 768 00:33:19,120 --> 00:33:21,070 ni vere desegni ĉiuj de tiuj el tie. 769 00:33:21,070 --> 00:33:22,700 Por ke estis la unuaj kvin. 770 00:33:22,700 --> 00:33:24,660 Jen la aliaj kvin ints. 771 00:33:24,660 --> 00:33:29,580 Do x krampo 0 estas ĉi tie. x krampo 1 estas tie. x krampo 9 estas ĉi tie. x krampo 772 00:33:29,580 --> 00:33:37,960 10 estas tie, kio signifas, mi diras, en linio 21, la komputilo por meti la 773 00:33:37,960 --> 00:33:39,400 numeron kie? 774 00:33:39,400 --> 00:33:42,010 La nombro 0 kie? 775 00:33:42,010 --> 00:33:43,380 Nu, estas 0, jes. 776 00:33:43,380 --> 00:33:45,460 Sed nur la fakto, ke lia 0 estas speco da koincidoj. 777 00:33:45,460 --> 00:33:47,140 Ĝi povus esti la nombro 50, por ĉiuj ni gravas. 778 00:33:47,140 --> 00:33:50,480 Sed ni provas meti ĝin je x krampo 10, kiu estas kie ĉi 779 00:33:50,480 --> 00:33:53,700 demandosigno estas desegnita, kiu ne estas bona afero. 780 00:33:53,700 --> 00:33:57,070 Ĉi tiu programo povus tre bone frakasi kiel rezulto. 781 00:33:57,070 --> 00:33:59,400 >> Nun, ni iru antaŭen kaj vidu se tiu Estas, ja, kio okazas. 782 00:33:59,400 --> 00:34:02,600 Faru memoro, ekde la dosiero nomas memory.c. 783 00:34:02,600 --> 00:34:05,950 Ni iru antaŭen kaj ruli la programo memoro. 784 00:34:05,950 --> 00:34:08,239 Do ni havas sorton, efektive, ŝajnas. 785 00:34:08,239 --> 00:34:09,340 Ni akiris bonŝanca. 786 00:34:09,340 --> 00:34:11,060 Sed vidu se ni nun kuras Valgrind. 787 00:34:11,060 --> 00:34:14,170 Je unua vido, mia programo povus ŝajnas esti perfekte ĝustaj. 788 00:34:14,170 --> 00:34:18,010 Sed mi kuros Valgrind kun la - Liko-ĉeko egalas plena je memoro. 789 00:34:18,010 --> 00:34:20,110 >> Kaj nun, kiam mi kuros ĉi - 790 00:34:20,110 --> 00:34:21,030 interesa. 791 00:34:21,030 --> 00:34:26,800 Malvalida skribi de grandeco 4, je linio 21 de memory.c. 792 00:34:26,800 --> 00:34:29,284 Linio 21 de memory.c estas kiu? 793 00:34:29,284 --> 00:34:30,340 Ho, interese. 794 00:34:30,340 --> 00:34:31,080 Sed atendu. 795 00:34:31,080 --> 00:34:32,389 Grandeco 4, kio estas referenco al? 796 00:34:32,389 --> 00:34:34,969 Mi nur faris unu skribi, sed estas de amplekso 4. 797 00:34:34,969 --> 00:34:36,889 Kial estas 4? 798 00:34:36,889 --> 00:34:39,280 Ĝi estas ĉar ĝi estas int, kiu estas, denove, kvar bajtoj. 799 00:34:39,280 --> 00:34:42,510 Do Valgrind trovis cimon, ke Mi, rigardante mian kodo, ne. 800 00:34:42,510 --> 00:34:45,040 Kaj eble via TF volus aŭ ne. 801 00:34:45,040 --> 00:34:48,469 Kio Sed Valgrind por asekuro trovis ke ni eraris tie, eĉ 802 00:34:48,469 --> 00:34:52,719 kvankam ni havas sorton, kaj la komputilo decidis, eh, mi ne tuj frakasos 803 00:34:52,719 --> 00:34:57,470 nur ĉar vi tuŝis unu bajto, unu _int_ la valoron de memoro, ke vi ne 804 00:34:57,470 --> 00:34:58,550 efektive posedas. 805 00:34:58,550 --> 00:35:00,380 >> Nu, kion alian estas kalesxon tie. 806 00:35:00,380 --> 00:35:01,180 Adreso - 807 00:35:01,180 --> 00:35:03,190 tio estas freneza rigardante adreso en deksesuma. 808 00:35:03,190 --> 00:35:06,890 Tio nur signifas ie en la havaĵo estas nulo bitokoj post bloko de grandeco 40 809 00:35:06,890 --> 00:35:07,620 estas publikita. 810 00:35:07,620 --> 00:35:10,610 Lasu min malzomi tie kaj vidi se ĉi tiu estas iom pli utila. 811 00:35:10,610 --> 00:35:11,410 Interesa. 812 00:35:11,410 --> 00:35:15,600 40 bitokoj estas definitive perditaj en perdo rekordo 1 el 1. 813 00:35:15,600 --> 00:35:17,840 Denove, pli da vortoj ol estas utila tie. 814 00:35:17,840 --> 00:35:21,350 Sed bazita sur la emfazita linioj, kie mi probable enfokusigi mia 815 00:35:21,350 --> 00:35:24,070 atenton al alia cimo? 816 00:35:24,070 --> 00:35:26,570 Aspektas kiel linio 20 de memory.c. 817 00:35:26,570 --> 00:35:30,990 >> Do, se ni reiru al linio 20, tio estas la Kiu vi identigis antaŭe. 818 00:35:30,990 --> 00:35:33,030 Kaj ĝi ne nepre kalesxo. 819 00:35:33,030 --> 00:35:35,160 Sed ni ĉi renversis liajn efektojn. 820 00:35:35,160 --> 00:35:38,790 Do kiel mi korekti almenaŭ unu el tiuj eraroj? 821 00:35:38,790 --> 00:35:42,240 Kion mi povus fari post linio 21? 822 00:35:42,240 --> 00:35:47,110 Mi povus fari liberan de x, tia estas redoni ke memoro. 823 00:35:47,110 --> 00:35:49,230 Kaj kiel mi povas solvi ĉi tiun cimon? 824 00:35:49,230 --> 00:35:52,120 Mi devus definitive iri ne plu ol 0. 825 00:35:52,120 --> 00:35:53,670 Do mi provos kaj re-kuros ĉi. 826 00:35:53,670 --> 00:35:56,080 Pardonu, definitive iri ne plu ol 9. 827 00:35:56,080 --> 00:35:57,510 Faru memoron. 828 00:35:57,510 --> 00:36:00,650 Lasu min rerun Valgrind en pli granda fenestro. 829 00:36:00,650 --> 00:36:01,580 Kaj nun rigardu. 830 00:36:01,580 --> 00:36:02,250 Nice. 831 00:36:02,250 --> 00:36:03,270 Ĉiuj amason blokoj estis liberigitaj. 832 00:36:03,270 --> 00:36:04,270 Neniu fugoj estas eblaj. 833 00:36:04,270 --> 00:36:07,520 Kaj super tie, tie estas neniu mencio plu de la nevalidan pravas. 834 00:36:07,520 --> 00:36:09,820 >> Nur por akiri avida, kaj estu la vidu se alia pruvo 835 00:36:09,820 --> 00:36:11,050 ne iras tiel intencis - 836 00:36:11,050 --> 00:36:12,560 Mi ricevas bonŝanca antaŭ momento. 837 00:36:12,560 --> 00:36:15,530 Kaj la fakto ke ĉi tiu estas 0 estas eble nenecese iluzia. 838 00:36:15,530 --> 00:36:20,650 Ni nur faru 50, iom arbitraj nombro, fari memoro dot oblikvo memoro - 839 00:36:20,650 --> 00:36:21,410 ankoraŭ akiri bonŝanca. 840 00:36:21,410 --> 00:36:22,510 Nenio estas frakasi. 841 00:36:22,510 --> 00:36:26,150 Supozi Mi nur faras iun vere malprudentaj, kaj mi faru 100. 842 00:36:26,150 --> 00:36:30,360 Lasu min refari memoro, dot oblikvo memoro - 843 00:36:30,360 --> 00:36:31,075 atingis bonŝanca denove. 844 00:36:31,075 --> 00:36:32,800 Kiel ĉirkaŭ 1.000? 845 00:36:32,800 --> 00:36:35,370 ints tie, malglate, kie mi devus esti? 846 00:36:35,370 --> 00:36:37,410 Faru memoro - 847 00:36:37,410 --> 00:36:38,570 damn it. 848 00:36:38,570 --> 00:36:39,920 >> [Ridado] 849 00:36:39,920 --> 00:36:41,270 >> Akcepti. 850 00:36:41,270 --> 00:36:43,920 Ni ne salaton ĉirkaŭ plu. 851 00:36:43,920 --> 00:36:45,120 Rerun memoro. 852 00:36:45,120 --> 00:36:45,840 Tie ni iru. 853 00:36:45,840 --> 00:36:46,410 Ĉio bone. 854 00:36:46,410 --> 00:36:52,500 Do ŝajne vi indekso 100.000 ints tie, kie vi devus esti en 855 00:36:52,500 --> 00:36:54,410 memoro, malbonaj aĵoj okazas. 856 00:36:54,410 --> 00:36:56,430 Do tiu estas evidente ne malmola, rapida regulo. 857 00:36:56,430 --> 00:36:58,190 Mi estis speco de uzante juĝo kaj eraro por alveni tie. 858 00:36:58,190 --> 00:37:02,230 Sed tio estas ĉar, longan rakonton mallonga, via komputilo memoro estas ankaŭ dividita 859 00:37:02,230 --> 00:37:03,580 en tiuj aĵoj nomata segmentoj. 860 00:37:03,580 --> 00:37:07,260 Kaj kelkfoje, la komputilo fakte donis al vi iom pli da memoro 861 00:37:07,260 --> 00:37:08,400 ol vi petas. 862 00:37:08,400 --> 00:37:12,170 Sed por efikecon, nur pli facile ricevi pli da memoro sed nur diri al vi 863 00:37:12,170 --> 00:37:13,780 ke vi fariĝas parto de ĝi. 864 00:37:13,780 --> 00:37:16,370 >> Kaj se vi ekhavas bonŝanca kelkfoje, do, eble vi povos tuŝi 865 00:37:16,370 --> 00:37:17,795 memoro kiu ne apartenas al vi. 866 00:37:17,795 --> 00:37:21,860 Vi ne havas garantion ke kio valoro vi metis tie restos tie, ĉar 867 00:37:21,860 --> 00:37:25,080 la komputilo ankoraŭ pensas ĝi ne estas via, sed ĝi ne nepre tuj 868 00:37:25,080 --> 00:37:29,910 bati alian segmenton de memoro en la komputilo kaj induktas eraron kiel 869 00:37:29,910 --> 00:37:31,710 ĉi tie. 870 00:37:31,710 --> 00:37:32,060 Ĉio bone. 871 00:37:32,060 --> 00:37:37,240 Demandojn tiam memoro? 872 00:37:37,240 --> 00:37:37,590 >> Ĉio bone. 873 00:37:37,590 --> 00:37:40,610 Ni rigardu ĉi tie, tiam, je ion ni iris prenante por 874 00:37:40,610 --> 00:37:48,361 koncedita por sufiĉe tempo, kiu Estas en ĉi tiu dosiero nomata cs50.h. 875 00:37:48,361 --> 00:37:49,420 Do tiu estas dosiero. 876 00:37:49,420 --> 00:37:51,130 Ĉi tiuj estas nur aro faskon de komentoj supren supro. 877 00:37:51,130 --> 00:37:53,900 Kaj vi povintus rigardis ĉi se vi poked ĉirkaŭe en la aparaton. 878 00:37:53,900 --> 00:37:57,000 Sed rezultu ke la tuta tempo, kiam ni kutimis uzi kordo kiel 879 00:37:57,000 --> 00:38:01,130 sinonimo, la rimedoj, per kiuj ni deklaras ke sinonimo estis kun tiu 880 00:38:01,130 --> 00:38:03,990 ŝlosilvorto typedef, por tipo difino. 881 00:38:03,990 --> 00:38:07,500 Kaj ni esence dirante: fari String sinonimo por char stelo. 882 00:38:07,500 --> 00:38:11,190 Ke la rimedoj, per kiuj la stako kreis ĉi tiujn trejnado radoj konata kiel 883 00:38:11,190 --> 00:38:12,040 la kordo. 884 00:38:12,040 --> 00:38:14,830 >> Nun tie estas nur prototipo por getchar. 885 00:38:14,830 --> 00:38:17,350 Ni povus esti vidinta ĝin antaŭe, sed tio estas ĝuste kion ĝi faras. getchar 886 00:38:17,350 --> 00:38:19,070 prenas neniun argumenton, redonas char. 887 00:38:19,070 --> 00:38:21,340 getdouble prenas neniun argumenton, redonas duoble. 888 00:38:21,340 --> 00:38:24,440 getfloat prenas neniun argumenton, revenas kaleŝego, kaj tiel plu. 889 00:38:24,440 --> 00:38:27,270 getint estas en tie. getlonglong Estas en ĉi tie. 890 00:38:27,270 --> 00:38:28,820 Kaj getstring estas en tie. 891 00:38:28,820 --> 00:38:29,420 Kaj tio estas ĝi. 892 00:38:29,420 --> 00:38:33,080 Ĉi purpura linio estas alia antaŭtraktilo direktivo pro la 893 00:38:33,080 --> 00:38:35,550 etiketon al la komenco de ĝi. 894 00:38:35,550 --> 00:38:35,870 >> Ĉio bone. 895 00:38:35,870 --> 00:38:38,380 Do nun lasu min iri en cs50.c. 896 00:38:38,380 --> 00:38:40,400 Kaj ni ne parolu tro longe sur ĉi. 897 00:38:40,400 --> 00:38:43,280 Sed por doni al vi ekvidi, kio estas iris sur ĉiuj ĉi 898 00:38:43,280 --> 00:38:46,434 tempo, lasu min iri al - 899 00:38:46,434 --> 00:38:48,250 ni faru getchar. 900 00:38:48,250 --> 00:38:51,050 Do getchar estas plejparte komentojn. 901 00:38:51,050 --> 00:38:52,060 Sed ĝi aspektas kiel ĉi tio. 902 00:38:52,060 --> 00:38:54,800 Do tiu estas la reala funkcio getchar ke ni estis 903 00:38:54,800 --> 00:38:56,055 prenante por koncedis ekzistas. 904 00:38:56,055 --> 00:38:59,370 Kaj eĉ se ni ne uzas ĉi tiu ke ofte, se iam, estas almenaŭ 905 00:38:59,370 --> 00:39:00,470 relative simpla. 906 00:39:00,470 --> 00:39:02,580 Do valoras preni rapida rigardi tie. 907 00:39:02,580 --> 00:39:06,540 >> Do getchar havas senfinan buklon, intence tiel ŝajne. 908 00:39:06,540 --> 00:39:10,050 Ĝi tiam nomas - kaj ĉi tiu estas speco de bela reuzo de la kodo ni mem skribis. 909 00:39:10,050 --> 00:39:11,220 Ĝi alvokas getstring. 910 00:39:11,220 --> 00:39:12,460 Pro kio faras ĝin signifas akiri char? 911 00:39:12,460 --> 00:39:14,730 Nu, vi povus tiel provi atingi tuta linio de teksto de la uzanto kaj 912 00:39:14,730 --> 00:39:16,940 tiam nur rigardi unu de tiuj signoj. 913 00:39:16,940 --> 00:39:19,170 En linio 60, tie estas iom bito de prudento ĉeko. 914 00:39:19,170 --> 00:39:21,610 Se getstring revenis nula, ni ne iros. 915 00:39:21,610 --> 00:39:22,820 Io misokazis. 916 00:39:22,820 --> 00:39:28,120 >> Nun tio estas iom ĝena sed konvencia en C. char maks probable 917 00:39:28,120 --> 00:39:29,960 reprezentas kio ĵus bazita en lia nomo? 918 00:39:29,960 --> 00:39:31,670 Ĝi estas konstanta. 919 00:39:31,670 --> 00:39:36,040 Estas kiel la numera valoro de la grandaj char vi povas reprezenti kun 920 00:39:36,040 --> 00:39:40,370 unu mordo, kiu estas probable la nombro 255, kiu estas la plej granda nombro vin 921 00:39:40,370 --> 00:39:42,720 reprezenti ok bitoj, ekde nulo. 922 00:39:42,720 --> 00:39:47,460 Do mi uzos tiun, en ĉi tiu funkcio, kiam skribi tiun kodon, nur ĉar 923 00:39:47,460 --> 00:39:51,753 se iu iras malbone en getchar sed lia celo en la vivo estas resendas 924 00:39:51,753 --> 00:39:54,830 char, vi devas iel povos por signali al la uzanto kiu 925 00:39:54,830 --> 00:39:55,840 io iris malbone. 926 00:39:55,840 --> 00:39:56,970 Ni ne povas reveni nula. 927 00:39:56,970 --> 00:39:58,480 Ĝi rezultas ke nula estas puntero. 928 00:39:58,480 --> 00:40:01,030 Kaj denove, getchar havas reveni al char. 929 00:40:01,030 --> 00:40:04,760 >> Do la kongreso, se iu iras erara, estas vi, la programisto, aŭ en 930 00:40:04,760 --> 00:40:08,160 tiu kazo, mi kun la biblioteko, mi havis justa decidi arbitre, se 931 00:40:08,160 --> 00:40:12,230 io iras malbone, mi tuj redonas la numeron 255, kiu estas vere 932 00:40:12,230 --> 00:40:17,240 signifas ke ni ne povas, la uzanto ne povas tajpi la karaktero reprezentita de la 933 00:40:17,240 --> 00:40:21,410 numeron 255, ĉar ni havis ŝteli ĝin kiel tn gardostaranto valoron al 934 00:40:21,410 --> 00:40:23,410 reprezentas problemon. 935 00:40:23,410 --> 00:40:27,010 Nun ĝi rezultas ke la karaktero 255 ne estas io, kion vi povas tajpi sur 936 00:40:27,010 --> 00:40:28,380 via klavaro, do ĝi ne estas granda interkonsento. 937 00:40:28,380 --> 00:40:30,910 La uzanto ne rimarkas ke Mi ŝtelis tiun karakteron. 938 00:40:30,910 --> 00:40:34,620 Sed se vi iam vidos en paĝoj de man sur komputila sistemo iu referenco al 939 00:40:34,620 --> 00:40:38,560 ĉiuj kaskedoj konstanta kiel tiu kiu diras, en kazoj de eraro ĉi tiu konstanta forto 940 00:40:38,560 --> 00:40:42,720 esti redonita, jen ĉio iuj homaj faris jaroj estis arbitre decidis 941 00:40:42,720 --> 00:40:45,680 redoni tiun specialan valoron kaj nomas ĝin konstanta en kazo 942 00:40:45,680 --> 00:40:46,840 iu iras malbone. 943 00:40:46,840 --> 00:40:48,580 >> Nun la magio okazas cxi tie. 944 00:40:48,580 --> 00:40:52,600 Unue, mi deklarante en linion 67 du karakterojn, C1 kaj C2. 945 00:40:52,600 --> 00:40:57,080 Kaj tiam en linio 68, tie estas reale linio de kodo tio memoras 946 00:40:57,080 --> 00:41:01,140 nia amiko printf, donita ke ne havas procento Cs en citiloj. 947 00:41:01,140 --> 00:41:06,490 Sed rimarkas kio okazas tie. sscanf signifas ĉenon scan - 948 00:41:06,490 --> 00:41:11,690 signifas skani la formatan kordo, ergo sscanf. 949 00:41:11,690 --> 00:41:12,590 Kion tio signifas? 950 00:41:12,590 --> 00:41:16,310 Ĝi signifas pasas al sscanf ĉenon. 951 00:41:16,310 --> 00:41:18,420 Kaj linio estas kion ajn la uzanto tajpas in 952 00:41:18,420 --> 00:41:23,520 Vi pasas al sscanf formato kordo kiel tiu kiu rakontas scanf kio estas 953 00:41:23,520 --> 00:41:25,870 vi atendas la uzanto tajpas in 954 00:41:25,870 --> 00:41:29,730 Vi do pasi-en la adresoj de du pecoj de memoro, en ĉi tiu kazo, 955 00:41:29,730 --> 00:41:31,150 ĉar mi havas du anstataŭiloj. 956 00:41:31,150 --> 00:41:34,610 Do mi ĝin donacos la adreso de C1 kaj la adreson de C2. 957 00:41:34,610 --> 00:41:37,700 >> Kaj memoru, ke vi donas funkcio la adreso de iu variablo, kio estas 958 00:41:37,700 --> 00:41:38,950 la implikaĵo? 959 00:41:38,950 --> 00:41:41,400 960 00:41:41,400 --> 00:41:45,050 Kion povas fari tiun funkcion kiel rezulto de doni al ĝi la adreson de 961 00:41:45,050 --> 00:41:48,170 variablo, kontraste al la variablo mem? 962 00:41:48,170 --> 00:41:49,450 Ĝi povas ŝanĝi ĝin, ĉu ne? 963 00:41:49,450 --> 00:41:53,250 Se vi havis iun mapon al fizika adreso, ili povas iri tie kaj fari 964 00:41:53,250 --> 00:41:54,750 kion ajn ili volas al tiu adreso. 965 00:41:54,750 --> 00:41:55,800 Sama ideo tie. 966 00:41:55,800 --> 00:41:59,950 Se ni pasas al sscanf, la adreso de du pecoj de memoro, eĉ tiujn etajn 967 00:41:59,950 --> 00:42:03,585 iom pecojn de memoro, C1 kaj C2, sed ni diru al ĝi la adreson de ili, 968 00:42:03,585 --> 00:42:05,170 sscanf povas ŝanĝi ĝin. 969 00:42:05,170 --> 00:42:08,530 >> Do sscanf la celo en la vivo, se ni legas la viro paĝon, estas legi kion la 970 00:42:08,530 --> 00:42:13,420 uzanto tajpita en, espero por la uzanto havanta tajpitaj en karaktero kaj eble 971 00:42:13,420 --> 00:42:16,470 alian karakteron, kaj kion la uzanto tajpitaj, la unua gravulo iras 972 00:42:16,470 --> 00:42:19,310 tie, la dua gravulo iras tien. 973 00:42:19,310 --> 00:42:22,470 Nun, kiel flanken, oriento, kaj vi farus nur scias tion en la dokumentadon, 974 00:42:22,470 --> 00:42:25,570 la fakto, ke mi metas malplenan spacon tie nur signifas ke mi ne gravas se 975 00:42:25,570 --> 00:42:28,440 la uzanto atingas la Spaco trinkejo kelkajn fojoj antaŭ ol li aŭ ŝi prenas 976 00:42:28,440 --> 00:42:30,400 karaktero, mi tuj ignori neniu blanka spaco. 977 00:42:30,400 --> 00:42:32,510 Tial, mi scias el la dokumentado. 978 00:42:32,510 --> 00:42:36,570 >> La fakto ke ekzistas duan% c sekvata de blanka spaco estas fakte 979 00:42:36,570 --> 00:42:37,410 intenca. 980 00:42:37,410 --> 00:42:41,190 Mi volas povi detekti se la uzanto ŝraŭbita supren aŭ ne kunlabori. 981 00:42:41,190 --> 00:42:45,630 Do mi esperas ke la uzanto nur tajpitaj en unu signo, do mi esperas 982 00:42:45,630 --> 00:42:50,640 ke sscanf nur tuj redoni la valoro 1 ĉar, denove, se mi legis 983 00:42:50,640 --> 00:42:55,400 la dokumentado, sscanf la celon en vivo estas reveni al la nombro de 984 00:42:55,400 --> 00:42:59,170 variabloj kiuj satiĝis kun uzanto enigo. 985 00:42:59,170 --> 00:43:02,270 >> Mi pasis en du variabloj adresoj, C1 kaj C2. 986 00:43:02,270 --> 00:43:06,420 Mi esperas, tamen, ke nur unu el ili prenas mortigita ĉar se sscanf 987 00:43:06,420 --> 00:43:11,130 Revenas 2, kio estas supozeble la implikaĵo logike? 988 00:43:11,130 --> 00:43:14,600 Ke la uzanto ne nur donu al mi unu karaktero kiel Mi diris al li aŭ ŝi. 989 00:43:14,600 --> 00:43:17,860 Ili verŝajne enigis je Almenaŭ du gravulojn. 990 00:43:17,860 --> 00:43:22,430 Do se mi anstataŭ ne havis la dua % C, mi nur havis unu, kiu 991 00:43:22,430 --> 00:43:25,370 sincere estus pli intuicia alproksimiĝo, mi kredas unua rigardo, 992 00:43:25,370 --> 00:43:30,220 vi ne tuj povos detekti se la uzanto estas doni al vi pli 993 00:43:30,220 --> 00:43:31,780 enigo ol vi vere volis. 994 00:43:31,780 --> 00:43:34,100 Do tiu estas implica formo de eraro checking. 995 00:43:34,100 --> 00:43:35,640 >> Sed rimarkas kion mi faras tie. 996 00:43:35,640 --> 00:43:39,970 Iam mi certas ke la uzanto donis al mi unu karaktero, mi liberigi la linio, farante 997 00:43:39,970 --> 00:43:44,450 la malo de getstring, kiu laŭvice Uzas malloc, kaj poste mi revenos 998 00:43:44,450 --> 00:43:51,030 C1, la karaktero, ke mi atendis la uzanto provizita kaj nur provizis. 999 00:43:51,030 --> 00:43:54,680 Tiel rapida duonvidis nur, sed demandojn sur getchar? 1000 00:43:54,680 --> 00:43:57,450 1001 00:43:57,450 --> 00:43:59,590 Ni revenos al iuj de la aliaj. 1002 00:43:59,590 --> 00:44:03,770 >> Nu, lasu min antaŭeniri kaj fari tion - supozu nun, nur por motivi nian 1003 00:44:03,770 --> 00:44:08,910 diskuto en semajno plus tempo, ĉi Jen dosiero nomata structs.h. 1004 00:44:08,910 --> 00:44:11,440 Kaj denove, ĉi tio estas nur gusto de iu kiu kuŝas antaŭe. 1005 00:44:11,440 --> 00:44:13,090 Sed avertas ke multe de tio estas komentoj. 1006 00:44:13,090 --> 00:44:17,440 Do lasu min reliefigi nur la interesa parto por nun. 1007 00:44:17,440 --> 00:44:18,020 typedef - 1008 00:44:18,020 --> 00:44:19,700 ekzistas tiu sama ŝlosilvorto denove. 1009 00:44:19,700 --> 00:44:23,100 typedef ni uzas por deklari kordo kiel speciala datumtipo. 1010 00:44:23,100 --> 00:44:27,490 Vi povas uzi typedef krei tutnova datumtipoj kiu ne ekzistis kiam 1011 00:44:27,490 --> 00:44:28,570 C estis inventita. 1012 00:44:28,570 --> 00:44:32,520 Ekzemple, int venas kun C. char venas kun C. duobla venas kun C. Sed 1013 00:44:32,520 --> 00:44:34,000 ne estas nocio de studento. 1014 00:44:34,000 --> 00:44:37,230 Kaj tamen ĝi estus sufiĉe utila por esti kapablaj skribi programon kiu stokas 1015 00:44:37,230 --> 00:44:40,440 en variablo, iu studento ID numeron, lia nomo, kaj ilia domo. 1016 00:44:40,440 --> 00:44:42,890 En aliaj vortoj, tri pecoj de datumoj, kiel oni int kaj 1017 00:44:42,890 --> 00:44:44,420 ŝnuro kaj alia linio. 1018 00:44:44,420 --> 00:44:48,220 >> Kun typedef, kio estas sufiĉe potenca pri tiu kaj la ŝlosilvorto sturct por 1019 00:44:48,220 --> 00:44:53,660 strukturon, vi, la programisto en 2013, efektive povas difini vian propran la 1020 00:44:53,660 --> 00:44:57,530 datumtipoj kiu ne ekzistis jaroj antaŭe sed ke laux viaj intencoj. 1021 00:44:57,530 --> 00:45:01,910 Kaj tial ĉi tie, en linioj 13 tra 19, ni deklarante nova datumtipo, kiel 1022 00:45:01,910 --> 00:45:04,320 an int, sed nomi ĝin studento. 1023 00:45:04,320 --> 00:45:09,310 Kaj ene de tiu variablo tuj Tri aferoj - an int, ĉeno, 1024 00:45:09,310 --> 00:45:09,930 kaj ĉenon. 1025 00:45:09,930 --> 00:45:13,040 Do vi povas pensi pri kio estas vere okazis tie, kvankam ĉi tiu estas 1026 00:45:13,040 --> 00:45:17,160 iom de plisimpligo por hodiaŭ, studento estas esence irante 1027 00:45:17,160 --> 00:45:19,450 aspekti kiel ĉi tio. 1028 00:45:19,450 --> 00:45:22,580 Lia tuj estos eron de memoro kun ID, nomo 1029 00:45:22,580 --> 00:45:25,580 kampo, kaj domon kampo. 1030 00:45:25,580 --> 00:45:30,670 Kaj ni povos uzi tiujn pecojn de memoro kaj konsenti ili jene. 1031 00:45:30,670 --> 00:45:38,870 >> Se mi iros en struct0.c, jen relative longa, sed post 1032 00:45:38,870 --> 00:45:42,630 mastro, de kodo ke Uzas tiu nova artifiko. 1033 00:45:42,630 --> 00:45:45,790 Do unue permesu al mi atentigi vin al la interesaj partoj ĝis supro. 1034 00:45:45,790 --> 00:45:49,670 Sharp difinas studentoj 3, deklaras konstanta nomita studentoj kaj atribuas 1035 00:45:49,670 --> 00:45:53,450 ĝi arbitre la numero 3, nur tial mi havas tri studentoj uzante 1036 00:45:53,450 --> 00:45:54,830 tiu programo por nun. 1037 00:45:54,830 --> 00:45:55,960 Jen venas Artikolo. 1038 00:45:55,960 --> 00:45:58,860 Kaj rimarki, kiel mi rakontu tabelo de studentoj? 1039 00:45:58,860 --> 00:46:00,480 Nu, mi simple uzas la saman sintakson. 1040 00:46:00,480 --> 00:46:02,110 La vorto lernanto estas evidente nova. 1041 00:46:02,110 --> 00:46:04,790 Sed studento, klaso, krampo studentoj. 1042 00:46:04,790 --> 00:46:06,720 >> Do bedaŭrinde restas multa el reuzado de terminoj ĉi tie. 1043 00:46:06,720 --> 00:46:07,660 Tiu estas nur nombro. 1044 00:46:07,660 --> 00:46:09,040 Do tiu estas kiel diri tri. 1045 00:46:09,040 --> 00:46:11,430 Klaso estas precize kion mi volas nomi la variablo. 1046 00:46:11,430 --> 00:46:12,840 Mi povus nomi studentoj. 1047 00:46:12,840 --> 00:46:15,880 Sed klaso, tio ne estas klaso en objektema Java ia maniero. 1048 00:46:15,880 --> 00:46:17,220 Estas nur klaso de studentoj. 1049 00:46:17,220 --> 00:46:20,590 Kaj la datumtipo de ĉiu elemento en tiu tabelo estas studento. 1050 00:46:20,590 --> 00:46:23,040 Do tiu estas iom malsama kaj el dirante ion 1051 00:46:23,040 --> 00:46:25,250 kiel tiu, ĝi estas nur - 1052 00:46:25,250 --> 00:46:29,500 Mi diris al mi tri studentoj kaj invitas ke tabelo klaso. 1053 00:46:29,500 --> 00:46:29,800 >> Ĉio bone. 1054 00:46:29,800 --> 00:46:30,680 Nun ĉi tie estas kvar buklo. 1055 00:46:30,680 --> 00:46:33,480 Tiu ulo estas familiara - ripeti de nulo sur ĝis tri. 1056 00:46:33,480 --> 00:46:35,160 Kaj jen la nova peco de sintakso. 1057 00:46:35,160 --> 00:46:37,710 La programo tuj instigas min, la homo, por doni al ĝi studento 1058 00:46:37,710 --> 00:46:39,200 ID, kiu estas int. 1059 00:46:39,200 --> 00:46:44,650 Kaj jen la sintakson kun kiu vi povas stoki ion en la ID kampo ĉe 1060 00:46:44,650 --> 00:46:48,630 situo klaso krampo I. Do tiu sintakso ne estas nova. 1061 00:46:48,630 --> 00:46:51,450 Ĉi nur signifas doni al mi la oka studento en la klaso. 1062 00:46:51,450 --> 00:46:52,940 Sed tiu simbolo estas nova. 1063 00:46:52,940 --> 00:46:56,320 Ĝis nun, ni ne povas uzi punkton, almenaŭ en kodo ŝatas tion. 1064 00:46:56,320 --> 00:47:01,490 Tio signifas iri al la struct konata kiel studento kaj metis ion tie. 1065 00:47:01,490 --> 00:47:05,670 Simile, en la sekva linio, 31, iri antaŭeniris kaj metis ajn la uzanto tajpas 1066 00:47:05,670 --> 00:47:10,530 Mia nomo tie kaj kion ili faras por domo, la samon, iru antaŭen kaj 1067 00:47:10,530 --> 00:47:13,230 metis ĝin en. domo. 1068 00:47:13,230 --> 00:47:15,955 >> Do kio faras ĉi programo finfine fari? 1069 00:47:15,955 --> 00:47:17,220 Vi povas vidi iom teaser tie. 1070 00:47:17,220 --> 00:47:24,780 Lasu min antaŭeniri kaj ne fari structs 0 dot oblikvo struct 0, studento ID 1, 1071 00:47:24,780 --> 00:47:28,250 diru Davido Mather, studento ID 2. 1072 00:47:28,250 --> 00:47:32,070 Rob Kirkland, studento ID 3. 1073 00:47:32,070 --> 00:47:35,010 Lauren Leverit - 1074 00:47:35,010 --> 00:47:38,380 kaj la sola afero ĉi programo faris, kio estas ĝuste tute arbitra, estas 1075 00:47:38,380 --> 00:47:40,980 Mi volis fari ion kun tiu datumo, nun ke mi instruis nin kiel 1076 00:47:40,980 --> 00:47:43,450 uzi structs, estas mi ĵus havis tiu ekstra buklo tie. 1077 00:47:43,450 --> 00:47:45,260 Mi persisti sur la tabelo de studentoj. 1078 00:47:45,260 --> 00:47:49,170 Mi uzis niaj, eble nun konata amiko, kordo kompari, stircomp al 1079 00:47:49,170 --> 00:47:53,780 ĉeko estas 8a studenta domo egala al Mather? 1080 00:47:53,780 --> 00:47:56,760 Kaj se jes, nur presi ion arbitre ŝatas, jes, ĝi estas. 1081 00:47:56,760 --> 00:47:59,430 Sed denove, nur donante al mi ŝancojn uzi kaj reuzi kaj 1082 00:47:59,430 --> 00:48:02,270 reuzi tiun novan dot skribmaniero. 1083 00:48:02,270 --> 00:48:03,250 >> Do, kiuj zorgas, ĉu ne? 1084 00:48:03,250 --> 00:48:06,270 Coming up kun studento programo estas iom arbitra, sed ĝi rezultas 1085 00:48:06,270 --> 00:48:09,800 ke ni povas fari utilajn aĵojn kun tiu, ekzemple jene. 1086 00:48:09,800 --> 00:48:14,600 Tio estas multe pli komplika struct en C. Ĝi atingis dekduo aŭ pli kampoj, 1087 00:48:14,600 --> 00:48:15,880 iom crípticamente enoficigita. 1088 00:48:15,880 --> 00:48:20,110 Sed se vi iam aŭdis pri grafiko formato de dosiero nomata bitmap, BMP, ĝi 1089 00:48:20,110 --> 00:48:22,830 Rezultas ke la bitmap dosierformato sufiĉe similas ke ĉi. 1090 00:48:22,830 --> 00:48:24,200 Estas stulta iom Smiley vizaĝo. 1091 00:48:24,200 --> 00:48:27,840 Ĝi estas malgranda bildo kiun mi zomita en sur sufiĉe granda por ke mi povis vidi ĉiu 1092 00:48:27,840 --> 00:48:30,410 de la individuo punktoj aŭ rastrumeroj. 1093 00:48:30,410 --> 00:48:33,800 Nun, ĝi rezultas ni povas reprezenti nigra punkto kun, ekzemple, la nombro 0. 1094 00:48:33,800 --> 00:48:35,520 Kaj blanka punkto kun la numero 1. 1095 00:48:35,520 --> 00:48:39,140 >> Do, en aliaj vortoj, se vi volas desegni Smiley vizaĝo kaj savi tiun bildon en 1096 00:48:39,140 --> 00:48:42,680 komputilo, ĝi sufiĉas por stoki nuloj kaj kiuj aspektas kiel oriento, kie, 1097 00:48:42,680 --> 00:48:45,250 denove, karaj estas blankaj kaj nuloj estas nigraj. 1098 00:48:45,250 --> 00:48:48,290 Kaj kune, se vi efektive havas oni zonu de kaj nuloj, vi havas 1099 00:48:48,290 --> 00:48:51,030 krado de rastrumeroj, kaj se vi kuŝis ilin, vi havas bela 1100 00:48:51,030 --> 00:48:52,560 iom Smiley vizaĝo. 1101 00:48:52,560 --> 00:48:58,150 Nun, bitmap formato de dosiero, BMP, estas efektive, ke sub la kapuĉo, 1102 00:48:58,150 --> 00:49:00,970 sed kun pli rastrumeroj sot ke vi efektive povas reprezenti kolorojn. 1103 00:49:00,970 --> 00:49:05,170 >> Sed kiam vi havas pli kompleksan dosieraj formatoj kiel BMP kaj JPEG kaj GIF 1104 00:49:05,170 --> 00:49:09,360 kun kiu vi povus esti familiara, tiuj dosierojn en disko tipe ne nur 1105 00:49:09,360 --> 00:49:13,760 havi nuloj kaj por la rastrumeroj, sed ili havas iujn metadatumoj tiel - 1106 00:49:13,760 --> 00:49:16,960 meta en la senco ke ne estas vere datumoj sed estas utile havi. 1107 00:49:16,960 --> 00:49:21,370 Do tiuj kampoj ĉi tie estas implico, kaj ni vidos tion en pli detalo en P-aro 1108 00:49:21,370 --> 00:49:25,810 5, kiu antaŭ la nuloj kaj ke reprezentas la bildoj estas image, 1109 00:49:25,810 --> 00:49:29,110 tie estas amaso de metadatumoj kiel la grandeco de la bildo kaj la 1110 00:49:29,110 --> 00:49:30,250 larĝo de la bildo. 1111 00:49:30,250 --> 00:49:32,910 Kaj rimarki Mi plukinte for iu ajnaj aferoj tie - 1112 00:49:32,910 --> 00:49:34,260 larĝeco kaj alteco. 1113 00:49:34,260 --> 00:49:36,160 Bito grafo kaj kelkaj aliaj aĵoj. 1114 00:49:36,160 --> 00:49:37,840 Do tie estas kelkaj metadatumoj en dosiero. 1115 00:49:37,840 --> 00:49:41,470 >> Sed per kompreno kiel dosieroj estas demetataj ekstere en tiu formo, vi povas efektive 1116 00:49:41,470 --> 00:49:45,890 tiam manipuli bildojn, reakiri bildoj el disko, regrandigi bildoj. 1117 00:49:45,890 --> 00:49:47,560 Sed vi ne povas nepre plibonigi ilin. 1118 00:49:47,560 --> 00:49:48,480 Mi bezonis foto. 1119 00:49:48,480 --> 00:49:52,840 Do mi reiris al RJ tie, kiu vin vidis sur la ekrano sufiĉe tempon. 1120 00:49:52,840 --> 00:49:57,160 Kaj se mi malfermos Keynote tie, tio estas kio okazas se vi provas zomi kaj 1121 00:49:57,160 --> 00:49:59,380 plibonigi RJ. 1122 00:49:59,380 --> 00:50:01,480 Li ne ricevas iun pli bone vere. 1123 00:50:01,480 --> 00:50:06,240 Nun Keynote estas speco de desdibujando ĝin iom, nur por forgliti super la 1124 00:50:06,240 --> 00:50:11,040 fakto ke RJ ne ricevas aparte plibonigita kiam vi zomi in 1125 00:50:11,040 --> 00:50:13,310 Kaj se faru ĝin tiamaniere, vidu la kvadratoj? 1126 00:50:13,310 --> 00:50:15,490 Jes, vi povas definitive vidas la kvadratoj sur projekciilo. 1127 00:50:15,490 --> 00:50:17,690 >> Tio estas kion vi akiras, kiam vi plibonigi. 1128 00:50:17,690 --> 00:50:22,570 Sed kompreni kiel nia RJ aŭ la Smiley vizaĝo implementado lasos nin 1129 00:50:22,570 --> 00:50:24,950 fakte skribi kodon kiu manipulas tion. 1130 00:50:24,950 --> 00:50:29,970 Kaj mi pensis, ke mi volas fini ĉi tiun noton, kun 55 sekundoj de plibonigi tio, 1131 00:50:29,970 --> 00:50:31,230 Mi kuraĝis, diru prefere iluzia. 1132 00:50:31,230 --> 00:50:32,990 >> [VIDEO reprodukto] 1133 00:50:32,990 --> 00:50:34,790 >> -Li mensogas. 1134 00:50:34,790 --> 00:50:38,310 Pri kio, mi ne scias. 1135 00:50:38,310 --> 00:50:41,200 >> -Do kion ni scias? 1136 00:50:41,200 --> 00:50:45,280 >> -Tio je 9:15 Ray Santoya Estis en la kasisto. 1137 00:50:45,280 --> 00:50:47,830 >> -Do la demando estas kion Estis li faras je 9:16? 1138 00:50:47,830 --> 00:50:50,750 >> -Pafado la naŭ milimetro ĉe io. 1139 00:50:50,750 --> 00:50:52,615 Eble li vidis la francotirador. 1140 00:50:52,615 --> 00:50:54,760 >> -Aŭ laboris kun li. 1141 00:50:54,760 --> 00:50:56,120 >> -Atendu. 1142 00:50:56,120 --> 00:50:57,450 Reiru tiu. 1143 00:50:57,450 --> 00:50:58,700 >> -Kion vi vidas? 1144 00:50:58,700 --> 00:51:05,530 1145 00:51:05,530 --> 00:51:09,490 >> -Alportu lian vizaĝon supren, plena ekrano. 1146 00:51:09,490 --> 00:51:09,790 >> -Lia okulvitroj. 1147 00:51:09,790 --> 00:51:11,040 >> -Tie estas reflekto. 1148 00:51:11,040 --> 00:51:21,790 1149 00:51:21,790 --> 00:51:23,520 >> -Tio estas la Neuvitas basbalo teamo. 1150 00:51:23,520 --> 00:51:24,530 Tio estas ilia logo. 1151 00:51:24,530 --> 00:51:27,040 >> -Kaj li parolas al kiu ajn estas portante ke jako. 1152 00:51:27,040 --> 00:51:27,530 >> [FINO reprodukto de vídeo] 1153 00:51:27,530 --> 00:51:29,180 >> DAVID J. Malan: Ĉi tiu volo esti Problemo Serio 5. 1154 00:51:29,180 --> 00:51:30,720 Ni vidos vin venontsemajne. 1155 00:51:30,720 --> 00:51:32,330 >> Vira parolanto: Je la sekvanta CS50. 1156 00:51:32,330 --> 00:51:39,240 >> [Griloj pepado] 1157 00:51:39,240 --> 00:51:41,270 >> [MUZIKO ludi]