1 00:00:00,000 --> 00:00:10,970 >> [Mūzikas atskaņošanas] 2 00:00:10,970 --> 00:00:12,536 >> DAVID J. Malan: Nu labi. 3 00:00:12,536 --> 00:00:13,392 >> [Smiekli] 4 00:00:13,392 --> 00:00:14,240 >> Laipni lūdzam atpakaļ. 5 00:00:14,240 --> 00:00:14,990 Tas ir CS50. 6 00:00:14,990 --> 00:00:16,890 Un šis gals no piecu nedēļu. 7 00:00:16,890 --> 00:00:20,020 Un līdz šim, mēs esam diezgan daudz lietojis par pašsaprotamu, ka 8 00:00:20,020 --> 00:00:23,480 pastāv šo kompilatoru, šķindēt, ka jūs esat ir atsaucoties veidā šis 9 00:00:23,480 --> 00:00:27,100 cits instruments, ko sauc Pārliecinieties, ka kaut maģiski pārvērš jūsu avota kodu 10 00:00:27,100 --> 00:00:31,350 uz objekta kodu, ar nullēm un tiem ka jūsu datoru CPU, centrālā 11 00:00:31,350 --> 00:00:33,410 procesors, patiesībā saprot. 12 00:00:33,410 --> 00:00:36,770 Bet izrādās, tur ir skaitlis, kas ir notiek zem motora pārsega ir 13 00:00:36,770 --> 00:00:38,690 starp ieejas un izejas. 14 00:00:38,690 --> 00:00:41,800 >> Un es gribētu ierosināt, ka mēs miesa kas veic nedaudz sīkāk stāšanās 15 00:00:41,800 --> 00:00:45,130 šie četri soļi, ir kaut ko sauc par pirmapstrāde, kaut 16 00:00:45,130 --> 00:00:48,300 sauc apkopotu, ko mēs esam redzējuši, kaut ko sauc montāža, un 17 00:00:48,300 --> 00:00:49,420 kaut ko sauc savieno. 18 00:00:49,420 --> 00:00:53,270 Tātad līdz šim, jo ​​daži no mūsu programmām, mēs esam bija asas ietver. 19 00:00:53,270 --> 00:00:56,650 Pavisam nesen mēs esam bija daži asi nosaka par konstantes. 20 00:00:56,650 --> 00:01:00,660 Tātad izrādās, ka tās lietas, kas ir prefiksu ar hash simbolu vai 21 00:01:00,660 --> 00:01:04,150 mārciņa simbols ir pre-procesors direktīvām. 22 00:01:04,150 --> 00:01:07,960 Tas ir tikai iedomātā veids, kā sakot, ka tas ir rindā kodu, kas ir faktiski 23 00:01:07,960 --> 00:01:12,280 pārveidots kaut ko citu, pirms Dators pat mēģināt pārvērst savu 24 00:01:12,280 --> 00:01:13,800 programmas uz nullēm un tiem. 25 00:01:13,800 --> 00:01:19,000 >> Piemēram, asa ietilpst standarta I / O. H, diezgan daudz tikai nozīmē iet 26 00:01:19,000 --> 00:01:24,010 priekšu, paķert saturu failiem stdio.h un ielīmēt tos tieši tur. 27 00:01:24,010 --> 00:01:25,880 Līdz ar to nav nullēm un tiem tajā brīdī vēl. 28 00:01:25,880 --> 00:01:27,470 Tas patiešām ir tikai aizstāšana. 29 00:01:27,470 --> 00:01:30,790 Un tas ir darīts laikā, tā saukto pirmapstrāde posmā, kad 30 00:01:30,790 --> 00:01:34,230 kursēt šķindēt vai īpaši Padarīt vairumā gadījumu. 31 00:01:34,230 --> 00:01:36,950 Tātad tas viss ir noticis Pirmais automātiski līdz šim. 32 00:01:36,950 --> 00:01:38,800 >> Tad nāk apkopojums solis. 33 00:01:38,800 --> 00:01:40,920 Bet mēs esam bijuši pārspīlēti apkopošana. 34 00:01:40,920 --> 00:01:45,060 Sastādīšanas programmu īsti nozīmē ņemt to no kaut kā C, 35 00:01:45,060 --> 00:01:48,430 Pirmkods mēs esam rakstot uz leju lai kaut ko sauc par montāžu. 36 00:01:48,430 --> 00:01:52,900 Asambleja valoda ir zemāks līmenis valoda, kas, par laimi, mums nebūs 37 00:01:52,900 --> 00:01:55,480 ir daudz iespēju, lai rakstīt šajā semestrī. 38 00:01:55,480 --> 00:01:59,100 Bet tas ir zemākajā līmenī Apziņa, ka tu burtiski sākt rakstīt 39 00:01:59,100 --> 00:02:04,270 pievienot un atņemt un reizināt un slodzes no atmiņas un saglabāt atmiņā, 40 00:02:04,270 --> 00:02:08,259 Ļoti pamata norādījumus, ka dators, zem motora pārsega, 41 00:02:08,259 --> 00:02:09,639 tiešām saprot. 42 00:02:09,639 --> 00:02:14,930 >> Visbeidzot, montāža uzskata, ka šī valoda ar nullēm un tiem, kas mēs esam bijuši 43 00:02:14,930 --> 00:02:16,190 apraksta līdz šim. 44 00:02:16,190 --> 00:02:19,270 Un patiesi visbeidzot, tur ir tā sauktā saistot posms, kuru mēs 45 00:02:19,270 --> 00:02:22,360 redzēt tikai brīdi, kas apvieno Jūsu nullēm un tiem, ar nullēm un 46 00:02:22,360 --> 00:02:24,870 tiem citiem cilvēkiem, pirms esat izveidojis. 47 00:02:24,870 --> 00:02:26,660 >> Tāpēc uzskatu šo super vienkāršu programmu. 48 00:02:26,660 --> 00:02:27,560 Tas bija no 1 nedēļas. 49 00:02:27,560 --> 00:02:29,610 Tas tikko teica, Hello World, uz ekrāna. 50 00:02:29,610 --> 00:02:30,920 Mums bija tas, izmantojot šķindēt. 51 00:02:30,920 --> 00:02:33,200 Vai mums bija to caur Make kas ilga šķindēt. 52 00:02:33,200 --> 00:02:36,170 Un izvadīt tajā laikā, kad daži nullēm un tiem. 53 00:02:36,170 --> 00:02:38,100 Bet izrādās, tur ir starpposms. 54 00:02:38,100 --> 00:02:40,460 Ja es iet pār šeit - Hmm, nav gribu redzēt viņu vēl. 55 00:02:40,460 --> 00:02:44,800 Ja es iet pār šeit manā ierīces un es atvērt hello.c, šeit 56 00:02:44,800 --> 00:02:46,160 ir tā, ka tas pats programma. 57 00:02:46,160 --> 00:02:48,600 Un ko es esmu gatavojas darīt manā terminālī logs šeit es esmu gatavojas 58 00:02:48,600 --> 00:02:51,430 palaist šķindēt nevis Marka, kas automatizē visas četras 59 00:02:51,430 --> 00:02:52,870 šie soļi mums. 60 00:02:52,870 --> 00:02:58,620 Un es esmu gatavojas darīt, šķindēt-S un tad hello.c un pēc tam ievadiet. 61 00:02:58,620 --> 00:03:00,590 >> Un man mirgo ātri atkal, kas ir labs. 62 00:03:00,590 --> 00:03:05,280 Un tagad nedaudz lielāku logu, Es esmu gatavojas atvērt gedit šeit. 63 00:03:05,280 --> 00:03:09,610 Un es esmu gatavojas atvērt failu, kas, Izrādās, sauc hello.s šis 64 00:03:09,610 --> 00:03:11,870 ir, ka montāžas valodā Es minēju iepriekš. 65 00:03:11,870 --> 00:03:15,060 Un tas ir tas, ko sauc montāža valoda, diezgan zems līmenis 66 00:03:15,060 --> 00:03:18,470 instrukcijas, ka jūsu Intel CPU vai kāds tas ir tas, kas ir iekšā 67 00:03:18,470 --> 00:03:19,350 saprot. 68 00:03:19,350 --> 00:03:24,480 Un mov ir kustībā. zvans ir zvana, ļoti zema līmeņa funkcijas. 69 00:03:24,480 --> 00:03:26,380 sub ir atņemt. 70 00:03:26,380 --> 00:03:30,370 >> Tātad, ja jums ir īpaša CPU iekšpusē no datora, kas padara to 71 00:03:30,370 --> 00:03:34,300 atšķirīgas, salīdzinot ar citiem CPU uz tirgū, ir kas norādījumi to 72 00:03:34,300 --> 00:03:39,460 saprot un bieži, cik efektīvs tas ir, cik ātri tas ir pie izpildes daži 73 00:03:39,460 --> 00:03:40,380 šo norādījumu. 74 00:03:40,380 --> 00:03:45,150 Tagad vairāk par šo, jūs varat veikt Nākamais Fall CS61 koledžā. 75 00:03:45,150 --> 00:03:48,170 Bet šeit mums ir, piemēram, daži identifikatori, kas varētu izskatās pazīstami. 76 00:03:48,170 --> 00:03:50,150 hello.c ir programmas nosaukums. 77 00:03:50,150 --> 00:03:51,070 >> . Teksts - 78 00:03:51,070 --> 00:03:54,190 tur nav daudz interese tur tikai tagad, atgādināt, ka teksts 79 00:03:54,190 --> 00:03:59,190 segments, kas pirmdien, ir kur atmiņas jūsu programma faktiski beidzas up. 80 00:03:59,190 --> 00:04:01,330 Tātad tas ir vismaz neskaidri pazīstams tur. 81 00:04:01,330 --> 00:04:03,730 Šeit, protams, ir pieminēts Mūsu galvenā funkcija. 82 00:04:03,730 --> 00:04:07,220 Ritinot uz leju, tie attiecas uz lietām saucamie reģistri, ir ļoti mazas gabalos 83 00:04:07,220 --> 00:04:09,190 atmiņas iekšpusē jūsu faktisko CPU. 84 00:04:09,190 --> 00:04:12,930 Un, ja es ritiniet uz leju, pat turklāt, es redzu kaut kādu 85 00:04:12,930 --> 00:04:14,240 netieša norāde ASCII. 86 00:04:14,240 --> 00:04:17,120 Un tur, protams, ir tas, ka virkne, Sveiki, komats, pasaule. 87 00:04:17,120 --> 00:04:20,079 >> Tik garš stāsts īss, tas ir bijis notiek, lai jūs, automātiski, 88 00:04:20,079 --> 00:04:22,140 zem motora pārsega visu šo laiku. 89 00:04:22,140 --> 00:04:26,450 Un to, kas noticis patiesībā ir vienreiz Jūs esat palaist šķindēt, vai ar 90 00:04:26,450 --> 00:04:29,150 Marka, jūs saņemat pirmo reizi, no avota kodu, 91 00:04:29,150 --> 00:04:30,700 tā saukto montāža valoda. 92 00:04:30,700 --> 00:04:35,210 Tad šķindēt ir pārvērst šo komplektu valoda līdz nullēm un tiem. 93 00:04:35,210 --> 00:04:38,340 Un tas ir slaids, ka mēs sākām Mūsu diskusija nedēļa 0 par - 94 00:04:38,340 --> 00:04:39,840 un pēc tam nedēļa 1 uz. 95 00:04:39,840 --> 00:04:44,030 Un tad beidzot, tie nullēm un tiem tiek apvienoti ar nullēm un tiem 96 00:04:44,030 --> 00:04:47,190 No šīm bibliotēkām, mēs esam bijuši ņemot par pašsaprotamu, piemēram, Standard I / O vai 97 00:04:47,190 --> 00:04:50,010 Stīgu bibliotēka vai pat CS50 bibliotēka. 98 00:04:50,010 --> 00:04:54,200 >> Tātad, lai krāsu šo attēlu vairāk vizuāli, mēs esam hello.c. 99 00:04:54,200 --> 00:04:57,220 Un tas, protams, izmanto printf darboties teikt, hello pasaule. 100 00:04:57,220 --> 00:05:01,810 Apkopošana solis ņem to uz leju, lai ka fails mēs tikko redzējām hello.s, pat 101 00:05:01,810 --> 00:05:04,290 lai gan tas ir parasti svītrots automātiski jums. 102 00:05:04,290 --> 00:05:06,050 Bet tas ir montāža kodu vidū soli. 103 00:05:06,050 --> 00:05:09,750 Un tad, kad mēs montēt montāžas valoda, tā sakot, tas ir, kad jūs 104 00:05:09,750 --> 00:05:10,830 saņemt šos nullēm un tiem,. 105 00:05:10,830 --> 00:05:13,920 Tāpēc mēs esam pietuvināto efektīvi šodien kādi mēs esam, ņemot par pašsaprotamu, 106 00:05:13,920 --> 00:05:16,430 nozīmē iet pirmkodu iebilst kodu. 107 00:05:16,430 --> 00:05:18,850 >> Bet visbeidzot, tagad tas pats attēls - pieņemsim bāzt to pa 108 00:05:18,850 --> 00:05:20,020 kreisajā pusē. 109 00:05:20,020 --> 00:05:22,880 Un atzīmēt, ka uz augšu tur Es teicu stdio.h. 110 00:05:22,880 --> 00:05:25,030 Tas ir fails, kas mēs esam iekļāvuši jo gandrīz visi no 111 00:05:25,030 --> 00:05:26,250 programmas, mēs esam rakstiski. 112 00:05:26,250 --> 00:05:28,830 Un tas ir fails, kura saturs saņemt kopiju ielīmēts, 113 00:05:28,830 --> 00:05:30,350 efektīvi atop jūsu kodu. 114 00:05:30,350 --> 00:05:34,170 Bet izrādās, ka uz datora sistēma kaut kur, tur ir iespējams 115 00:05:34,170 --> 00:05:39,150 stdio.c failu, ka kāds rakstīja gadiem Pirms kas īsteno visas 116 00:05:39,150 --> 00:05:41,870 funkcijas, kas bija paziņojuši in stdio.h. 117 00:05:41,870 --> 00:05:45,465 >> Tagad patiesībā tas droši vien nav jūsu Mac vai jūsu datoru vai pat 118 00:05:45,465 --> 00:05:47,660 CS50 ierīce ir neapstrādātu C kodu. 119 00:05:47,660 --> 00:05:52,710 Kāds jau ir apkopoti, un iekļauti . O failu, lai objekta kodu vai. 120 00:05:52,710 --> 00:05:56,020 failu, kas attiecas uz kopīgu bibliotēka kas ir bijis iepriekš instalēta un 121 00:05:56,020 --> 00:05:57,240 iepriekš apkopota par jums. 122 00:05:57,240 --> 00:06:01,950 Bet pieņemsim, ka tur tiešām pastāv uz mūsu datora stdio.c paralēli 123 00:06:01,950 --> 00:06:02,650 ar šķindēt. 124 00:06:02,650 --> 00:06:04,960 Jūsu kods ir tiek apkopoti un samontēti. 125 00:06:04,960 --> 00:06:09,200 stdio.c 's kods tiek apkopoti un samontēti, tā, ka šis ļoti pēdējais 126 00:06:09,200 --> 00:06:13,730 solis, šeit lejā, mums ir kaut kā saikne, tā sakot, jūsu nullēm un tiem 127 00:06:13,730 --> 00:06:18,430 Ar viņa vai viņas nullēm un tiem vienā vienkārša programma, kas galu galā ir 128 00:06:18,430 --> 00:06:20,540 sauc vienkārši Sveiki. 129 00:06:20,540 --> 00:06:23,340 >> Tātad tas ir visu burvju, kas ir noticis līdz šim. 130 00:06:23,340 --> 00:06:26,430 Un turpinās ņemt tos procesi piešķirta, bet saprast, 131 00:06:26,430 --> 00:06:28,750 tur ir sulīgs detaļas partijas notiek zem tur. 132 00:06:28,750 --> 00:06:31,920 Un tas ir tas, kas padara jūsu dators ar Intel iekšpusē 133 00:06:31,920 --> 00:06:33,940 Īpaši atšķirīga. 134 00:06:33,940 --> 00:06:37,020 >> Tātad uz šo piezīmi, ja jūs vēlētos, lai pievienoties mums pusdienās šo piektdien, iet 135 00:06:37,020 --> 00:06:41,570 uz parasto vietu cs50.net/rsvp, 13:15 šo piektdien. 136 00:06:41,570 --> 00:06:43,400 Un tagad daži paziņojumi. 137 00:06:43,400 --> 00:06:44,670 Tāpēc mums ir dažas labas ziņas. 138 00:06:44,670 --> 00:06:45,970 Un mums ir dažas sliktas ziņas. 139 00:06:45,970 --> 00:06:47,260 Sākt ar dažas labas ziņas šeit. 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 >> Labi. 143 00:06:54,710 --> 00:06:56,670 Nu, tas ir tehniski brīvdiena, tāpēc tas nav tik daudz dāvanu no mums. 144 00:06:56,670 --> 00:06:58,030 Bet tad sliktas ziņas, protams. 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 >> Es pavadīju daudz laika par šiem animāciju. 148 00:07:03,530 --> 00:07:04,690 >> [Smiekli] 149 00:07:04,690 --> 00:07:07,000 >> Būs pārskats sesija šo nāk pirmdiena. 150 00:07:07,000 --> 00:07:08,340 Tas būs at 5:30. 151 00:07:08,340 --> 00:07:11,210 Mēs atgādinās jums visu šo informāciju pa e-pastu par kursu ir 152 00:07:11,210 --> 00:07:13,470 mājas lapā tikai pāris dienu laikā. 153 00:07:13,470 --> 00:07:16,610 Tā tiks filmētas un pieejami neilgi pēc tam. 154 00:07:16,610 --> 00:07:19,200 Tātad, ja jūs nevarat darīt, ka pirmdiena nakts slots, neuztraucieties. 155 00:07:19,200 --> 00:07:22,270 Sekcijas šo nāk šonedēļ būs arī koncentrēties uz pārskatīšanu attiecībā uz viktorīnas. 156 00:07:22,270 --> 00:07:25,670 Ja jūsu sekcija ir uz Monday, kas ir patiešām universitātes brīvdienu, mēs 157 00:07:25,670 --> 00:07:26,920 joprojām atbilst sadaļā. 158 00:07:26,920 --> 00:07:28,890 Ja jūs vienkārši nevar darīt, ka sadaļā, jo jūs gatavojas 159 00:07:28,890 --> 00:07:29,860 prom, tas ir jauki. 160 00:07:29,860 --> 00:07:33,710 Apmeklēt svētdiena vai otrdiena sadaļu vai tune-in uz Jason daļā, kas ir 161 00:07:33,710 --> 00:07:35,110 pieejami tiešsaistē. 162 00:07:35,110 --> 00:07:37,490 >> Tātad, vairāk sliktas ziņas. 163 00:07:37,490 --> 00:07:41,960 Tātad, saskaņā ar to mācību programmu, mums ir lekciju nākamajā piektdienā. 164 00:07:41,960 --> 00:07:43,690 Bet laba ziņa - 165 00:07:43,690 --> 00:07:44,860 skaidri, es pavadīju pārāk daudz laika uz to. 166 00:07:44,860 --> 00:07:45,280 >> [Smiekli] 167 00:07:45,280 --> 00:07:47,140 >> Mēs atcelt nākamās piektdienas lekcijas. 168 00:07:47,140 --> 00:07:50,590 Tā, ka būs dāvana mums, lai jūs tiešām var būt jauka atelpu 169 00:07:50,590 --> 00:07:52,990 starp šo un divām nedēļām līdz ar to. 170 00:07:52,990 --> 00:07:57,460 Līdz ar to nav lekcijas nākamnedēļ, tikai niecīga neliela viktorīna, par kuru jums ir jābūt 171 00:07:57,460 --> 00:07:59,030 kļūst arvien satraukti. 172 00:07:59,030 --> 00:08:03,870 >> Tātad, pieņemsim tagad savukārt mūsu uzmanību uz kaut kas patiešām ir daudz vizuāli 173 00:08:03,870 --> 00:08:06,990 un vairāk aizraujošu, un, lai noteiktu posmu par to, kas notiek, ir uz horizonta 174 00:08:06,990 --> 00:08:08,420 tikai pāris nedēļu laikā. 175 00:08:08,420 --> 00:08:12,160 Pēc pirmā viktorīnu, mēs savukārt koncentrēt mūsu problēmu kopas uz otru 176 00:08:12,160 --> 00:08:16,710 domēna specifiska problēma, ka no kriminālistikas vai drošības plašākā nozīmē. 177 00:08:16,710 --> 00:08:19,550 >> Faktiski, tradīcija ar šo problēmu komplekts ir man viens no 178 00:08:19,550 --> 00:08:24,850 mācīšanas kolēģiem vai CAS staigāt pa Campus veikt dažas fotogrāfijas 179 00:08:24,850 --> 00:08:29,450 identificējami, bet nav skaidrs cilvēki, vietas, vai lietas, tad katru gadu es 180 00:08:29,450 --> 00:08:34,520 kaut kā izdodas nejauši izdzēstu vai korumpēti digitālo mediju kartes 181 00:08:34,520 --> 00:08:35,720 kas ir iekšpusē mūsu kameru. 182 00:08:35,720 --> 00:08:36,860 Bet nav liels darījumu. 183 00:08:36,860 --> 00:08:39,200 Es varu iet uz priekšu un pievienojiet ka manā datorā. 184 00:08:39,200 --> 00:08:43,010 Es varu veikt tiesu tēlu tā, lai runāt, kopējot nullēm un 185 00:08:43,010 --> 00:08:46,830 tiem nost no šīs atmiņas kartes, neatkarīgi no tā, tā SD kartes vai kompaktu flash karti vai 186 00:08:46,830 --> 00:08:48,100 ko jūs esat iepazinušies ar. 187 00:08:48,100 --> 00:08:49,300 Un tad mēs varam nodot, ka out. 188 00:08:49,300 --> 00:08:53,190 >> Un tā uzdevums būs, cita starpā lietas, jums būs rakstīt 189 00:08:53,190 --> 00:08:58,630 C kodu, kas atjauno visu ķekars JPEG par mani un atklāja būs 190 00:08:58,630 --> 00:09:00,190 tie cilvēki, vietas vai lietas. 191 00:09:00,190 --> 00:09:03,340 Un mēs arī runājam, jo ​​šo problēmu noteikt un kas dienas nākt, par 192 00:09:03,340 --> 00:09:04,440 grafikas kopumā. 193 00:09:04,440 --> 00:09:06,140 Mēs esam izmanto tos, kursu, lai izcelties. 194 00:09:06,140 --> 00:09:09,080 Bet jūs esat veida pašsaprotama pastāv šie augsta līmeņa jēdzieni 195 00:09:09,080 --> 00:09:10,680 taisnstūri un ovāla. 196 00:09:10,680 --> 00:09:12,450 Bet zem motora pārsega tur ir pikseļi. 197 00:09:12,450 --> 00:09:14,370 Un jums ir bijis jāsāk domāt par tiem. 198 00:09:14,370 --> 00:09:18,800 Vai jūs par p-set 4 jādomā par plaisu starp jūsu ķieģeļiem, kā 199 00:09:18,800 --> 00:09:21,990 ātri jūs bumba pārvietojas ekrāns izcelties. 200 00:09:21,990 --> 00:09:24,830 Tātad ir šis jēdziens punktiņi uz ekrāna, kas ir 201 00:09:24,830 --> 00:09:26,290 stāties spēlēt jau. 202 00:09:26,290 --> 00:09:29,430 >> Tagad to, ko jūs redzat, lai gan, ir tas, ko jums uz datora ekrāna. 203 00:09:29,430 --> 00:09:33,680 Ja esat kādreiz noskatījos dažas labas vai slikts TV, izredzes ir tie diezgan daudz 204 00:09:33,680 --> 00:09:36,280 pret auditoriju, piemēram, technophobes kas nav īsti 205 00:09:36,280 --> 00:09:37,630 zina daudz par datoru. 206 00:09:37,630 --> 00:09:40,840 Un tāpēc tas ir ļoti viegli, lai policijas detektīvs teikt, jūs varat 207 00:09:40,840 --> 00:09:41,710 tīrs, ka par mani? 208 00:09:41,710 --> 00:09:42,710 Vai uzlabot, labi? 209 00:09:42,710 --> 00:09:45,550 Uzlabot ir kā buzz vārdu lielākā daļa jebkuru noziegumu saistītu šovs. 210 00:09:45,550 --> 00:09:49,240 Un realitāte ir tāda, ja Jūs lietojat ļoti izplūdis attēls Aizdomās turētā dara 211 00:09:49,240 --> 00:09:51,620 kaut kas slikts, jūs nevarat tikai uzlabot to. 212 00:09:51,620 --> 00:09:53,080 Jūs nevarat tuvinātu bezgalīgi. 213 00:09:53,080 --> 00:09:56,350 Jūs nevarat redzēt mirdzumu un kāds ir acs, kas ir apņēmusies, ka 214 00:09:56,350 --> 00:09:59,860 īpaši noziegumu, neskatoties izplatība šo par TV. 215 00:09:59,860 --> 00:10:04,110 >> Un tā ar to pieņemsim motivēt, ka gaidāmās problēmas, kas ar ieskatu 216 00:10:04,110 --> 00:10:05,765 daži rāda, ar kuru jums varētu būt pazīstami. 217 00:10:05,765 --> 00:10:06,500 >> [VIDEO PLAYBACK] 218 00:10:06,500 --> 00:10:07,835 >> -Labi. 219 00:10:07,835 --> 00:10:09,956 Tagad, pieņemsim iegūt labu apskatīt jums. 220 00:10:09,956 --> 00:10:17,060 221 00:10:17,060 --> 00:10:17,766 >> -Turiet to. 222 00:10:17,766 --> 00:10:18,658 Palaist šo atpakaļ. 223 00:10:18,658 --> 00:10:19,550 >> -Pagaidiet minūti. 224 00:10:19,550 --> 00:10:21,580 Iet labi. 225 00:10:21,580 --> 00:10:21,800 >> -Tur. 226 00:10:21,800 --> 00:10:22,690 Iesaldēt to. 227 00:10:22,690 --> 00:10:23,692 >> -Full screen. 228 00:10:23,692 --> 00:10:23,846 >> -Labi. 229 00:10:23,846 --> 00:10:24,154 Iesaldēt to. 230 00:10:24,154 --> 00:10:25,140 >> -Pastiprināt par to, kas ya? 231 00:10:25,140 --> 00:10:27,090 >> -Vector kas par šo puisis ar aizmugurējo riteni. 232 00:10:27,090 --> 00:10:29,730 >> -Zoom in tepat šajā vietā. 233 00:10:29,730 --> 00:10:33,700 >> -Ar pareizo aprīkojumu, imaged var tikt paplašināta un asumu. 234 00:10:33,700 --> 00:10:34,490 >> -Kas tas ir? 235 00:10:34,490 --> 00:10:35,870 >> -Tā ir veicināšanas programma. 236 00:10:35,870 --> 00:10:36,793 >> -Vai jums ir skaidrs, ka līdz jebkurš? 237 00:10:36,793 --> 00:10:38,560 >> -Es nezinu. 238 00:10:38,560 --> 00:10:39,090 Pieņemsim uzlabot to. 239 00:10:39,090 --> 00:10:41,690 >> -Uzlabot apakšpunktu-6. 240 00:10:41,690 --> 00:10:43,510 >> -Es uzlabota detalizēti un - 241 00:10:43,510 --> 00:10:44,456 >> -Es domāju, ka tur ir pietiekami daudz, lai uzlabotu. 242 00:10:44,456 --> 00:10:45,402 Atlaidiet to uz mana ekrāna. 243 00:10:45,402 --> 00:10:47,300 >> -Uzlabot pārdomas viņas acīs. 244 00:10:47,300 --> 00:10:49,330 >> -Let 's palaist to caur video uzlabošanu. 245 00:10:49,330 --> 00:10:50,340 >> -Edgar, jūs varat uzlabot šo? 246 00:10:50,340 --> 00:10:52,320 >> -Hang on. 247 00:10:52,320 --> 00:10:54,290 >> -I've strādājuši pie šī pārdomām. 248 00:10:54,290 --> 00:10:55,560 >> -Kāds ir pārdomas. 249 00:10:55,560 --> 00:10:56,440 >> -Reflection. 250 00:10:56,440 --> 00:10:57,940 >> -Tur ir pārdomas no cilvēka sejas. 251 00:10:57,940 --> 00:10:58,860 >> -Pārdomas. 252 00:10:58,860 --> 00:10:59,710 >> -Tur ir pārdomas. 253 00:10:59,710 --> 00:11:00,900 >> -Zoom in uz spoguļa. 254 00:11:00,900 --> 00:11:03,500 >> -Jūs varat redzēt pārdomas. 255 00:11:03,500 --> 00:11:04,700 >> -Vai jūs varat uzlabot attēlu no šejienes? 256 00:11:04,700 --> 00:11:05,700 >> -Vai jūs varat uzlabot viņu tieši šeit? 257 00:11:05,700 --> 00:11:06,500 >> -Vai jūs uzlabot to? 258 00:11:06,500 --> 00:11:07,380 >> -Vai jūs uzlabot to? 259 00:11:07,380 --> 00:11:08,190 >> -Vai mēs varam uzlabot šo? 260 00:11:08,190 --> 00:11:08,940 >> -Vai jūs uzlabot to? 261 00:11:08,940 --> 00:11:10,280 >> -Turies, otrkārt, es ņemšu uzlabot. 262 00:11:10,280 --> 00:11:11,570 >> -Zoom in pie durvīm. 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 >> [Smiekli] 266 00:11:13,197 --> 00:11:14,360 >> -Pārvietot collas 267 00:11:14,360 --> 00:11:15,100 >> -Pagaidiet, stop. 268 00:11:15,100 --> 00:11:15,740 >> -Stop. 269 00:11:15,740 --> 00:11:16,290 >> -Pauze to. 270 00:11:16,290 --> 00:11:19,390 >> -Pagriezt par 75 grādiem ap vertikālā lūdzu. 271 00:11:19,390 --> 00:11:19,886 >> [Smiekli] 272 00:11:19,886 --> 00:11:24,350 >> -Stop, un atpakaļ uz to daļu par durvīm atkal. 273 00:11:24,350 --> 00:11:26,330 >> -Got attēlu pastiprinātāju kas var bitmap? 274 00:11:26,330 --> 00:11:28,990 >> -Varbūt mēs varam izmantot Pradeep Sen metode, lai redzētu uz logiem. 275 00:11:28,990 --> 00:11:30,680 >> -Šī programmatūra ir state of the art. 276 00:11:30,680 --> 00:11:31,676 >> -Ikona vērtība ir izslēgts. 277 00:11:31,676 --> 00:11:34,166 >> -Ar pareizo kombināciju algoritmu. 278 00:11:34,166 --> 00:11:38,399 >> -Viņš ir pieņemts apgaismošanas algoritmus nākamais līmenis, un es tos var izmantot, lai 279 00:11:38,399 --> 00:11:38,648 uzlabot šo fotogrāfiju. 280 00:11:38,648 --> 00:11:42,050 >> -Lock tālāk un palielinātu z ass. 281 00:11:42,050 --> 00:11:42,760 >> -Uzlabot. 282 00:11:42,760 --> 00:11:43,060 >> -Uzlabot. 283 00:11:43,060 --> 00:11:43,760 >> -Uzlabot. 284 00:11:43,760 --> 00:11:45,010 >> -Freeze un uzlabot. 285 00:11:45,010 --> 00:11:47,470 286 00:11:47,470 --> 00:11:47,910 >> [END VIDEO PLAYBACK] 287 00:11:47,910 --> 00:11:51,470 >> DAVID J. Malan: Tātad problēma Set 5 ir tas, kas ir priekšā tur. 288 00:11:51,470 --> 00:11:55,260 Tāpēc mēs drīz saņemt labāku izpratni par to, kad un kāpēc jūs varat 289 00:11:55,260 --> 00:11:57,300 un mūsu nevar uzlabot šādā veidā. 290 00:11:57,300 --> 00:12:00,090 Bet vispirms, pieņemsim atgriezties mūsu uzmanību dažiem no pamatelementiem Mēs 291 00:12:00,090 --> 00:12:02,250 ir nepieciešams, lai varētu pateikt, ka stāsts. 292 00:12:02,250 --> 00:12:05,580 >> Tāpēc atgādinām, ka mēs vērsa šo attēlu uz Pirmdienās un mazliet pagājušajā nedēļā. 293 00:12:05,580 --> 00:12:09,970 Un tas raksturo izkārtojumu lietas jūsu datora atmiņā, kad 294 00:12:09,970 --> 00:12:11,000 darbojas dažas programmas. 295 00:12:11,000 --> 00:12:14,310 Tech segments up top, atsaukšana, attiecas faktiskajām nullēm un tiem 296 00:12:14,310 --> 00:12:16,000 , kas veido savu programmu. 297 00:12:16,000 --> 00:12:19,340 Tur, tālāk, ka daži formatēti vai neinicializētām dati, kas parasti 298 00:12:19,340 --> 00:12:22,910 attiecas uz lietām, piemēram, konstantēm vai virknes vai globālie mainīgie, kas ir 299 00:12:22,910 --> 00:12:24,200 pasludināts iepriekš. 300 00:12:24,200 --> 00:12:26,500 Tur ir kaudze, bet mēs būsim atpakaļ uz ka ir mazliet. 301 00:12:26,500 --> 00:12:27,410 >> Un tad tur ir kaudze. 302 00:12:27,410 --> 00:12:30,660 Daudz, piemēram, kaudze paplātes ar kafejnīca, tas ir, ja atmiņa izpaužas 303 00:12:30,660 --> 00:12:33,610 kārtains un kārtojumu, kad Jūs darīt to, kas programmā? 304 00:12:33,610 --> 00:12:36,380 305 00:12:36,380 --> 00:12:37,730 Kas ir kaudze izmantošana? 306 00:12:37,730 --> 00:12:39,320 >> Yeah? 307 00:12:39,320 --> 00:12:40,000 >> Call of funkciju. 308 00:12:40,000 --> 00:12:42,890 Katru reizi, kad jūs zvanu funkciju, tas ir dota skaida atmiņas par tās 309 00:12:42,890 --> 00:12:45,020 vietējās mainīgie un to parametri. 310 00:12:45,020 --> 00:12:48,810 Un gleznieciski, mēs redzam, ka ar katru secīgi funkciju sauc, kad 311 00:12:48,810 --> 00:12:52,520 prasa B zvani C prasa D, tie get kārtains uz kaudzīti. 312 00:12:52,520 --> 00:12:55,630 Un katrā no šīm šķēles atmiņa ir būtībā unikāls joma 313 00:12:55,630 --> 00:12:58,590 šo funkciju, kas, protams, ir problemātiska, ja jūs vēlaties, lai roku 314 00:12:58,590 --> 00:13:01,850 no vienas funkcijas uz citu gabals gada datiem, kurus vēlaties to 315 00:13:01,850 --> 00:13:03,500 mutācijas vai mainīt. 316 00:13:03,500 --> 00:13:08,060 >> Tātad, kāds bija mūsu risinājums ļautu Funkcija pārstāv viens kaudze 317 00:13:08,060 --> 00:13:11,390 rāmis, lai mainītu atmiņu iekšpusē cita kaudze rāmja? 318 00:13:11,390 --> 00:13:14,590 Kā šie divi runāt viens ar otru? 319 00:13:14,590 --> 00:13:18,510 Tātad, kā norādes un adreses, kas, atkal, vienkārši aprakstīt, kur 320 00:13:18,510 --> 00:13:22,280 atmiņu, atkāpjoties no īpaša sakodiens skaits, īpaši 321 00:13:22,280 --> 00:13:23,830 vērtību var atrast. 322 00:13:23,830 --> 00:13:26,860 Tik atceros pēdējo reizi, pārāk mēs turpinājām stāstu un paskatījās 323 00:13:26,860 --> 00:13:28,280 diezgan buggy programmu. 324 00:13:28,280 --> 00:13:32,900 Un šī programma ir buggy par maz iemeslu dēļ, bet visvairāk satraucoša viens ir 325 00:13:32,900 --> 00:13:34,620 jo tas neizdodas, lai pārbaudītu to, ko? 326 00:13:34,620 --> 00:13:39,111 327 00:13:39,111 --> 00:13:40,450 >> Jā, tas neizdodas, lai pārbaudītu ievadi. 328 00:13:40,450 --> 00:13:41,870 Žēl? 329 00:13:41,870 --> 00:13:43,880 >> Ja tas ir vairāk nekā 12 rakstzīmes. 330 00:13:43,880 --> 00:13:47,260 Tik ļoti gudri, zvanot memcopy, kas, kā norāda nosaukums, vienkārši 331 00:13:47,260 --> 00:13:50,630 kopijas atmiņas no tās otro argumentu par savu pirmo argumentu. 332 00:13:50,630 --> 00:13:54,730 Trešais arguments, ļoti gudri, ir jāpārbauda, ​​lai pārliecinātos, ka jums nav 333 00:13:54,730 --> 00:13:59,400 kopēt vairāk nekā, šajā gadījumā, garumu no bāra, rakstzīmju skaitu, 334 00:13:59,400 --> 00:14:03,810 uz mērķa, kas ir šī masīvs C. Bet problēma ir tā, ka tas, ko 335 00:14:03,810 --> 00:14:07,230 ja C pats par sevi nav pietiekami liels rīkoties, ka? 336 00:14:07,230 --> 00:14:09,900 Jūs esat gatavojas kopēt skaitu baiti, ka jums ir dota. 337 00:14:09,900 --> 00:14:13,040 Bet ko jūs tiešām ir vairāk baiti, nekā jums ir telpa? 338 00:14:13,040 --> 00:14:16,770 >> Nu, šī programma ir ļoti muļķīgi vienkārši akli ieņēmumus, lai kāda tā ir 339 00:14:16,770 --> 00:14:20,650 ņemot vērā, sveiki slīpsvītru 0 ir lieliski, ja virkne ir īsa 340 00:14:20,650 --> 00:14:22,040 pietiekami, piemēram, pieci simboli. 341 00:14:22,040 --> 00:14:26,470 Bet, ja tas ir faktiski 12 rakstzīmēm vai 1200 rakstu zīmes, mēs redzējām pēdējo reizi 342 00:14:26,470 --> 00:14:29,380 ka jūs tikai gatavojas pilnībā pārrakstīt atmiņu, 343 00:14:29,380 --> 00:14:30,470 nepieder jums. 344 00:14:30,470 --> 00:14:34,390 Un sliktākajā gadījumā, ja jūs pārrakstīt, ka sarkanā daļa tur, ka mēs saucām 345 00:14:34,390 --> 00:14:35,380 atpakaļ adresi - 346 00:14:35,380 --> 00:14:38,370 tas ir tikai, ja dators automātiski, lai jūs, aiz 347 00:14:38,370 --> 00:14:43,130 ainas, tucks prom 32 bitu vērtība, kas atgādina to, ko adresi vajadzētu 348 00:14:43,130 --> 00:14:47,080 atgriezties, kad foo, tas citas funkcijas, tiek darīts izpildes. 349 00:14:47,080 --> 00:14:49,320 Tas ir maizes druskas par veidu uz kura tas atgriež. 350 00:14:49,320 --> 00:14:52,490 Ja jūs pārrakstīt, ka, iespējams, ja tu esi slikts puisis, iespējams, varētu 351 00:14:52,490 --> 00:14:54,750 iespējams pārņemt kāds dators. 352 00:14:54,750 --> 00:14:58,020 Un jūs visvairāk noteikti crash to vairumā gadījumu. 353 00:14:58,020 --> 00:15:01,690 >> Tagad šī problēma bija tikai saasināja kā mēs sākām runāt par atmiņu 354 00:15:01,690 --> 00:15:03,010 pārvaldību kopumā. 355 00:15:03,010 --> 00:15:07,150 Un malloc, atmiņas sadali, ir funkcija, ka mēs varam izmantot, lai sadalītu 356 00:15:07,150 --> 00:15:11,260 atmiņas, kad mēs nezinām iepriekš ka mēs varētu nepieciešama zināma. 357 00:15:11,260 --> 00:15:13,960 Tātad, piemēram, ja es iet atpakaļ pie ierīces šeit. 358 00:15:13,960 --> 00:15:21,010 Un es atvērt no pagājušā laika hello2.c, atceros šo programmu šeit, kas izskatījās 359 00:15:21,010 --> 00:15:23,500 mazliet kaut kas līdzīgs šim, tikai trīs līnijas - 360 00:15:23,500 --> 00:15:27,940 norādiet savu vārdu, tad virkne vārdu, Kreisajā pusē ir vienāds getstring. 361 00:15:27,940 --> 00:15:29,690 Un tad mēs to izdrukāt, lietotāja vārds. 362 00:15:29,690 --> 00:15:31,170 >> Tātad tas bija super vienkārša programma. 363 00:15:31,170 --> 00:15:34,870 Lai būtu skaidrs, ļaujiet man iet uz priekšu un padarīt sveiki-2. 364 00:15:34,870 --> 00:15:36,680 Es esmu gatavojas darīt, dot slīpsvītru sveiki-2. 365 00:15:36,680 --> 00:15:37,750 Norādiet savu vārdu - 366 00:15:37,750 --> 00:15:38,140 Deivids. 367 00:15:38,140 --> 00:15:38,840 Enter. 368 00:15:38,840 --> 00:15:39,540 Sveiki David. 369 00:15:39,540 --> 00:15:41,060 Tas, šķiet, darbojas OK. 370 00:15:41,060 --> 00:15:43,140 Bet to, kas īsti notiek zem pārsega šeit? 371 00:15:43,140 --> 00:15:44,670 Vispirms pieņemsim mizu atpakaļ dažiem slāņiem. 372 00:15:44,670 --> 00:15:48,380 String ir tikai sinonīms mēs esam saprata, par ko? 373 00:15:48,380 --> 00:15:49,110 Char zvaigzne. 374 00:15:49,110 --> 00:15:52,740 Tātad, pieņemsim padarīt to nedaudz vairāk mistiskā bet vairāk tehniski pareizi, ka šis 375 00:15:52,740 --> 00:15:55,570 ir char zvaigzne, kas nozīmē, ka nosaukums, jā, ir mainīgs. 376 00:15:55,570 --> 00:15:59,920 Bet ko vārds veikali ir adrese char, kas jūtas mazliet dīvaini 377 00:15:59,920 --> 00:16:01,050 tāpēc, ka es saņemu atpakaļ virkni. 378 00:16:01,050 --> 00:16:03,580 Es saņemu atpakaļ vairākiem simboli nav char. 379 00:16:03,580 --> 00:16:07,400 >> Bet, protams, jums ir nepieciešams tikai pirmais CHAR adrese atcerēties, kur 380 00:16:07,400 --> 00:16:08,870 Visa virkne ir tāpēc, kāpēc? 381 00:16:08,870 --> 00:16:12,700 Kā jūs saprast, kur beigas string ir zināt sākums? 382 00:16:12,700 --> 00:16:13,630 Slīpsvītru nulle. 383 00:16:13,630 --> 00:16:17,260 Tātad ar šīm divām versijām jūs izrēķināt Pirms sākumā un beigās 384 00:16:17,260 --> 00:16:20,280 jebkurš string ir, tik ilgi, kamēr viņi pareizi noformēts ar šo Null 385 00:16:20,280 --> 00:16:22,110 terminatora, kas slīpsvītra nulle. 386 00:16:22,110 --> 00:16:24,520 >> Bet tas zvana getstring. 387 00:16:24,520 --> 00:16:28,020 Un izrādās, ka getstring visu šo laiku ir bijusi sava veida 388 00:16:28,020 --> 00:16:28,820 krāpšanos mums. 389 00:16:28,820 --> 00:16:32,460 Tas ir bijis darot šo darbu, lai pārliecinātos, iegūt virkni no lietotāja. 390 00:16:32,460 --> 00:16:34,580 Bet kur ir, ka atmiņa ir nāk no? 391 00:16:34,580 --> 00:16:38,440 Ja mēs ejam atpakaļ uz attēlu šeit un piemēro definīciju no tikai 392 00:16:38,440 --> 00:16:42,610 pirms brīža, ka kaudze ir, ja atmiņas iet, kad funkcijas sauc, 393 00:16:42,610 --> 00:16:45,370 pēc šīs loģikas, kad jūs zvanu getstring, un pēc tam es veids 394 00:16:45,370 --> 00:16:50,900 D-A-V-I-D Enter, kur ir D-A-V-I-D slīpsvītru nulles saglabāti, pamatojoties uz 395 00:16:50,900 --> 00:16:53,480 Stāsts mēs esam pastāstīja tālu? 396 00:16:53,480 --> 00:16:55,190 >> Tas, šķiet, ir kaudze, vai ne? 397 00:16:55,190 --> 00:16:58,120 Kad jūs zvanu saņemt string jūs saņemsiet maz šķēle atmiņas par kaudze. 398 00:16:58,120 --> 00:17:01,630 Tātad, tas saprotams, ka D-A-V-I-D slīpsvītru nulle tiek glabāti 399 00:17:01,630 --> 00:17:02,770 tur kaudze. 400 00:17:02,770 --> 00:17:07,680 Bet pagaidiet minūti, getstring peļņu ka virkne, tā sakot, tas nozīmē, 401 00:17:07,680 --> 00:17:11,700 tas ir paplāti no kafejnīcai ir pacēlies kaudzīti. 402 00:17:11,700 --> 00:17:14,560 Un mēs teikt pēdējo reizi, ka, tiklīdz funkcija atgriež, un jūs pieņemt, ka 403 00:17:14,560 --> 00:17:20,109 paplātes, tā sakot, pie skursteņa, kas Jūs varat pieņemt, par to paliekas 404 00:17:20,109 --> 00:17:21,819 ka atmiņa? 405 00:17:21,819 --> 00:17:25,160 Es veida redrew tos kā jautājuma zīmes tāpēc, ka viņi faktiski kļūtu 406 00:17:25,160 --> 00:17:26,250 nezināms vērtības. 407 00:17:26,250 --> 00:17:29,500 Tos var izmantot atkārtoti, kad daži Nākamais funkciju sauc. 408 00:17:29,500 --> 00:17:31,870 >> Citiem vārdiem sakot, ja mums notiktu , lai uzglabātu - 409 00:17:31,870 --> 00:17:34,350 Es izdarīt ātru attēlu Šeit no skursteņa. 410 00:17:34,350 --> 00:17:38,690 Ja mēs gadās būt zīmējums apakšā no manas atmiņas segmentā, un mēs teikt 411 00:17:38,690 --> 00:17:42,230 ka šī ir vieta atmiņas aizņem galvenais un varbūt ARG c un 412 00:17:42,230 --> 00:17:46,790 ARG v un kaut kas cits šajā programmā, kad getstring sauc, 413 00:17:46,790 --> 00:17:51,120 iespējams getstring izpaužas rieciens atmiņas šeit. 414 00:17:51,120 --> 00:17:53,940 Un tad D-A-V-I-D kaut kā nonāk šo funkciju. 415 00:17:53,940 --> 00:17:55,320 Un es esmu gatavojas pārspīlēju. 416 00:17:55,320 --> 00:18:00,050 Bet pieņemsim, ka tā D-A-V-I-D slīpsvītru nulle. 417 00:18:00,050 --> 00:18:03,500 Tik tas daudz baiti tiek izmantotas rāmis getstring. 418 00:18:03,500 --> 00:18:08,270 >> Bet, tiklīdz getstring atdevi, mēs teica pēdējo reizi, ka šī atmiņa vairāk 419 00:18:08,270 --> 00:18:11,340 šeit viss kļūst - woops! - 420 00:18:11,340 --> 00:18:14,270 viss kļūst efektīvi izdzēsti. 421 00:18:14,270 --> 00:18:17,220 Un mēs varam domāt par to tagad, jo jautājums zīmes, jo, kas zina 422 00:18:17,220 --> 00:18:18,720 kas notiek, lai kļūtu par šīs atmiņas. 423 00:18:18,720 --> 00:18:22,130 Patiešām, es ļoti bieži zvana funkcijas cits nekā getstring. 424 00:18:22,130 --> 00:18:24,750 Un, tiklīdz es aicinu kādu citu funkcija nekā getstring, varbūt ne 425 00:18:24,750 --> 00:18:28,860 Šī konkrētā programma, mēs vienkārši skatījās at, bet kādā citā, protams, daži citi 426 00:18:28,860 --> 00:18:34,180 funkcija, iespējams, galu galā ir dota Šis nākamais vietas kaudze. 427 00:18:34,180 --> 00:18:39,410 >> Tātad tas nevar būt, ka getstring veikalos D-A-V-I-D uz skursteņa jo es būtu 428 00:18:39,410 --> 00:18:41,040 uzreiz zaudēs piekļuvi tai. 429 00:18:41,040 --> 00:18:43,720 Bet mēs zinām, tie getstring tikai atgriež ko? 430 00:18:43,720 --> 00:18:47,220 Tas nav atgriešanās man sešas rakstzīmes. 431 00:18:47,220 --> 00:18:51,090 Kas tā patiesi atgriežas nebija mēs secinām, pēdējo reizi? 432 00:18:51,090 --> 00:18:52,480 Adrese no pirmā. 433 00:18:52,480 --> 00:18:56,650 Tātad kaut kā, kad jūs sauc getstring, tas ir piešķirot rieciens atmiņā 434 00:18:56,650 --> 00:18:59,620 virkne, kas lietotājiem tips un tad atgriežoties adresi no tā. 435 00:18:59,620 --> 00:19:02,930 Un izrādās, ka, ja jūs vēlaties, lai funkcija piešķirt atmiņu šajā 436 00:19:02,930 --> 00:19:08,390 veids un atgriešanās, lai personai, kas aicināja kas darbojas, adrese 437 00:19:08,390 --> 00:19:11,870 ka rieciens atmiņas, jūs absolūti nevar likt to kaudze pie 438 00:19:11,870 --> 00:19:14,750 apakšas, jo funkcionāli tas ir tikai gatavojas nekļūst jums ļoti 439 00:19:14,750 --> 00:19:17,800 ātri, lai jūs varat droši uzminēt, kur mēs, iespējams, gatavojas mētāt to 440 00:19:17,800 --> 00:19:20,130 vietā, tā saukto kaudzes. 441 00:19:20,130 --> 00:19:25,290 >> Tā starp apakšā atmiņas s izkārtojumu un par savu atmiņu top 442 00:19:25,290 --> 00:19:26,820 izkārtojums ir visai ķekars segmentos. 443 00:19:26,820 --> 00:19:29,270 Viens no tiem ir kaudze, un pa labi virs tā ir kaudze. 444 00:19:29,270 --> 00:19:33,680 Un kaudze ir tikai atšķirīgs rieciens atmiņa, kas ir neizmanto funkcijas 445 00:19:33,680 --> 00:19:34,770 kad viņi sauc. 446 00:19:34,770 --> 00:19:38,100 To lieto, lai ilgtermiņa atmiņu, kad Jūs vēlaties, viena funkcija, lai greifers daži 447 00:19:38,100 --> 00:19:42,700 atmiņu un varēs jābalstās uz to nezaudējot kontroli pār to. 448 00:19:42,700 --> 00:19:45,550 >> Tagad jūs, iespējams, varētu nekavējoties redzēt, ka tas nav 449 00:19:45,550 --> 00:19:48,060 vienmēr perfektu dizainu. 450 00:19:48,060 --> 00:19:51,350 Kā jūsu programma piešķirti atmiņas par kaudze, vai kā jūs saucat vairāk un 451 00:19:51,350 --> 00:19:55,540 vairāk funkcijas, vai kā jūs piešķirt Atmiņas par kaudze ar malloc pie kā 452 00:19:55,540 --> 00:20:00,690 getstring dara, ko skaidri šķiet, ir neizbēgama problēma? 453 00:20:00,690 --> 00:20:00,860 >> Labi. 454 00:20:00,860 --> 00:20:03,150 Tāpat kā to, ka šīs bultas ir vērsti viens pret otru 455 00:20:03,150 --> 00:20:04,380 nav bode arī. 456 00:20:04,380 --> 00:20:08,630 Un tiešām, mēs varētu ļoti ātri crash programmas jebkurā vairākos veidos. 457 00:20:08,630 --> 00:20:12,050 Patiesībā, es domāju, ka mēs varētu būt izdarīts nejauši vienreiz. 458 00:20:12,050 --> 00:20:14,020 Vai arī, ja ne, pieņemsim to darīt apzināti tagad. 459 00:20:14,020 --> 00:20:21,330 Ļaujiet man iet uz priekšu un rakstīt super ātri programmu, ko sauc dontdothis.c. 460 00:20:21,330 --> 00:20:26,730 Un tagad es iešu šeit un Vai asas ietver stdio.h. 461 00:20:26,730 --> 00:20:32,620 Pieņemsim atzīt funkcija foo notiek nekādus argumentus, kas ir 462 00:20:32,620 --> 00:20:34,040 apzīmē kā arī ar spēkā neesošu. 463 00:20:34,040 --> 00:20:37,830 >> Un vienīgā lieta, foo gatavojas darīt, ir zvanu foo, kas, iespējams, nav 464 00:20:37,830 --> 00:20:39,100 gudrākais ideja, bet lai nu tā būtu. 465 00:20:39,100 --> 00:20:40,490 Ent galvenais spēkā neesošu. 466 00:20:40,490 --> 00:20:45,270 Tagad vienīgā lieta, galvenais ir iet to darīt, ir zvanīt foo kā arī. 467 00:20:45,270 --> 00:20:51,050 Un tikai sākas, es iešu uz priekšu šeit un teikt printf "Hello from 468 00:20:51,050 --> 00:20:52,340 foo. " 469 00:20:52,340 --> 00:20:52,890 >> Labi. 470 00:20:52,890 --> 00:21:00,160 Tātad, ja man nav nekādas kļūdas, Padarīt dontdothis dot slīpsvītru. 471 00:21:00,160 --> 00:21:01,960 Un darīsim to lielākā logā - 472 00:21:01,960 --> 00:21:03,210 dot slīpsvītra, dontdothis. 473 00:21:03,210 --> 00:21:07,590 474 00:21:07,590 --> 00:21:08,840 Come on. 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 Acīmredzot, jūs varat darīt to. 478 00:21:13,100 --> 00:21:15,190 Damn it. 479 00:21:15,190 --> 00:21:16,190 Labi. 480 00:21:16,190 --> 00:21:16,580 Pagaidiet. 481 00:21:16,580 --> 00:21:17,370 Gaidīšanas. 482 00:21:17,370 --> 00:21:18,270 Vai mēs - 483 00:21:18,270 --> 00:21:20,110 Mums bija izmantot to ar Marka. 484 00:21:20,110 --> 00:21:22,050 >> [Nopūšas] 485 00:21:22,050 --> 00:21:25,110 >> Es zinu, bet es domāju, ka mēs tikko izdzēsa to. 486 00:21:25,110 --> 00:21:28,410 Uh, jā. 487 00:21:28,410 --> 00:21:30,660 Damn it. 488 00:21:30,660 --> 00:21:32,640 Atrisināt šo Rob. 489 00:21:32,640 --> 00:21:34,678 Kas ir? 490 00:21:34,678 --> 00:21:35,928 Tas ir ļoti vienkārši. 491 00:21:35,928 --> 00:21:43,820 492 00:21:43,820 --> 00:21:47,360 Jā, mēs vērsāmies optimizāciju off. 493 00:21:47,360 --> 00:21:48,970 Labi, stāvēt bye. 494 00:21:48,970 --> 00:21:49,950 Tagad es jūtos labāk. 495 00:21:49,950 --> 00:21:51,390 Labi. 496 00:21:51,390 --> 00:21:51,780 Labi. 497 00:21:51,780 --> 00:21:53,430 >> Tātad, pieņemsim kompilējiet šo - 498 00:21:53,430 --> 00:21:55,880 Padarīt Jūs dontdothis. 499 00:21:55,880 --> 00:22:00,090 Jums varētu būt pārdēvēt to dothis.c tikai brīdi. 500 00:22:00,090 --> 00:22:00,710 Tur mēs ejam. 501 00:22:00,710 --> 00:22:01,240 Paldies. 502 00:22:01,240 --> 00:22:02,050 Labi. 503 00:22:02,050 --> 00:22:05,480 Tāpēc, ka man bija drukāšanas kaut kas bija faktiski tikai 504 00:22:05,480 --> 00:22:08,150 palēnina procesu, ar kuru mēs būtu sasniedzis šo jautājumu. 505 00:22:08,150 --> 00:22:08,510 Labi. 506 00:22:08,510 --> 00:22:08,870 Phew! 507 00:22:08,870 --> 00:22:11,180 >> Tātad, kas patiesībā notiek? 508 00:22:11,180 --> 00:22:14,440 Iemesls tur, tāpat kā malā, ir darīt kaut ko attiecībā uz ieguldījumu un 509 00:22:14,440 --> 00:22:17,270 izeja mēdz būt lēnāka, jo jūs ir rakstīt rakstzīmes 510 00:22:17,270 --> 00:22:18,600 ekrāns, tas ir, lai ritinātu. 511 00:22:18,600 --> 00:22:21,720 Tik garš stāsts īss, bija es patiesībā notika tik nepacietīgs, mums būtu 512 00:22:21,720 --> 00:22:23,260 redzējis šo gala rezultātu, kā arī. 513 00:22:23,260 --> 00:22:26,220 Tagad, ka es saņēmu braukt no drukas-ups, mēs redzam to uzreiz. 514 00:22:26,220 --> 00:22:28,410 Tātad, kāpēc tas notiek. 515 00:22:28,410 --> 00:22:31,300 Nu, vienkāršs izskaidrojums, protams, ir tas, ka foo, iespējams, nebūtu 516 00:22:31,300 --> 00:22:32,500 aicinās pati. 517 00:22:32,500 --> 00:22:34,470 >> Tagad kopumā, tas ir rekursija. 518 00:22:34,470 --> 00:22:36,970 Un mēs domājam, ka pāris nedēļas Pirms rekursīvs ir labs. 519 00:22:36,970 --> 00:22:40,330 Rekursijas tas ir maģisks veids izsakot sevi super kodolīgi. 520 00:22:40,330 --> 00:22:41,400 Un tas tikai darbi. 521 00:22:41,400 --> 00:22:45,060 Bet tur ir galvenais no visiem rekursīvas programmas, mēs esam runājuši 522 00:22:45,060 --> 00:22:48,260 par un paskatījās līdz šim, kas bija tas, ka viņi bija, ko? 523 00:22:48,260 --> 00:22:52,610 Bāzes scenārijs, kas bija dažas grūti kodētu gadījums, kas teica, dažās situācijās 524 00:22:52,610 --> 00:22:56,210 nesaucu foo, kas ir skaidri nav tāds gadījums. 525 00:22:56,210 --> 00:22:58,920 >> Tātad, kas patiesībā notiek saistībā ar šo attēlu? 526 00:22:58,920 --> 00:23:01,790 Nu, kad galvenais aicina foo, tas izpaužas šķēle atmiņas. 527 00:23:01,790 --> 00:23:04,150 Kad foo aicina foo, tas izpaužas šķēle atmiņas. 528 00:23:04,150 --> 00:23:06,430 Kad foo aicina foo, tā kļūst šķēli. 529 00:23:06,430 --> 00:23:07,080 Tas izpaužas šķēli. 530 00:23:07,080 --> 00:23:08,120 Tas izpaužas šķēli. 531 00:23:08,120 --> 00:23:09,460 Tāpēc, ka foo nekad atgriezties. 532 00:23:09,460 --> 00:23:12,160 Mēs nekad dzēstu vienu no tiem kadri no skursteņa. 533 00:23:12,160 --> 00:23:15,930 Tāpēc mēs esam pūš caur kaudzes, ne minēt, kurš zina, kāds cits, un 534 00:23:15,930 --> 00:23:19,600 mēs nepārkāpjot robežas mūsu tā saukta par segmenta atmiņas. 535 00:23:19,600 --> 00:23:21,790 Kļūda iet segmentācija nepatiesa. 536 00:23:21,790 --> 00:23:24,110 >> Tā šķīdums ir acīmredzami nav darīt. 537 00:23:24,110 --> 00:23:28,830 Bet lielāks secinājums ir tas, ka, jā, ir absolūti zināma robeža, 538 00:23:28,830 --> 00:23:32,470 pat tad, ja tas nav labi definēts, par to, kā daudzas funkcijas, jūs varat zvanīt 539 00:23:32,470 --> 00:23:34,970 Programma, cik reizes funkcija var zvanīt sevi. 540 00:23:34,970 --> 00:23:38,430 Tātad, pat ja mēs sludinām rekursija kā šīs potenciāli burvju lieta 541 00:23:38,430 --> 00:23:41,870 pāris nedēļas atpakaļ par sigma funkciju, un, kad mēs saņemt datus 542 00:23:41,870 --> 00:23:45,270 struktūras un CS50, jūs redzēsiet otru pieteikumus par to, tas nav 543 00:23:45,270 --> 00:23:46,500 vienmēr labākā lieta. 544 00:23:46,500 --> 00:23:50,070 Jo, ja funkcija sauc sevi, sauc sevi, pat ja tur ir bāze 545 00:23:50,070 --> 00:23:54,860 gadījumā, ja jums nav hit, ka pamata lietu uz 1000 zvaniem vai 10000 zvaniem, ko 546 00:23:54,860 --> 00:23:58,800 ka reizi, kad jūs varētu būt beigušies istabas par savu tā saukto kaudze un nospiediet 547 00:23:58,800 --> 00:24:00,400 daži citi segmenti atmiņas. 548 00:24:00,400 --> 00:24:03,950 Tātad, tas arī ir dizaina kompromiss starp eleganci un starp 549 00:24:03,950 --> 00:24:06,920 robustumu jūsu īpaši īstenošanu. 550 00:24:06,920 --> 00:24:10,780 >> Tātad tur ir vēl viens negatīvie vai vēl viens gotcha to, ko mēs esam 551 00:24:10,780 --> 00:24:11,720 darījis līdz šim. 552 00:24:11,720 --> 00:24:12,980 Kad es piezvanīju getstring - 553 00:24:12,980 --> 00:24:15,120 ļaujiet man iet atpakaļ sveiki-2. 554 00:24:15,120 --> 00:24:18,170 Ievērojiet, ka es esmu aicinot getstring, kas atgriežas adresi. 555 00:24:18,170 --> 00:24:20,730 Un mēs apgalvo, ka šodien adrese ir no kaudzes. 556 00:24:20,730 --> 00:24:24,480 Un tagad es esmu izdrukāt stīgu šajā adresē. 557 00:24:24,480 --> 00:24:27,000 Bet mēs nekad sauc pretējs getstring. 558 00:24:27,000 --> 00:24:30,850 Mums nekad nav bijis calll funkciju, piemēram, ungetstring, kur roku atpakaļ 559 00:24:30,850 --> 00:24:31,610 ka atmiņas. 560 00:24:31,610 --> 00:24:33,250 Bet, atklāti sakot, mēs, iespējams, būtu bijis. 561 00:24:33,250 --> 00:24:37,390 Jo, ja mēs turpinām lūdzot datoru atmiņu, pēc kā kāds, piemēram, 562 00:24:37,390 --> 00:24:40,830 getstring bet nekad dot to atpakaļ, protams, ka pārāk ir varētu izraisīt 563 00:24:40,830 --> 00:24:42,970 problēmas, ar ko mēs palaist no atmiņas. 564 00:24:42,970 --> 00:24:46,140 >> Un patiesībā, mēs varam meklēt šos problēmas ar jauno instrumentu, kuru izmantošana 565 00:24:46,140 --> 00:24:47,640 ir nedaudz noslēpumains rakstīt. 566 00:24:47,640 --> 00:24:50,960 Bet ļaujiet man iet uz priekšu un splash to uz augšu uz ekrāna tikai brīdi. 567 00:24:50,960 --> 00:24:56,940 Es iešu uz priekšu un palaist Valgrind ar parametru, kuru pirmā komanda 568 00:24:56,940 --> 00:25:00,260 līnija arguments ir vārds Minētās programmas sveiki-2. 569 00:25:00,260 --> 00:25:02,650 Un diemžēl tas ir produkcija ir atrociously 570 00:25:02,650 --> 00:25:04,290 kompleksa nesaprotamu iemeslu dēļ. 571 00:25:04,290 --> 00:25:06,280 Tātad mēs redzam visu šo putru. 572 00:25:06,280 --> 00:25:07,530 Deivids ir jānorāda manu vārdu. 573 00:25:07,530 --> 00:25:09,760 Tātad, tas ir programma faktiski darbojas. 574 00:25:09,760 --> 00:25:11,180 Un tagad mēs šo produkciju. 575 00:25:11,180 --> 00:25:13,400 >> Tātad Valgrind ir līdzīgs garā uz gdb. 576 00:25:13,400 --> 00:25:14,950 Tas nav atkļūdotājs par sevi. 577 00:25:14,950 --> 00:25:16,270 Bet tas ir atmiņas pārbaudītājs. 578 00:25:16,270 --> 00:25:20,140 Tā ir programma, kas darbosies jūsu programma, un pateiks, ja jūs lūdza 579 00:25:20,140 --> 00:25:23,860 atmiņu datoru un nekad pasniedza to muguras, tādējādi nozīmē, ka jums ir 580 00:25:23,860 --> 00:25:24,570 atmiņas noplūde. 581 00:25:24,570 --> 00:25:26,240 Un atmiņas noplūdes mēdz būt slikti. 582 00:25:26,240 --> 00:25:29,120 Un jums ir lietotāji datoru ir iespējams, uzskatīja, ka tas, vai jums ir 583 00:25:29,120 --> 00:25:30,300 Mac vai PC. 584 00:25:30,300 --> 00:25:33,730 Vai esat kādreiz izmanto datoru bet nevis rebooted vairākos 585 00:25:33,730 --> 00:25:36,820 dienas, vai arī jūs esat tikko ieguvuši daudz programmas, kas darbojas, un nopelt lieta 586 00:25:36,820 --> 00:25:42,360 palēnina uz slīpēšanas apturēt vai vismaz tas ir super kaitinošas, lai izmantotu, jo 587 00:25:42,360 --> 00:25:44,350 viss atkal super lēns. 588 00:25:44,350 --> 00:25:46,260 >> Tagad, ka var būt jebkura vairāku iemeslu dēļ. 589 00:25:46,260 --> 00:25:49,600 Tas varētu būt bezgalīga cilpa, bug kāds kods, vai, vienkārši, tas 590 00:25:49,600 --> 00:25:53,250 varētu nozīmēt, ka jūs izmantojat vairāk atmiņu, vai mēģināt, nekā jūsu 591 00:25:53,250 --> 00:25:54,920 Dators patiesībā ir. 592 00:25:54,920 --> 00:25:57,770 Un varbūt tur ir kaut kādā programmā bug kas uztur lūdzot atmiņu. 593 00:25:57,770 --> 00:26:02,480 Pārlūkprogrammas gadiem ilgi bija pazīstami tas, prasot vairāk un vairāk atmiņas 594 00:26:02,480 --> 00:26:03,870 bet nekad nododot to atpakaļ. 595 00:26:03,870 --> 00:26:07,220 Protams, ja jums ir tikai ierobežots atmiņas apjoms, jūs nevarat prasīt 596 00:26:07,220 --> 00:26:09,990 bezgalīgi daudzas reizes dažus no šīs atmiņas. 597 00:26:09,990 --> 00:26:13,070 >> Un tā, ko jūs redzat šeit, lai gan atkal Valgrind izeja ir 598 00:26:13,070 --> 00:26:17,490 nevajadzīgi sarežģīta, lai skatienu pirmkārt, tas ir interesanti daļa. 599 00:26:17,490 --> 00:26:18,890 Kaudze - 600 00:26:18,890 --> 00:26:20,060 tiek izmantotas pie izejas. 601 00:26:20,060 --> 00:26:22,810 Tātad, šeit ir, cik daudz atmiņas bija izmanto no kaudzes pie 602 00:26:22,810 --> 00:26:24,300 laiks, mana programma izstājoties - 603 00:26:24,300 --> 00:26:27,280 acīmredzot seši baiti vienā blokā. 604 00:26:27,280 --> 00:26:28,710 Tāpēc es esmu gatavojas vilnis manas rokas par kādu bloks ir. 605 00:26:28,710 --> 00:26:31,270 Domāju, ka no tā ir tikai rieciens, vairāk tehniskā vārds rieciens. 606 00:26:31,270 --> 00:26:33,140 Bet seši baiti - 607 00:26:33,140 --> 00:26:36,870 kādi ir seši baiti, ka vēl izmanto? 608 00:26:36,870 --> 00:26:37,390 >> Tieši tā. 609 00:26:37,390 --> 00:26:41,520 D-A-V-I-D slīpsvītru nulle, pieci burts Vārds plus null terminators. 610 00:26:41,520 --> 00:26:46,350 Tātad šī programma Valgrind pamanīju, ka man lūdza sešus baiti, acīmredzot, ar 611 00:26:46,350 --> 00:26:48,950 veids getstring, bet nekad deva viņiem atpakaļ. 612 00:26:48,950 --> 00:26:52,030 Un patiesībā, tas varētu nebūt tik skaidrs, ja mana programma nav trīs 613 00:26:52,030 --> 00:26:53,590 līnijas, bet tas ir 300 līnijas. 614 00:26:53,590 --> 00:26:56,920 Tātad, mēs faktiski var sniegt citu komandu līnija arguments Valgrind uz 615 00:26:56,920 --> 00:26:58,290 padarītu to runīgs. 616 00:26:58,290 --> 00:26:59,760 Tas ir mazliet kaitinošas, lai atcerētos. 617 00:26:59,760 --> 00:27:01,580 Bet ja es daru - 618 00:27:01,580 --> 00:27:01,930 paskatīsimies. 619 00:27:01,930 --> 00:27:03,540 Noplūde - 620 00:27:03,540 --> 00:27:05,030 Tas bija noplūde - 621 00:27:05,030 --> 00:27:07,580 pat neatceros kas tas ir izslēgts rokām. 622 00:27:07,580 --> 00:27:08,550 >> - Noplūdes pārbaude vienāds pilna. 623 00:27:08,550 --> 00:27:10,180 Yep, paldies. 624 00:27:10,180 --> 00:27:12,520 - Noplūdes pārbaude vienāds pilna. 625 00:27:12,520 --> 00:27:13,800 Enter. 626 00:27:13,800 --> 00:27:14,940 Pati programma darbojas. 627 00:27:14,940 --> 00:27:16,180 Ierakstiet David vēlreiz. 628 00:27:16,180 --> 00:27:17,660 Tagad es redzu nedaudz sīkāk. 629 00:27:17,660 --> 00:27:20,890 Bet zem kaudzes kopsavilkumu, kas ir identisks četriem - ah, 630 00:27:20,890 --> 00:27:22,120 tas ir sava veida jauki. 631 00:27:22,120 --> 00:27:25,460 Tagad Valgrind ir faktiski meklē nedaudz grūtāk manā kodu. 632 00:27:25,460 --> 00:27:29,580 Un tas ir saprotams, ka, acīmredzot, malloc pie līnijas - 633 00:27:29,580 --> 00:27:30,580 mēs attālinātu. 634 00:27:30,580 --> 00:27:31,980 Pēc līnija - 635 00:27:31,980 --> 00:27:32,930 mēs neredzam, kas līnija tas ir. 636 00:27:32,930 --> 00:27:35,110 Bet malloc ir pirmais vaininieks. 637 00:27:35,110 --> 00:27:38,630 Tur ir malloc blog. 638 00:27:38,630 --> 00:27:39,810 >> Visas tiesības? 639 00:27:39,810 --> 00:27:40,450 Labi, nē. 640 00:27:40,450 --> 00:27:40,940 Labi? 641 00:27:40,940 --> 00:27:42,520 I sauc getstring. 642 00:27:42,520 --> 00:27:44,460 getstring acīmredzot aicina malloc. 643 00:27:44,460 --> 00:27:47,800 Tātad, kādi līnija kods ir acīmredzami vainojams, kam 644 00:27:47,800 --> 00:27:49,050 piešķirti šo atmiņu? 645 00:27:49,050 --> 00:27:51,560 646 00:27:51,560 --> 00:27:55,540 Pieņemsim, ka tas, kurš rakstīja malloc ir aptuveni pietiekami ilgi, ka tas ir 647 00:27:55,540 --> 00:27:56,390 nav viņu vaina. 648 00:27:56,390 --> 00:27:57,520 Tātad, tas ir iespējams, mans. 649 00:27:57,520 --> 00:28:02,000 getstring in cs50.c - tā, ka failu kaut kur uz datora - 650 00:28:02,000 --> 00:28:05,210 rindā 286, šķiet, ir vaininieks. 651 00:28:05,210 --> 00:28:08,140 Tagad pieņemsim, ka CS50 ir ap pienācīgu laiku, tāpēc 652 00:28:08,140 --> 00:28:09,720 Mums arī ir nekļūdīgs. 653 00:28:09,720 --> 00:28:14,080 Un tā tas droši vien nav getstring ka bug slēpjas, bet gan 654 00:28:14,080 --> 00:28:17,810 sveiki-2.c līnija 18. 655 00:28:17,810 --> 00:28:20,670 >> Tātad, pieņemsim to apskatīt kas tas līnija 18 bija. 656 00:28:20,670 --> 00:28:21,130 Oh. 657 00:28:21,130 --> 00:28:27,130 Kaut kā šī līnija ne vienmēr bagijs, per se, bet tas ir iemesls 658 00:28:27,130 --> 00:28:28,630 Aiz šīs atmiņas noplūde. 659 00:28:28,630 --> 00:28:32,140 Tātad super vienkārši, kādi būtu intuitīvi būt risinājums šeit? 660 00:28:32,140 --> 00:28:34,710 Ja mēs prasām atmiņu, nekad dodot atpakaļ, un tas, šķiet, ir 661 00:28:34,710 --> 00:28:37,940 problēma, jo laika gaitā mana datora var pietrūkt atmiņas, var palēnināt 662 00:28:37,940 --> 00:28:42,110 leju, sliktas lietas var notikt, labi, kāda ir vienkārša intuitīva risinājums? 663 00:28:42,110 --> 00:28:43,140 Tikai dot to atpakaļ. 664 00:28:43,140 --> 00:28:44,770 >> Kā jūs atbrīvotu šo atmiņu? 665 00:28:44,770 --> 00:28:49,970 Nu, par laimi tas ir diezgan vienkārši tikai pateikt brīvu vārdu. 666 00:28:49,970 --> 00:28:51,260 Un mēs nekad neesmu izdarījusi agrāk. 667 00:28:51,260 --> 00:28:55,890 Bet jūs varat būtībā iedomāties bezmaksas kā pretstatu malloc. 668 00:28:55,890 --> 00:28:58,030 bez ir pretējs piešķirot atmiņu. 669 00:28:58,030 --> 00:28:59,540 Tātad, tagad ļaujiet man recompile to. 670 00:28:59,540 --> 00:29:02,050 Padarīt HELLO-2. 671 00:29:02,050 --> 00:29:04,620 Ļaujiet man palaist to no jauna. sveiki-2 David. 672 00:29:04,620 --> 00:29:07,290 Tātad, tas, šķiet, strādāt tieši tādā pašā veidā. 673 00:29:07,290 --> 00:29:11,180 Bet, ja es dodos atpakaļ uz Valgrind un atkārtoti palaist ka pati komanda par manu nesen 674 00:29:11,180 --> 00:29:14,720 apkopota programma, ierakstot Manā Vārdā, kā iepriekš - 675 00:29:14,720 --> 00:29:15,370 jauki. 676 00:29:15,370 --> 00:29:16,760 Kaudze kopsavilkums - 677 00:29:16,760 --> 00:29:17,740 tiek izmantotas pie izejas - 678 00:29:17,740 --> 00:29:19,370 nulles baiti nulles blokiem. 679 00:29:19,370 --> 00:29:21,840 Un tas ir super jauki, visi kaudze bloki tika atbrīvotas. 680 00:29:21,840 --> 00:29:23,480 Nav noplūde ir iespējama. 681 00:29:23,480 --> 00:29:27,200 >> Tātad nāk uz augšu, nevis ar Problem Set 4, bet ar Problem Set 5, Kriminālistikas 682 00:29:27,200 --> 00:29:30,740 un tālāk, tas arī kļūs pasākums pareizību jūsu 683 00:29:30,740 --> 00:29:33,630 programmas, vai jums ir vai nav vai nav atmiņas noplūdes. 684 00:29:33,630 --> 00:29:36,900 Bet par laimi, ne tikai jūs varat pamatojusi caur tiem intuitīvi, kas 685 00:29:36,900 --> 00:29:40,430 ir, varbūt, viegli maziem programmām bet grūtāk lielākām programmām, 686 00:29:40,430 --> 00:29:43,860 Valgrind, tām lielākām programmām, var palīdzēt jums noteikt 687 00:29:43,860 --> 00:29:45,360 Īpaša problēma. 688 00:29:45,360 --> 00:29:47,500 >> Bet tur ir viena cita problēma , kas varētu rasties. 689 00:29:47,500 --> 00:29:51,245 Ļaujiet man atvērt šo failu šeit, kas ir, atkal nedaudz vienkāršs piemērs. 690 00:29:51,245 --> 00:29:53,760 Bet pieņemsim koncentrēties uz to, ko šī programma nav. 691 00:29:53,760 --> 00:29:55,190 To sauc memory.c. 692 00:29:55,190 --> 00:29:58,380 Mēs post to vēlāk šodien zip no šodienas pirmkodu. 693 00:29:58,380 --> 00:30:01,610 Un ievēroju, ka man ir tā saucamā funkcija f kas ņem nekādus argumentus un 694 00:30:01,610 --> 00:30:02,800 atgriež neko. 695 00:30:02,800 --> 00:30:07,240 20 rindā, es esmu acīmredzot atzīst rādītājs uz int, un aicinot to x. 696 00:30:07,240 --> 00:30:09,570 Es esmu piešķiršanu, ir atgriešanās vērtība malloc. 697 00:30:09,570 --> 00:30:14,590 Un tikai, lai būtu skaidrs, cik daudz baitu am Es, iespējams saņemt atpakaļ no malloc 698 00:30:14,590 --> 00:30:17,080 šajā situāciju? 699 00:30:17,080 --> 00:30:18,040 >> Droši vien 40. 700 00:30:18,040 --> 00:30:18,840 Ja jūs saņemsiet, ka no? 701 00:30:18,840 --> 00:30:22,410 Nu, ja jūs atceraties, ka int bieži 4 bytes, vismaz tas ir 702 00:30:22,410 --> 00:30:25,110 ierīce, 10 reizes 4 ir acīmredzami 40. 703 00:30:25,110 --> 00:30:28,920 Tātad malloc atgriežas adresi no no atmiņas gabals un glabāšanai, kas 704 00:30:28,920 --> 00:30:30,800 novērstu galu galā ar x. 705 00:30:30,800 --> 00:30:32,570 Tātad, lai būtu skaidrs, kādi tad notiek? 706 00:30:32,570 --> 00:30:34,990 Nu, ļaujiet man pāriet atpakaļ mūsu attēlu šeit. 707 00:30:34,990 --> 00:30:38,150 Ļaujiet man ne tikai izdarīt apakšas mana datora atmiņas, ļaujiet man iet uz priekšu un 708 00:30:38,150 --> 00:30:42,990 izdarīt visu taisnstūri, pārstāv visu manu RAM. 709 00:30:42,990 --> 00:30:44,790 >> Mēs sakām, ka kaudze ir uz leju. 710 00:30:44,790 --> 00:30:47,010 Un tur ir teksts segmentā par neinicializētām dati. 711 00:30:47,010 --> 00:30:49,880 Bet es esmu tikai gatavojas abstrakti tiem citas lietas prom, kā dot, dot dot. 712 00:30:49,880 --> 00:30:53,470 Es esmu tikai gatavojas, lai atsauktos uz šo kā kaudzes augšpusē. 713 00:30:53,470 --> 00:30:57,070 Un pēc tam apakšā šo attēlu, pārstāvēt galvenais, es esmu gatavojas 714 00:30:57,070 --> 00:30:59,880 lai dotu tai šķēles atmiņu uz skursteņa. 715 00:30:59,880 --> 00:31:03,150 Attiecībā uz f, es esmu gatavojas sniegt tai šķēle atmiņas uz skursteņa. 716 00:31:03,150 --> 00:31:05,140 Tagad, es saņēmu konsultēties ar maniem pirmkods vēlreiz. 717 00:31:05,140 --> 00:31:07,170 Kādi ir vietējās mainīgie galvenais? 718 00:31:07,170 --> 00:31:10,710 Acīmredzot nekas, lai šķēle ir faktiski tukša vai pat nav tik liels 719 00:31:10,710 --> 00:31:11,600 kā es esmu sastādīts to. 720 00:31:11,600 --> 00:31:15,730 Bet f, man ir vietējās mainīgo, , kas tiek saukts x. 721 00:31:15,730 --> 00:31:20,410 Tāpēc es esmu gatavojas iet uz priekšu un dot f rieciens atmiņas, aicinot to x. 722 00:31:20,410 --> 00:31:24,680 >> Un tagad malloc 10 reizes 4, Tātad 40 malloc, kur ir arī, ka 723 00:31:24,680 --> 00:31:25,430 atmiņā nāk no? 724 00:31:25,430 --> 00:31:27,530 Mēs esam ne izķidātas attēlu kā šis iepriekš. 725 00:31:27,530 --> 00:31:31,140 Bet pieņemsim, ka tas ir efektīvi nāk no šejienes, tāpēc viens, 726 00:31:31,140 --> 00:31:33,170 divi, trīs, četru, piecu. 727 00:31:33,170 --> 00:31:34,680 Un tagad man ir nepieciešams 40 no tām. 728 00:31:34,680 --> 00:31:37,540 Tāpēc es ņemšu tikai do dot, dot, dot ieteikt ka tur ir vēl vairāk atmiņas 729 00:31:37,540 --> 00:31:39,350 atgriežoties no kaudzes. 730 00:31:39,350 --> 00:31:40,710 Tagad to, kas ir adrese? 731 00:31:40,710 --> 00:31:42,620 Pieņemsim izvēlēties mūsu patvaļīgi jārisina kā vienmēr - 732 00:31:42,620 --> 00:31:46,310 Ox123, pat ja tas ir iespējams, gatavojas ir kaut kas pilnīgi atšķirīgs. 733 00:31:46,310 --> 00:31:50,420 Tas ir adrese pirmais baits atmiņa, kas es esmu jautā malloc par. 734 00:31:50,420 --> 00:31:53,630 >> Tātad, īsi sakot, vienu reizi līniju 20 izpilda, kas ir burtiski 735 00:31:53,630 --> 00:31:57,170 uzglabā iekšpusē no x šeit? 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 Un Vērsis ir neinteresanti. 739 00:32:01,550 --> 00:32:03,200 Tas tikai nozīmē, šeit heksadecimālo numuru. 740 00:32:03,200 --> 00:32:06,490 Bet kas ir galvenais ir tas, ka tas, ko es esmu veikalā in x, kas ir vietējā mainīgs. 741 00:32:06,490 --> 00:32:10,260 Bet tā datu tips, atkal, ir adrese int. 742 00:32:10,260 --> 00:32:12,710 Nu, es esmu gatavojas glabāt Ox123. 743 00:32:12,710 --> 00:32:16,610 Bet atkal, ja tas ir pārāk sarežģīti nevajadzīgi, ja es ritiniet 744 00:32:16,610 --> 00:32:21,490 atpakaļ, mēs varam abstrakti šo prom pavisam saprātīgi un tikai teikt, ka x ir 745 00:32:21,490 --> 00:32:23,910 rādītāju uz šo rieciens atmiņas. 746 00:32:23,910 --> 00:32:24,070 >> Labi. 747 00:32:24,070 --> 00:32:26,230 Tagad jautājums pie rokas ir šādas - 748 00:32:26,230 --> 00:32:29,910 līnija 21, izrādās, ir buggy. 749 00:32:29,910 --> 00:32:31,160 Kāpēc? 750 00:32:31,160 --> 00:32:34,890 751 00:32:34,890 --> 00:32:36,930 >> Žēl? 752 00:32:36,930 --> 00:32:38,640 Tā nav - 753 00:32:38,640 --> 00:32:40,390 teikt, ka vēlreiz. 754 00:32:40,390 --> 00:32:41,240 Nu, tas nav bezmaksas. 755 00:32:41,240 --> 00:32:42,350 Tātad, tas ir otrais, bet. 756 00:32:42,350 --> 00:32:45,000 Tātad tur ir viens cits, bet īpaši pie 21 līnijas. 757 00:32:45,000 --> 00:32:49,480 758 00:32:49,480 --> 00:32:50,040 >> Tieši tā. 759 00:32:50,040 --> 00:32:54,980 Šī vienkāršā līnija kods ir tikai bufera pārpildes, bufera pārsniegšanu. 760 00:32:54,980 --> 00:32:57,050 Buferis nozīmē tikai rieciens atmiņas. 761 00:32:57,050 --> 00:33:01,520 Bet atmiņas rieciens ir lielums 10, 10 veseli skaitļi, kas nozīmē, ja mēs 762 00:33:01,520 --> 00:33:05,350 indekss tajā izmantojot sintaktisko cukura masīva apzīmējums, kvadrātveida 763 00:33:05,350 --> 00:33:09,220 kronšteini, jums ir piekļuve x kronšteins 0 x kronšteins 1 x, 764 00:33:09,220 --> 00:33:10,390 kronšteins dot, dot, dot. 765 00:33:10,390 --> 00:33:13,270 x 9 grupa ir lielākais. 766 00:33:13,270 --> 00:33:17,680 Tātad, ja man x kronšteinu 10, kur Es esmu faktiski gatavojas atmiņā? 767 00:33:17,680 --> 00:33:19,120 >> Nu, ja man ir 10 int - 768 00:33:19,120 --> 00:33:21,070 pieņemsim faktiski izdarīt visu Šo šeit. 769 00:33:21,070 --> 00:33:22,700 Tā, ka bija pirmie pieci. 770 00:33:22,700 --> 00:33:24,660 Lūk, piecas citas Ints. 771 00:33:24,660 --> 00:33:29,580 Tātad x skava 0 ir šeit. x 1 kronšteins ir šeit. x 9 kronšteins ir šeit. x kronšteins 772 00:33:29,580 --> 00:33:37,960 10 ir šeit, kas nozīmē, es runāju, 21 līnija, dators likt 773 00:33:37,960 --> 00:33:39,400 numurs, ja? 774 00:33:39,400 --> 00:33:42,010 Skaitlis 0, ja? 775 00:33:42,010 --> 00:33:43,380 Nu, tas ir 0, jā. 776 00:33:43,380 --> 00:33:45,460 Bet tikai to, ka tā 0 ir sava veida sakritība. 777 00:33:45,460 --> 00:33:47,140 Tas varētu būt skaitlis 50, jo visi mēs rūpējamies. 778 00:33:47,140 --> 00:33:50,480 Bet mēs cenšamies likt to x grupā 10, kas ir, ja tas 779 00:33:50,480 --> 00:33:53,700 jautājuma zīme ir sastādīts, kas nav laba lieta. 780 00:33:53,700 --> 00:33:57,070 Šī programma varētu ļoti labi crash, kā rezultātā. 781 00:33:57,070 --> 00:33:59,400 >> Tagad, iesim uz priekšu un redzēt, ja tas ir, protams, to, kas notiek. 782 00:33:59,400 --> 00:34:02,600 Padarīt atmiņu, jo fails sauc memory.c. 783 00:34:02,600 --> 00:34:05,950 Iesim uz priekšu un palaist programmas atmiņas. 784 00:34:05,950 --> 00:34:08,239 Tāpēc mēs palaimējies, patiesībā, šķiet. 785 00:34:08,239 --> 00:34:09,340 Mums ir palaimējies. 786 00:34:09,340 --> 00:34:11,060 Bet pieņemsim redzēt, ja mēs tagad palaist Valgrind. 787 00:34:11,060 --> 00:34:14,170 No pirmā acu uzmetiena, mana programma varētu , šķiet, ir pilnīgi pareizs. 788 00:34:14,170 --> 00:34:18,010 Bet ļaujiet man palaist Valgrind ar - Noplūdes pārbaude vienāds pilnā atmiņā. 789 00:34:18,010 --> 00:34:20,110 >> Un tagad, kad es palaist šo - 790 00:34:20,110 --> 00:34:21,030 interesanti. 791 00:34:21,030 --> 00:34:26,800 Nederīga rakstīt 4 lielumam gada memory.c 21 līnijas. 792 00:34:26,800 --> 00:34:29,284 Gada memory.c 21 līnija ir kas viens? 793 00:34:29,284 --> 00:34:30,340 Ak, interesanti. 794 00:34:30,340 --> 00:34:31,080 Bet pagaidiet. 795 00:34:31,080 --> 00:34:32,389 Izmērs 4, kas ir tas, ka atsaucoties uz? 796 00:34:32,389 --> 00:34:34,969 Es tikai nebija viens rakstīt, bet tas ir 4 izmēru. 797 00:34:34,969 --> 00:34:36,889 Kāpēc tas ir 4? 798 00:34:36,889 --> 00:34:39,280 Tas ir tāpēc, ka tas ir int, kas ir, atkal, četri baiti. 799 00:34:39,280 --> 00:34:42,510 Tātad Valgrind atradis kļūdu, ka es, glancing manu kodu, nebija. 800 00:34:42,510 --> 00:34:45,040 Un varbūt jūsu TF būtu vai nebūtu. 801 00:34:45,040 --> 00:34:48,469 Ko Bet Valgrind pārliecināts konstatēts, ka mēs esam kļūdījies tur pat 802 00:34:48,469 --> 00:34:52,719 lai gan mēs palaimējies, un dators nolēma, eh, es neesmu gatavojas crash 803 00:34:52,719 --> 00:34:57,470 tikai tāpēc, ka jūs pieskārās vienu baitu, viena INT vērtīgās atmiņas, kas jums nav 804 00:34:57,470 --> 00:34:58,550 faktiski pašu. 805 00:34:58,550 --> 00:35:00,380 >> Nu, ko vēl ir buggy šeit. 806 00:35:00,380 --> 00:35:01,180 Adrese - 807 00:35:01,180 --> 00:35:03,190 tas ir traks meklē adrese heksadecimālā. 808 00:35:03,190 --> 00:35:06,890 Tas tikai nozīmē, kaut kur kaudze ir nulles baiti pēc bloka 40 izmēra 809 00:35:06,890 --> 00:35:07,620 tiek piešķirti. 810 00:35:07,620 --> 00:35:10,610 Ļaujiet man tālināt šeit un redzēt, ja tas ir nedaudz vairāk noderīgi. 811 00:35:10,610 --> 00:35:11,410 Interesanti. 812 00:35:11,410 --> 00:35:15,600 40 baiti ir galīgi zaudējis ar zaudējumu ierakstu 1 1. 813 00:35:15,600 --> 00:35:17,840 Atkal, vairāk vārdu nekā ir noderīgs šeit. 814 00:35:17,840 --> 00:35:21,350 Bet, pamatojoties uz no galvenajām līnijām, ja man būtu iespējams koncentrēt manu 815 00:35:21,350 --> 00:35:24,070 uzmanība citu bug? 816 00:35:24,070 --> 00:35:26,570 Izskatās līnija 20 no memory.c. 817 00:35:26,570 --> 00:35:30,990 >> Tātad, ja mēs ejam atpakaļ uz 20 līnija, kas ir viens, ka jūs noteikti agrāk. 818 00:35:30,990 --> 00:35:33,030 Un tas ne vienmēr buggy. 819 00:35:33,030 --> 00:35:35,160 Bet mēs esam tas mainīja savu ietekmi. 820 00:35:35,160 --> 00:35:38,790 Tātad, kā es varu labot vismaz viena no šīm kļūdām? 821 00:35:38,790 --> 00:35:42,240 Ko es varēju darīt pēc tam, kad 21 rindā? 822 00:35:42,240 --> 00:35:47,110 Es varētu darīt bez x, tāpēc ir atdot šo atmiņu. 823 00:35:47,110 --> 00:35:49,230 Un kā es varu noteikt šo kļūdu? 824 00:35:49,230 --> 00:35:52,120 Es noteikti vajadzētu doties ne tālāk par 0. 825 00:35:52,120 --> 00:35:53,670 Tātad, ļaujiet man mēģināt un vēlreiz palaist šo. 826 00:35:53,670 --> 00:35:56,080 Atvainojiet, noteikti dodieties ne tālāk par 9. 827 00:35:56,080 --> 00:35:57,510 Padarīt atmiņu. 828 00:35:57,510 --> 00:36:00,650 Ļaujiet man atkārto Valgrind ar lielāku logā. 829 00:36:00,650 --> 00:36:01,580 Un tagad izskatās. 830 00:36:01,580 --> 00:36:02,250 Nice. 831 00:36:02,250 --> 00:36:03,270 Visi kaudze bloki tika atbrīvotas. 832 00:36:03,270 --> 00:36:04,270 Nav noplūde ir iespējama. 833 00:36:04,270 --> 00:36:07,520 Un augšā šeit, tur nav pieminēts vairāk par nederīgu labi. 834 00:36:07,520 --> 00:36:09,820 >> Tikai, lai iegūtu mantkārīgs, un pieņemsim redzēt, ja vēl viens apliecinājums 835 00:36:09,820 --> 00:36:11,050 nav iet, kā paredzēts - 836 00:36:11,050 --> 00:36:12,560 I did get lucky pirms brīža. 837 00:36:12,560 --> 00:36:15,530 Un to, ka tas ir 0, ir iespējams nevajadzīgi maldinoša. 838 00:36:15,530 --> 00:36:20,650 Darīsim 50, nedaudz patvaļīgu skaits, marka atmiņas dot slash atmiņa - 839 00:36:20,650 --> 00:36:21,410 vēl saņemt laimīgs. 840 00:36:21,410 --> 00:36:22,510 Nekas ir crashing. 841 00:36:22,510 --> 00:36:26,150 Pieņemsim, ka es vienkārši darīt kaut ko patiešām muļķīgi, un man 100. 842 00:36:26,150 --> 00:36:30,360 Ļaujiet man pārtaisīt atmiņu, punkts slash atmiņa - 843 00:36:30,360 --> 00:36:31,075 palaimējies vēlreiz. 844 00:36:31,075 --> 00:36:32,800 Kā par 1000? 845 00:36:32,800 --> 00:36:35,370 Ints ārpus, aptuveni, kur es būtu? 846 00:36:35,370 --> 00:36:37,410 Padarīt atmiņas - 847 00:36:37,410 --> 00:36:38,570 damn it. 848 00:36:38,570 --> 00:36:39,920 >> [Smiekli] 849 00:36:39,920 --> 00:36:41,270 >> Labi. 850 00:36:41,270 --> 00:36:43,920 Let 's nav putru ap vairs. 851 00:36:43,920 --> 00:36:45,120 Atkārto atmiņu. 852 00:36:45,120 --> 00:36:45,840 Tur mēs ejam. 853 00:36:45,840 --> 00:36:46,410 Labi. 854 00:36:46,410 --> 00:36:52,500 Tātad acīmredzot jums indekss 100000 Ints tālāk, kur jums ir bijis 855 00:36:52,500 --> 00:36:54,410 atmiņas, sliktas lietas notiek. 856 00:36:54,410 --> 00:36:56,430 Tātad tas, protams, nav grūti, ātri noteikums. 857 00:36:56,430 --> 00:36:58,190 Es biju veida, izmantojot izmēģinājuma un kļūdu tur nokļūt. 858 00:36:58,190 --> 00:37:02,230 Bet tas ir tāpēc, garš stāsts īss, datora atmiņa ir sadalīta 859 00:37:02,230 --> 00:37:03,580 uz šīm lietām sauc par segmentiem. 860 00:37:03,580 --> 00:37:07,260 Un dažreiz, dators faktiski jums ir devis nedaudz vairāk atmiņas 861 00:37:07,260 --> 00:37:08,400 nekā jūs lūdzat. 862 00:37:08,400 --> 00:37:12,170 Bet efektivitāti, tas ir tikai vieglāk iegūt vairāk atmiņas, bet tikai pateikt, 863 00:37:12,170 --> 00:37:13,780 ka jūs saņemat daļu no tā. 864 00:37:13,780 --> 00:37:16,370 >> Un, ja jums paveiksies reizēm, Tāpēc, jūs varētu pieskarties 865 00:37:16,370 --> 00:37:17,795 atmiņa, kas nepieder jums. 866 00:37:17,795 --> 00:37:21,860 Jums nav nekādas garantijas, ka kāda vērtība jūs varēsiet ievietot tur paliks tur, jo 867 00:37:21,860 --> 00:37:25,080 dators joprojām domā, ka tas nav Jūsu, bet tas ne vienmēr notiek 868 00:37:25,080 --> 00:37:29,910 hit citu segmentu atmiņā Datoru un izraisīt kļūda, piemēram, 869 00:37:29,910 --> 00:37:31,710 šo vienu šeit. 870 00:37:31,710 --> 00:37:32,060 Labi. 871 00:37:32,060 --> 00:37:37,240 Kādi jautājumi tad par atmiņu? 872 00:37:37,240 --> 00:37:37,590 >> Labi. 873 00:37:37,590 --> 00:37:40,610 Let 's to apskatīt šeit, tad, pēc kaut kas mēs esam, ņemot par 874 00:37:40,610 --> 00:37:48,361 piešķirta jau ilgu laiku, kas Tieši šajā failā ar nosaukumu cs50.h. 875 00:37:48,361 --> 00:37:49,420 Tātad tas ir fails. 876 00:37:49,420 --> 00:37:51,130 Šie ir tikai vesels bars no piezīmes up top. 877 00:37:51,130 --> 00:37:53,900 Un jūs, iespējams, ir aplūkot to, ja jūs poked apkārt uz ierīces. 878 00:37:53,900 --> 00:37:57,000 Bet izrādās, ka visu laiku, kad mēs, ko izmanto, lai izmantotu string kā 879 00:37:57,000 --> 00:38:01,130 sinonīms, līdzekļu palīdzību ir paziņots ka sinonīms bija ar šo 880 00:38:01,130 --> 00:38:03,990 atslēgvārds typedef, tipa definīciju. 881 00:38:03,990 --> 00:38:07,500 Un mēs esam būtībā sakot, izdarīt virknes sinonīmu char zvaigzne. 882 00:38:07,500 --> 00:38:11,190 Ka līdzekļi, ar kuriem kaudze izveidots šīs mācību riteņi pazīstams kā 883 00:38:11,190 --> 00:38:12,040 string. 884 00:38:12,040 --> 00:38:14,830 >> Tagad šeit ir tikai prototips par getchar. 885 00:38:14,830 --> 00:38:17,350 Mēs varētu būt redzējis to pirms, bet tas ir tiešām, ko tā dara. getchar 886 00:38:17,350 --> 00:38:19,070 neuzņemas nekādu argumentu, atgriež char. 887 00:38:19,070 --> 00:38:21,340 getdouble neuzņemas nekādu argumentu, atgriežas dubultā. 888 00:38:21,340 --> 00:38:24,440 getfloat notiek bez argumentiem, atgriežas peldēt, un tā tālāk. 889 00:38:24,440 --> 00:38:27,270 getint ir šeit. getlonglong ir šeit. 890 00:38:27,270 --> 00:38:28,820 Un getstring ir šeit. 891 00:38:28,820 --> 00:38:29,420 Un tas arī viss. 892 00:38:29,420 --> 00:38:33,080 Šis purpura līnija ir vēl viens apstrādātāju direktīva, jo 893 00:38:33,080 --> 00:38:35,550 hashtag sākumā tā. 894 00:38:35,550 --> 00:38:35,870 >> Labi. 895 00:38:35,870 --> 00:38:38,380 Tātad, tagad ļaujiet man iet cs50.c. 896 00:38:38,380 --> 00:38:40,400 Un mēs nerunāsim pārāk ilgi uz to. 897 00:38:40,400 --> 00:38:43,280 Bet, lai dotu jums ieskatu par to, kas ir nu jau tas viss 898 00:38:43,280 --> 00:38:46,434 laiku, ļaujiet man iet - 899 00:38:46,434 --> 00:38:48,250 pieņemsim do getchar. 900 00:38:48,250 --> 00:38:51,050 Tātad getchar lielākoties komentārus. 901 00:38:51,050 --> 00:38:52,060 Bet tas izskatās šādi. 902 00:38:52,060 --> 00:38:54,800 Tātad šis ir faktiskais funkcija getchar, ka mēs esam bijuši 903 00:38:54,800 --> 00:38:56,055 ņemot par pašsaprotamu pastāv. 904 00:38:56,055 --> 00:38:59,370 Un, pat ja mēs neesam izmantot šo vienu ka bieži vien, ja kādreiz, tas ir vismaz 905 00:38:59,370 --> 00:39:00,470 samērā vienkāršs. 906 00:39:00,470 --> 00:39:02,580 Tātad, tas ir vērts Ātri apskatīt šeit. 907 00:39:02,580 --> 00:39:06,540 >> Tātad getchar ir bezgalīgu cilpu, apzināti tā, acīmredzot. 908 00:39:06,540 --> 00:39:10,050 Tā, tad zvani - un tas ir sava veida jauka atkārtota koda mēs paši rakstīja. 909 00:39:10,050 --> 00:39:11,220 Tā aicina getstring. 910 00:39:11,220 --> 00:39:12,460 Jo tas, ko dara nozīmē, lai iegūtu char? 911 00:39:12,460 --> 00:39:14,730 Nu, jūs varētu arī mēģināt iegūt visa teksta rindiņa no lietotāja un 912 00:39:14,730 --> 00:39:16,940 tad tikai apskatīt vienu no šiem burtiem. 913 00:39:16,940 --> 00:39:19,170 60 līnijas, šeit ir maz mazliet veselība pārbaudītu. 914 00:39:19,170 --> 00:39:21,610 Ja getstring atgriezās null, pieņemsim neturpinās. 915 00:39:21,610 --> 00:39:22,820 Kaut kas nogāja greizi. 916 00:39:22,820 --> 00:39:28,120 >> Tagad tas ir nedaudz kaitinošas, bet konvencionālos in C char max iespējams, 917 00:39:28,120 --> 00:39:29,960 atspoguļo to, kas tikko balstoties uz tās nosaukumu? 918 00:39:29,960 --> 00:39:31,670 Tas ir nemainīgs. 919 00:39:31,670 --> 00:39:36,040 Tas ir tāpat kā skaitlisku vērtību lielākais char jūs varat pārstāvēt ar 920 00:39:36,040 --> 00:39:40,370 viens sakodiens, kas, iespējams, ir numurs 255, kas ir lielākais skaits jums 921 00:39:40,370 --> 00:39:42,720 pārstāv astoņi biti, sākot no nulles. 922 00:39:42,720 --> 00:39:47,460 Tāpēc es esmu izmantot šo, jo šo funkciju, kad Rakstot šo kodu, tikai tāpēc, ka 923 00:39:47,460 --> 00:39:51,753 ja kaut kas noiet greizi getchar, bet tās mērķis dzīvē ir, lai atgrieztos 924 00:39:51,753 --> 00:39:54,830 char, jums ir nepieciešams, lai kaut kā jāspēj lai signalizētu lietotājam šo 925 00:39:54,830 --> 00:39:55,840 kaut kas nogāja greizi. 926 00:39:55,840 --> 00:39:56,970 Mēs nevaram atgriezties null. 927 00:39:56,970 --> 00:39:58,480 Izrādās, ka null ir rādītājs. 928 00:39:58,480 --> 00:40:01,030 Un atkal, getchar ir , lai atgrieztos char. 929 00:40:01,030 --> 00:40:04,760 >> Tātad konvencija, ja kaut kas noiet nepareizi, ir jums, programmētājs, vai 930 00:40:04,760 --> 00:40:08,160 Šajā gadījumā mani ar bibliotēku, man bija vienkārši izlemt, patvaļīgi, ja 931 00:40:08,160 --> 00:40:12,230 kaut kas noiet greizi, es esmu gatavojas atgriezties numuru 255, kas ir patiešām 932 00:40:12,230 --> 00:40:17,240 nozīmē, ka mēs nevaram, lietotājs nevar ierakstīt raksturu pārstāv 933 00:40:17,240 --> 00:40:21,410 numurs 255, jo mums bija nozagt kā tā saukto pastiprinātas vērtību 934 00:40:21,410 --> 00:40:23,410 rada problēmas. 935 00:40:23,410 --> 00:40:27,010 Tagad izrādās, ka raksturs 255 nav kaut kas jūs varat rakstīt uz 936 00:40:27,010 --> 00:40:28,380 tastatūras, tāpēc tas nav liels darījumu. 937 00:40:28,380 --> 00:40:30,910 Lietotājam nav paziņojums, ka Esmu nozagts šo raksturu. 938 00:40:30,910 --> 00:40:34,620 Bet, ja jūs kādreiz redzēt cilvēka lapās datorsistēma dažas atsauces uz 939 00:40:34,620 --> 00:40:38,560 visi vāciņi konstante, piemēram, tas, ka saka, gadījumos, kad kļūdas Šī konstante varētu 940 00:40:38,560 --> 00:40:42,720 jāatdod, tas ir viss, daži cilvēku darīja gadus atpakaļ bija patvaļīgi nolēma 941 00:40:42,720 --> 00:40:45,680 atgriezt šo īpašo vērtību un to sauc nemainīgs gadījumā 942 00:40:45,680 --> 00:40:46,840 kaut kas noiet greizi. 943 00:40:46,840 --> 00:40:48,580 >> Tagad burvju notiek šeit lejā. 944 00:40:48,580 --> 00:40:52,600 Pirmkārt, es esmu paziņojot 67 rindā divas rakstzīmes, C1 un C2. 945 00:40:52,600 --> 00:40:57,080 Un tad 68 rindā, tur tiešām līnija kodu, kas ir atgādina 946 00:40:57,080 --> 00:41:01,140 mūsu draugs printf, ņemot vērā, ka tā tas ir procenti Cs pēdiņās. 947 00:41:01,140 --> 00:41:06,490 , Bet paziņojums par to, kas notiek šeit. sscanf nozīmē string skenēšanu - 948 00:41:06,490 --> 00:41:11,690 nozīmē skenēšanas formāta string, ergo sscanf. 949 00:41:11,690 --> 00:41:12,590 Ko tas nozīmē? 950 00:41:12,590 --> 00:41:16,310 Tas nozīmē, ka jūs pāriet uz sscanf virkni. 951 00:41:16,310 --> 00:41:18,420 Un līnija ir neatkarīgi lietotājs veidiem iekšā 952 00:41:18,420 --> 00:41:23,520 Jūs pāriet uz sscanf kādu formāta virknes, piemēram, tas, ka stāsta scanf kādi ir 953 00:41:23,520 --> 00:41:25,870 Jūs cerot lietotājs ir drukāti collas 954 00:41:25,870 --> 00:41:29,730 Jūs tad iet-in no divām adresēm gabalos atmiņas, šajā gadījumā, 955 00:41:29,730 --> 00:41:31,150 jo man ir divas vietturus. 956 00:41:31,150 --> 00:41:34,610 Tāpēc es esmu gatavojas sniegt tai adresi no C1 un C2 adresi. 957 00:41:34,610 --> 00:41:37,700 >> Un atcerēties, ka jūs piešķirat funkciju adrese kādu mainīgo, kas ir 958 00:41:37,700 --> 00:41:38,950 Ietekme? 959 00:41:38,950 --> 00:41:41,400 960 00:41:41,400 --> 00:41:45,050 Ko var, kas darbojas darīt, kā rezultātā gada piešķirot tam adresi 961 00:41:45,050 --> 00:41:48,170 mainīgs, jo atšķirībā no mainīgais pats? 962 00:41:48,170 --> 00:41:49,450 To var mainīt, vai ne? 963 00:41:49,450 --> 00:41:53,250 Ja jums bija kāds karti uz fizisku adresi, viņi var iet tur un darīt 964 00:41:53,250 --> 00:41:54,750 neatkarīgi viņi vēlas šajā adresē. 965 00:41:54,750 --> 00:41:55,800 Pati ideja šeit. 966 00:41:55,800 --> 00:41:59,950 Ja mēs pāriet sscanf, adrese divu gabalos atmiņas, pat tie mazi 967 00:41:59,950 --> 00:42:03,585 maz gabalos atmiņas, C1 un C2, taču mēs pateikt to adresi no tiem, 968 00:42:03,585 --> 00:42:05,170 sscanf var mainīt. 969 00:42:05,170 --> 00:42:08,530 >> Tātad sscanf ir mērķis dzīvē, ja mēs lasām cilvēks lapas, ir lasīt to, ko 970 00:42:08,530 --> 00:42:13,420 lietotājs drukāti, ceru, ka lietotājam, kam ierakstījāt raksturs, un varbūt 971 00:42:13,420 --> 00:42:16,470 cits raksturs, un neatkarīgi no lietotāju drukāti, pirmā rakstzīme iet 972 00:42:16,470 --> 00:42:19,310 Šeit, otrais raksturs iet šeit. 973 00:42:19,310 --> 00:42:22,470 Tagad, kā malā, tas, kā jūs to darītu tikai zinu to no dokumentācijas, 974 00:42:22,470 --> 00:42:25,570 tas, ka man tukšu vietu tur tikai nozīmē, ka man nav vienalga, ja 975 00:42:25,570 --> 00:42:28,440 lietotājs hits starpdevējs maz reizes, pirms viņš vai viņa uzskata 976 00:42:28,440 --> 00:42:30,400 raksturu, es esmu gatavojas ignorēt jebkurš atstarpēm. 977 00:42:30,400 --> 00:42:32,510 Tāpēc, ka es zinu no dokumentāciju. 978 00:42:32,510 --> 00:42:36,570 >> Tas, ka tur ir otrs% c seko atstarpēm faktiski 979 00:42:36,570 --> 00:42:37,410 apzināta. 980 00:42:37,410 --> 00:42:41,190 Es gribu, lai varētu noteikt, ja lietotājs ieskrūvē augšu vai nesadarbojās. 981 00:42:41,190 --> 00:42:45,630 Tāpēc es ceru, ka lietotājs tikai drukāti vienā raksturs, tāpēc es esmu cerot 982 00:42:45,630 --> 00:42:50,640 ka sscanf ir tikai gatavojas, lai atgrieztos vērtību 1, jo, atkal, ja es izlasīju 983 00:42:50,640 --> 00:42:55,400 dokumentācija, sscanf nolūks ir laiks ir, lai atgrieztos skaitu 984 00:42:55,400 --> 00:42:59,170 mainīgie, kas tika aizpildītas ar lietotāja ievadi. 985 00:42:59,170 --> 00:43:02,270 >> Es pieņemts diviem mainīgajiem adreses, C1 un C2. 986 00:43:02,270 --> 00:43:06,420 Es esmu cerot, lai gan, ka tikai viens no viņiem kļūst nogalināti, jo, ja sscanf 987 00:43:06,420 --> 00:43:11,130 atgriež 2, kādi ir iespējams Ietekme loģiski? 988 00:43:11,130 --> 00:43:14,600 Ka lietotājs nav tikai man vienam raksturs, piemēram, es teicu viņam vai viņai. 989 00:43:14,600 --> 00:43:17,860 Viņi, iespējams, drukāti pie vismaz divas rakstzīmes. 990 00:43:17,860 --> 00:43:22,430 Tātad, ja es tā vietā nebija otrais % C, man tikko bija viens, kas 991 00:43:22,430 --> 00:43:25,370 atklāti būtu intuitīvāks pieeju, es domāju, ka pirmo skatienu, 992 00:43:25,370 --> 00:43:30,220 jūs neesat gatavojas, lai varētu atklāt ja lietotājs ir devis jums vairāk 993 00:43:30,220 --> 00:43:31,780 ieeja, nekā jūs faktiski vēlējās. 994 00:43:31,780 --> 00:43:34,100 Tātad, tas ir netiešs veids ar kļūdu labošanas. 995 00:43:34,100 --> 00:43:35,640 >> , Bet paziņojums, ko es daru šeit. 996 00:43:35,640 --> 00:43:39,970 Pēc tam, kad es esmu pārliecināts, ka lietotājs iedeva man vienu raksturu, es atbrīvotu līniju, darot 997 00:43:39,970 --> 00:43:44,450 pretējs getstring, kas, savukārt, izmanto malloc, un tad es atpakaļ 998 00:43:44,450 --> 00:43:51,030 C1, raksturs, ka es cerēju lietotājs nesniedza un vienīgi tad, ja. 999 00:43:51,030 --> 00:43:54,680 Tik ātri glimpsed tikai, bet kādi jautājumi par getchar? 1000 00:43:54,680 --> 00:43:57,450 1001 00:43:57,450 --> 00:43:59,590 Mēs būsim atpakaļ uz kādu no citiem. 1002 00:43:59,590 --> 00:44:03,770 >> Nu, ļaujiet man iet uz priekšu un darīt to - pieņemsim, ka tagad, tikai, lai motivētu mūsu 1003 00:44:03,770 --> 00:44:08,910 diskusija nedēļā plus laiks, šis ir failu ar nosaukumu structs.h. 1004 00:44:08,910 --> 00:44:11,440 Un atkal, tas ir tikai garšu par kaut ko, kas atrodas priekšā. 1005 00:44:11,440 --> 00:44:13,090 Bet paziņojums, ka daudz Šī ir komentāri. 1006 00:44:13,090 --> 00:44:17,440 Tātad, ļaujiet man uzsvērt tikai Interesantākais tagad. 1007 00:44:17,440 --> 00:44:18,020 typedef - 1008 00:44:18,020 --> 00:44:19,700 tur ir tas pats atslēgvārds vēlreiz. 1009 00:44:19,700 --> 00:44:23,100 typedef mēs izmantojam, lai paziņot virkni kā īpašu datu tipu. 1010 00:44:23,100 --> 00:44:27,490 Jūs varat izmantot typedef, lai radītu pavisam jaunu datu tipi, kas nepastāvēja tad, kad 1011 00:44:27,490 --> 00:44:28,570 C tika izgudrots. 1012 00:44:28,570 --> 00:44:32,520 Piemēram, int nāk ar C. char nāk ar C. dubultā nāk ar C, bet 1013 00:44:32,520 --> 00:44:34,000 tur nav students jēdziens. 1014 00:44:34,000 --> 00:44:37,230 Un tomēr tas būtu diezgan lietderīgi būtu spēj uzrakstīt programmu, kas saglabā 1015 00:44:37,230 --> 00:44:40,440 ar mainīgo, studenta ID numurs, savu vārdu, un viņu māja. 1016 00:44:40,440 --> 00:44:42,890 Citiem vārdiem sakot, trīs gabalus datu, piemēram, int un 1017 00:44:42,890 --> 00:44:44,420 stīgu un vēl virkne. 1018 00:44:44,420 --> 00:44:48,220 >> Ar typedef, kas ir diezgan spēcīgs par šo un atslēgvārdu sturct par 1019 00:44:48,220 --> 00:44:53,660 struktūru, jūs, programmētājs 2013, faktiski var noteikt savu 1020 00:44:53,660 --> 00:44:57,530 datu tipi, ka nepastāvēja gadiem atpakaļ, bet kas atbilstu jūsu vajadzībām. 1021 00:44:57,530 --> 00:45:01,910 Un tā šeit, 13 līnijas, kā 19, mēs esam atzīta par jaunu datu tipu, piemēram, 1022 00:45:01,910 --> 00:45:04,320 int, bet aicinot to students. 1023 00:45:04,320 --> 00:45:09,310 Un iekšpusē šī mainīgā lieluma gatavojas ir trīs lietas - int, stīgu, 1024 00:45:09,310 --> 00:45:09,930 un stīgu. 1025 00:45:09,930 --> 00:45:13,040 Tātad, jūs varat domāt par to, kas ir patiešām šeit notika, lai gan tas ir 1026 00:45:13,040 --> 00:45:17,160 mazliet vienkāršošanu šodien, students būtībā notiek 1027 00:45:17,160 --> 00:45:19,450 lai izskatās šādi. 1028 00:45:19,450 --> 00:45:22,580 Tās būs rieciens atmiņa ar ID, nosaukums 1029 00:45:22,580 --> 00:45:25,580 jomā, un mājas lauka. 1030 00:45:25,580 --> 00:45:30,670 Un mēs varētu izmantot šīs gabalos atmiņu un piekļūt tiem šādi. 1031 00:45:30,670 --> 00:45:38,870 >> Ja es iedziļināties struct0.c, šeit ir samērā ilgi, bet pēc 1032 00:45:38,870 --> 00:45:42,630 modelis, kods, kas izmanto šo jauns triks. 1033 00:45:42,630 --> 00:45:45,790 Tātad, pirmkārt, ļaujiet man pievērst jūsu uzmanību ar interesantām detaļām up top. 1034 00:45:45,790 --> 00:45:49,670 Sharp definē studentus 3, deklarē pastāvīgu sauc studentiem un pilnvarotās 1035 00:45:49,670 --> 00:45:53,450 tā patvaļīgi skaits 3, tikko tāpēc man ir trīs skolēnus, izmantojot 1036 00:45:53,450 --> 00:45:54,830 Šī programma tagad. 1037 00:45:54,830 --> 00:45:55,960 Šeit nāk Main. 1038 00:45:55,960 --> 00:45:58,860 Un paziņojums, kā es varu paziņot masīvs studentiem? 1039 00:45:58,860 --> 00:46:00,480 Nu, es tikai izmantot to pašu sintaksi. 1040 00:46:00,480 --> 00:46:02,110 Vārds students ir acīmredzami jauna. 1041 00:46:02,110 --> 00:46:04,790 Bet studentu, klases, grupas studentiem. 1042 00:46:04,790 --> 00:46:06,720 >> Tātad diemžēl tur ir daudz atkārtotas izmantošanas noteikumu šeit. 1043 00:46:06,720 --> 00:46:07,660 Tas ir tikai skaitlis. 1044 00:46:07,660 --> 00:46:09,040 Tātad tas ir kā saka trīs. 1045 00:46:09,040 --> 00:46:11,430 Klase ir tieši tas, ko es gribu lai izsauktu mainīgo. 1046 00:46:11,430 --> 00:46:12,840 Es varētu saukt studentiem. 1047 00:46:12,840 --> 00:46:15,880 Bet klase, tas ir ne klase objektorientētā Java veida veidā. 1048 00:46:15,880 --> 00:46:17,220 Tas ir tikai klases skolēniem. 1049 00:46:17,220 --> 00:46:20,590 Un datu tipu katram elementam šajā masīvā ir students. 1050 00:46:20,590 --> 00:46:23,040 Tātad tas ir nedaudz atšķirīgs un no sakot, kaut ko 1051 00:46:23,040 --> 00:46:25,250 kā šis, tas ir vienkārši - 1052 00:46:25,250 --> 00:46:29,500 Es saku dod man trīs skolēniem un zvanu, ka masīva klasē. 1053 00:46:29,500 --> 00:46:29,800 >> Labi. 1054 00:46:29,800 --> 00:46:30,680 Tagad šeit ir četras cilpas. 1055 00:46:30,680 --> 00:46:33,480 Šis puisis ir pazīstami - atkārtot no nulles līdz trim. 1056 00:46:33,480 --> 00:46:35,160 Un šeit ir jauns gabals sintaksi. 1057 00:46:35,160 --> 00:46:37,710 Programma ir gatavojas ātri man, cilvēku, lai dotu tai students 1058 00:46:37,710 --> 00:46:39,200 ID, kas ir int. 1059 00:46:39,200 --> 00:46:44,650 Un šeit ir sintakse, ar kuru jūs varat glabāt kaut ko ID lauku at 1060 00:46:44,650 --> 00:46:48,630 vieta klasē kronšteins I. Tātad Šī sintakse nav nekas jauns. 1061 00:46:48,630 --> 00:46:51,450 Tas tikai nozīmē, iedodiet man astotais students klasē. 1062 00:46:51,450 --> 00:46:52,940 Bet tas simbols ir jauns. 1063 00:46:52,940 --> 00:46:56,320 Līdz šim mēs esam nevaram izmantot, dot, vismaz kods, kā šis. 1064 00:46:56,320 --> 00:47:01,490 Tas nozīmē iet uz struktūrai, ko sauc par students un nodot kaut ko tur. 1065 00:47:01,490 --> 00:47:05,670 Līdzīgi, šajā nākamajā rindā, 31, iet priekšu un nodot neatkarīgi lietotājs 1066 00:47:05,670 --> 00:47:10,530 par nosaukumu šeit, un to, ko viņi dara, lai māju, tas pats, iet uz priekšu un 1067 00:47:10,530 --> 00:47:13,230 ielieciet to. mājā. 1068 00:47:13,230 --> 00:47:15,955 >> Tātad, ko tas programma galu galā darīt? 1069 00:47:15,955 --> 00:47:17,220 Jūs varat redzēt nelielu teaser tur. 1070 00:47:17,220 --> 00:47:24,780 Ļaujiet man iet uz priekšu un darīt structs 0 dot slīpsvītra struktūrai 0, studenta ID 1, 1071 00:47:24,780 --> 00:47:28,250 saka David Mather, students ID 2. 1072 00:47:28,250 --> 00:47:32,070 Rob Kirkland, students ID 3. 1073 00:47:32,070 --> 00:47:35,010 Lauren Leverit - 1074 00:47:35,010 --> 00:47:38,380 un vienīgais, ko šī programma darīja, kas ir tikai pilnīgi patvaļīga, tiek 1075 00:47:38,380 --> 00:47:40,980 Es gribēju kaut ko darīt ar šiem datiem, tagad, ka es esmu mācījis mums, kā 1076 00:47:40,980 --> 00:47:43,450 izmantot structs, ir man tikko bija šis papildu cilpa šeit. 1077 00:47:43,450 --> 00:47:45,260 Es atkārtot pār masīvs studentiem. 1078 00:47:45,260 --> 00:47:49,170 Es izmantoti, mūsu, varbūt tagad pazīstams draugs, string salīdzināt, stircomp uz 1079 00:47:49,170 --> 00:47:53,780 pārbaude ir 8 studenta māja vienāds ar Mather? 1080 00:47:53,780 --> 00:47:56,760 Un ja tā, vienkārši izdrukāt kaut ko patvaļīgi, piemēram, jā, tā ir. 1081 00:47:56,760 --> 00:47:59,430 Bet atkal, tikai dod man iespēju izmantot un atkārtoti, un 1082 00:47:59,430 --> 00:48:02,270 atkārtoti šo jauno dot apzīmējumu. 1083 00:48:02,270 --> 00:48:03,250 >> Tātad, kas rūpējas, vai ne? 1084 00:48:03,250 --> 00:48:06,270 Nāk klajā ar studentu programmu, ir nedaudz patvaļīga, bet izrādās, 1085 00:48:06,270 --> 00:48:09,800 ka mēs varam darīt noderīgas lietas ar šī, piemēram, kā šādi. 1086 00:48:09,800 --> 00:48:14,600 Tas ir daudz sarežģītāks struktūrai C. To ieguva ducis vai vairākās jomās, 1087 00:48:14,600 --> 00:48:15,880 nedaudz cryptically nosaukts. 1088 00:48:15,880 --> 00:48:20,110 Bet, ja jūs esat kādreiz dzirdējuši par grafikas failu formātu sauc bitmap, BMP, tā 1089 00:48:20,110 --> 00:48:22,830 Izrādās, ka bitmap failu formāts diezgan daudz, izskatās, ka tas. 1090 00:48:22,830 --> 00:48:24,200 Tas ir muļķīgi mazliet Smiley sejas. 1091 00:48:24,200 --> 00:48:27,840 Tas ir neliels attēls, es esmu pietuvināto uz diezgan liels, lai es varētu redzēt katru 1092 00:48:27,840 --> 00:48:30,410 Individuālo punktiem vai pikseļiem. 1093 00:48:30,410 --> 00:48:33,800 Tagad, izrādās, mēs varam pārstāvēt melns punkts ar, teiksim, uz numuru 0. 1094 00:48:33,800 --> 00:48:35,520 Un balts punkts ar numuru 1. 1095 00:48:35,520 --> 00:48:39,140 >> Tātad, citiem vārdiem sakot, ja jūs vēlaties, lai pievērstu Smiley sejas un saglabājiet šo attēlu 1096 00:48:39,140 --> 00:48:42,680 dators, pietiek, lai uzglabātu nullēm un tie, kas izskatās kā šis, kad, 1097 00:48:42,680 --> 00:48:45,250 atkal tie ir balti un nulles ir melna. 1098 00:48:45,250 --> 00:48:48,290 Un kopā, ja jūs faktiski ir zoboties par vieninieku un nuļļu, jums ir 1099 00:48:48,290 --> 00:48:51,030 režģis pikseļi, un, ja jūs noteikt tos ārā, jums ir gudrs 1100 00:48:51,030 --> 00:48:52,560 maz Smiley sejas. 1101 00:48:52,560 --> 00:48:58,150 Tagad, bitmap failu formātu, BMP, ir efektīvi, ka zem motora pārsega, 1102 00:48:58,150 --> 00:49:00,970 bet ar vairāk pikseļu Sot, ka jūs faktiski var pārstāvēt krāsas. 1103 00:49:00,970 --> 00:49:05,170 >> Bet, ja jums ir daudz sarežģītākas failu formātus, piemēram, BMP un JPEG un GIF 1104 00:49:05,170 --> 00:49:09,360 , ar kuru jūs varētu būt pazīstami, tie failus uz diska, parasti ne tikai 1105 00:49:09,360 --> 00:49:13,760 ir nullēm un tiem, attiecībā uz pikseļiem, bet tie ir daži metadati, kā arī - 1106 00:49:13,760 --> 00:49:16,960 meta tādā ziņā, ka nav īsti datus, bet tas ir noderīgi, lai būtu. 1107 00:49:16,960 --> 00:49:21,370 Tātad šie lauki te nozīmē, un mēs redzēsim šo sīkāk P-komplektā 1108 00:49:21,370 --> 00:49:25,810 5, ka pirms nullēm un tiem, kas pārstāv pikseļu attēlu, 1109 00:49:25,810 --> 00:49:29,110 tur ir metadatu ķekars, piemēram no attēla izmēru un 1110 00:49:29,110 --> 00:49:30,250 platums no attēla. 1111 00:49:30,250 --> 00:49:32,910 Un paziņojums es esmu noplūkšanas off daži patvaļīgu lietas šeit - 1112 00:49:32,910 --> 00:49:34,260 platums un augstums. 1113 00:49:34,260 --> 00:49:36,160 Bitu skaits, un dažas citas lietas. 1114 00:49:36,160 --> 00:49:37,840 Tātad tur ir dažas failā metadatiem. 1115 00:49:37,840 --> 00:49:41,470 >> Bet saprast, kā faili tiek noteikti Šajā veidā, jūs faktiski var 1116 00:49:41,470 --> 00:49:45,890 tad manipulēt attēlus, atgūt attēlus no diska, mainīt attēlus. 1117 00:49:45,890 --> 00:49:47,560 Bet jūs varat ne vienmēr uzlabot tos. 1118 00:49:47,560 --> 00:49:48,480 Man vajadzēja fotogrāfiju. 1119 00:49:48,480 --> 00:49:52,840 Tāpēc es devos atpakaļ uz RJ šeit, kas redzējāt uz ekrāna diezgan kādu laiku atpakaļ. 1120 00:49:52,840 --> 00:49:57,160 Un, ja es atvērtu Keynote šeit, tas ir kas notiek, ja jūs mēģināt, lai tuvinātu un 1121 00:49:57,160 --> 00:49:59,380 uzlabot RJ. 1122 00:49:59,380 --> 00:50:01,480 Viņš ir nesaņemu labāk tiešām. 1123 00:50:01,480 --> 00:50:06,240 Tagad Keynote ir sava veida nojauc tā Mazliet, tikai spīdums pār 1124 00:50:06,240 --> 00:50:11,040 Fakts, ka RJ nesaņem īpaši pastiprināta, ja jūs zoom in 1125 00:50:11,040 --> 00:50:13,310 Un, ja darīt to šādā veidā, skatīt kvadrātu? 1126 00:50:13,310 --> 00:50:15,490 Jā, jūs varat noteikti redzēt kvadrātu uz projektoru. 1127 00:50:15,490 --> 00:50:17,690 >> Tas ir tas, ko jūs saņemsiet, kad jūs palielināt. 1128 00:50:17,690 --> 00:50:22,570 Bet saprast, kā mūsu RJ vai Smiley sejas tiek īstenota ļaus mums 1129 00:50:22,570 --> 00:50:24,950 faktiski rakstīt kodu, kas manipulē šīs lietas. 1130 00:50:24,950 --> 00:50:29,970 Un es domāju, ka man beidzas šajā piezīmē, ar 55 sekundes uzlabotu tas, 1131 00:50:29,970 --> 00:50:31,230 Es uzdrošinos, teiksim diezgan maldinošs. 1132 00:50:31,230 --> 00:50:32,990 >> [VIDEO PLAYBACK] 1133 00:50:32,990 --> 00:50:34,790 >> -Viņš guļ. 1134 00:50:34,790 --> 00:50:38,310 Par ko, es nezinu. 1135 00:50:38,310 --> 00:50:41,200 >> -Tātad, ko mēs zinām? 1136 00:50:41,200 --> 00:50:45,280 >> -Tas at 09:15 Ray Santoya bija pie ATM. 1137 00:50:45,280 --> 00:50:47,830 >> -Tātad jautājums ir tas, ko viņš dara pie 09:16? 1138 00:50:47,830 --> 00:50:50,750 >> -Šaušana deviņu milimetru kaut ko. 1139 00:50:50,750 --> 00:50:52,615 Varbūt viņš redzēja snaiperis. 1140 00:50:52,615 --> 00:50:54,760 >> -Vai bija strādāt ar viņu. 1141 00:50:54,760 --> 00:50:56,120 >> -Pagaidiet. 1142 00:50:56,120 --> 00:50:57,450 Ej atpakaļ vienu. 1143 00:50:57,450 --> 00:50:58,700 >> -Ko tu redzi? 1144 00:50:58,700 --> 00:51:05,530 1145 00:51:05,530 --> 00:51:09,490 >> -Bring savu seju uz augšu, pilna ekrāna. 1146 00:51:09,490 --> 00:51:09,790 >> -Viņa brilles. 1147 00:51:09,790 --> 00:51:11,040 >> -Tur ir pārdomas. 1148 00:51:11,040 --> 00:51:21,790 1149 00:51:21,790 --> 00:51:23,520 >> -Tas ir Neuvitas beisbola komanda. 1150 00:51:23,520 --> 00:51:24,530 Tas ir viņu logo. 1151 00:51:24,530 --> 00:51:27,040 >> -Un viņš runā ar kurš ir valkājot, ka jaka. 1152 00:51:27,040 --> 00:51:27,530 >> [END VIDEO PLAYBACK] 1153 00:51:27,530 --> 00:51:29,180 >> DAVID J. Malan: Tas būs būt problēma Set 5. 1154 00:51:29,180 --> 00:51:30,720 Mēs redzēsim jūs nākamnedēļ. 1155 00:51:30,720 --> 00:51:32,330 >> MALE SPEAKER: Nākamajā CS50. 1156 00:51:32,330 --> 00:51:39,240 >> [Crickets chirping] 1157 00:51:39,240 --> 00:51:41,270 >> [Mūzikas atskaņošanas]