1 00:00:00,000 --> 00:00:10,970 >> [Музика свира] 2 00:00:10,970 --> 00:00:12,536 >> Давид Ј. Малан: У реду. 3 00:00:12,536 --> 00:00:13,392 >> [Смех] 4 00:00:13,392 --> 00:00:14,240 >> Добродошао назад. 5 00:00:14,240 --> 00:00:14,990 Ово је ЦС50. 6 00:00:14,990 --> 00:00:16,890 И ово је крај недеље пет. 7 00:00:16,890 --> 00:00:20,020 И до сада, ми смо прилично узимали здраво за готово да нема 8 00:00:20,020 --> 00:00:23,480 постоји овај компајлер, јека, да сте позивајући се путем овог 9 00:00:23,480 --> 00:00:27,100 други алат који се зове Марка некако магично конвертује изворни код 10 00:00:27,100 --> 00:00:31,350 у објектном коду, у нуле и јединице да је ваш рачунари процесор, централна 11 00:00:31,350 --> 00:00:33,410 јединица за обраду, у ствари разуме. 12 00:00:33,410 --> 00:00:36,770 Али испоставља се да је број који је дешава испод хаубе у 13 00:00:36,770 --> 00:00:38,690 између улаза и излаза. 14 00:00:38,690 --> 00:00:41,800 >> И ја бих да предложи да се месо да се у мало детаљније у 15 00:00:41,800 --> 00:00:45,130 ова четири корака, имамо нешто што се зове претходна обрада, нешто 16 00:00:45,130 --> 00:00:48,300 зове састављање, које смо видели, нешто што се зове монтажа, и 17 00:00:48,300 --> 00:00:49,420 нешто што се зове повезивање. 18 00:00:49,420 --> 00:00:53,270 Дакле, до сада, у неком од наших програми, ми смо имали оштар укључује. 19 00:00:53,270 --> 00:00:56,650 Недавно смо имали неки оштар дефинише за константе. 20 00:00:56,650 --> 00:01:00,660 Тако испада да оне ствари које имају префикс хеш симбола или 21 00:01:00,660 --> 00:01:04,150 Фунта је симбол су унапред процесор директиве. 22 00:01:04,150 --> 00:01:07,960 То је само фенси начин да се каже да је линија кода који је заиста 23 00:01:07,960 --> 00:01:12,280 претвара у нешто друго пре рачунар чак и покушати да конвертујете 24 00:01:12,280 --> 00:01:13,800 Програм у нуле и јединице. 25 00:01:13,800 --> 00:01:19,000 >> На пример, оштро укључује стандард У / х., Прилично једноставно значи ићи 26 00:01:19,000 --> 00:01:24,010 напред, зграби садржај досијеа стдио.х и налепите их тамо. 27 00:01:24,010 --> 00:01:25,880 Дакле, нема нуле и јединице у том тренутку још. 28 00:01:25,880 --> 00:01:27,470 То је заиста само замена. 29 00:01:27,470 --> 00:01:30,790 И то је урадио током тзв претходна обрада фази, када сте 30 00:01:30,790 --> 00:01:34,230 стварно извршавати јека или посебно Направите у већини случајева. 31 00:01:34,230 --> 00:01:36,950 Дакле, све ово што се дешава Први аутоматски до сада. 32 00:01:36,950 --> 00:01:38,800 >> Онда долази компилација корак. 33 00:01:38,800 --> 00:01:40,920 Али ми смо били превише поједностављена компилација. 34 00:01:40,920 --> 00:01:45,060 Израда програма заиста значи узми од нечега као Ц, 35 00:01:45,060 --> 00:01:48,430 изворног кода смо писање, доле на нешто што се зове скупштину. 36 00:01:48,430 --> 00:01:52,900 Скупштина језик је нижи ниво језик који, на срећу, нећемо 37 00:01:52,900 --> 00:01:55,480 су много прилике да Пишем овај семестар. 38 00:01:55,480 --> 00:01:59,100 Али, то је на најнижем нивоу у осећај да сте буквално почнете да пишете 39 00:01:59,100 --> 00:02:04,270 сабира и одузима и множите и оптерећења из меморије и сачувате у меморију, 40 00:02:04,270 --> 00:02:08,259 Веома основне инструкције које рачунар, испод хаубе, 41 00:02:08,259 --> 00:02:09,639 заиста разуме. 42 00:02:09,639 --> 00:02:14,930 >> На крају, монтажа траје тај језик на нула и јединица које смо 43 00:02:14,930 --> 00:02:16,190 описујући до сада. 44 00:02:16,190 --> 00:02:19,270 И заиста на крају, ту је и такозвани повезивање фазе, које ћемо 45 00:02:19,270 --> 00:02:22,360 видети у само једном тренутку, који комбинује Ваши нуле и јединице нулама и 46 00:02:22,360 --> 00:02:24,870 оне друге људе пре него Направили сте. 47 00:02:24,870 --> 00:02:26,660 >> Па размислите овај супер једноставан програм. 48 00:02:26,660 --> 00:02:27,560 То је из недеље 1. 49 00:02:27,560 --> 00:02:29,610 Само је рекао, Хелло Ворлд, на екрану. 50 00:02:29,610 --> 00:02:30,920 Трчали смо кроз ово јека. 51 00:02:30,920 --> 00:02:33,200 Или ми је трчао кроз Марка која је трајала јека. 52 00:02:33,200 --> 00:02:36,170 И испоручују у времену у коме нека нула и јединица. 53 00:02:36,170 --> 00:02:38,100 Али испоставило се да постоји међукорак. 54 00:02:38,100 --> 00:02:40,460 Ако ја овде - пардон, није Желим да га видим још. 55 00:02:40,460 --> 00:02:44,800 Ако ја одем у моју уређаја и ја отворим хелло.ц, овде 56 00:02:44,800 --> 00:02:46,160 то је исти програм. 57 00:02:46,160 --> 00:02:48,600 И шта ћу да урадим у мојој терминалу прозор овде ћу 58 00:02:48,600 --> 00:02:51,430 покренути цланг уместо Марка, који аутоматизује све четири 59 00:02:51,430 --> 00:02:52,870 ти кораци за нас. 60 00:02:52,870 --> 00:02:58,620 И ја ћу да урадим јека-С и онда хелло.ц и онда ући. 61 00:02:58,620 --> 00:03:00,590 >> И ја се трепери брзо опет, што је добро. 62 00:03:00,590 --> 00:03:05,280 А сада у мало већи прозор, Ја ћу отворити гедит овде. 63 00:03:05,280 --> 00:03:09,610 И ја ћу да отворим тај фајл, Испоставило се, то се зове хелло.с 64 00:03:09,610 --> 00:03:11,870 садржи тај асемблеру Сам раније поменуо. 65 00:03:11,870 --> 00:03:15,060 И то је оно што се зове скупштина језик, прилично низак ниво 66 00:03:15,060 --> 00:03:18,470 инструкције да ваш АМД процесор или шта год да је то што је унутра 67 00:03:18,470 --> 00:03:19,350 разуме. 68 00:03:19,350 --> 00:03:24,480 И мов је за потез. позив за позива, на веома ниском нивоу функцију. 69 00:03:24,480 --> 00:03:26,380 под је за одузимање. 70 00:03:26,380 --> 00:03:30,370 >> Дакле, када имате одређену процесор унутра вашег рачунара, што га чини 71 00:03:30,370 --> 00:03:34,300 различита, у односу на друга ЦПУ тржиште, које је он инструкције 72 00:03:34,300 --> 00:03:39,460 разуме и често колико је ефикасан је, колико брзо је на извршавање неке 73 00:03:39,460 --> 00:03:40,380 тих инструкција. 74 00:03:40,380 --> 00:03:45,150 Сада више о овоме, можете да следеће јесени ЦС61 на колеџу. 75 00:03:45,150 --> 00:03:48,170 Али овде се, на пример, неколико Идентификатори који може да изгледа познато. 76 00:03:48,170 --> 00:03:50,150 хелло.ц је име програма. 77 00:03:50,150 --> 00:03:51,070 >> Текст. - 78 00:03:51,070 --> 00:03:54,190 нема много интереса тамо Управо сада, сећам да је текст 79 00:03:54,190 --> 00:03:59,190 сегмента, од понедељка, где је у меморија ваш програм заправо завршава. 80 00:03:59,190 --> 00:04:01,330 Дакле, то је барем нејасно познато тамо. 81 00:04:01,330 --> 00:04:03,730 Овде, наравно, помиње наше главне функције. 82 00:04:03,730 --> 00:04:07,220 Скролујете доле, они се односе на ствари називају регистри, веома мали комади 83 00:04:07,220 --> 00:04:09,190 меморије унутар вашег стварног процесора. 84 00:04:09,190 --> 00:04:12,930 И ако сам доле и помицати даље, видим неку врсту 85 00:04:12,930 --> 00:04:14,240 индиректни помињање АСЦИИ. 86 00:04:14,240 --> 00:04:17,120 И заиста постоји,, је то ниска, Здраво, зарез, свет. 87 00:04:17,120 --> 00:04:20,079 >> Дакле, да скратим причу, ово је било дешава за вас, аутоматски, 88 00:04:20,079 --> 00:04:22,140 испод хаубе све ово време. 89 00:04:22,140 --> 00:04:26,450 А шта се дешава када је стварно обавите ви јека, или путем 90 00:04:26,450 --> 00:04:29,150 Направите, ви прво све, из изворног кода, 91 00:04:29,150 --> 00:04:30,700 тзв асемблеру. 92 00:04:30,700 --> 00:04:35,210 Затим Цланг конвертује ове Скупштине језик до нуле и јединице. 93 00:04:35,210 --> 00:04:38,340 И то је слајд који смо почели Наша расправа у недељи на 0 - 94 00:04:38,340 --> 00:04:39,840 а затим недеља 1 на. 95 00:04:39,840 --> 00:04:44,030 И на крају, те нуле и јединице комбинују са нуле и јединице 96 00:04:44,030 --> 00:04:47,190 из тих библиотека смо узимали здраво за готово, као Стандард И / О или 97 00:04:47,190 --> 00:04:50,010 Стринг библиотека или чак ЦС50 библиотека. 98 00:04:50,010 --> 00:04:54,200 >> Тако да сликам ову слику више визуелно, имамо хелло.ц. 99 00:04:54,200 --> 00:04:57,220 И то, наравно, користи иф функционишу рећи, здраво свет. 100 00:04:57,220 --> 00:05:01,810 Компилација корак је потребно до да фајл смо управо видели хелло.с, чак 101 00:05:01,810 --> 00:05:04,290 иако је то обично избрисана аутоматски за вас. 102 00:05:04,290 --> 00:05:06,050 Али то је скупштина код у средњем кораку. 103 00:05:06,050 --> 00:05:09,750 И онда када смо окупи склоп језик, да тако кажем, то је када се 104 00:05:09,750 --> 00:05:10,830 се оне нула и јединица. 105 00:05:10,830 --> 00:05:13,920 Тако смо зумирао ефикасно данас оно што смо узимали здраво за готово, 106 00:05:13,920 --> 00:05:16,430 значи да ће изворни код да уложи приговор код. 107 00:05:16,430 --> 00:05:18,850 >> Али на крају, сада та иста слика - хајде да гурају га до 108 00:05:18,850 --> 00:05:20,020 лева страна. 109 00:05:20,020 --> 00:05:22,880 И имајте на уму да је у самом врху Поменуо сам стдио.х. 110 00:05:22,880 --> 00:05:25,030 То је фајл који смо укључени у готово свим 111 00:05:25,030 --> 00:05:26,250 Програми се писало. 112 00:05:26,250 --> 00:05:28,830 И то је фајл чији садржај се копија налепљен, 113 00:05:28,830 --> 00:05:30,350 ефикасно врху вашег кода. 114 00:05:30,350 --> 00:05:34,170 Али испоставило се да је, на рачунару систем негде, ту је вероватно 115 00:05:34,170 --> 00:05:39,150 стдио.ц фајл који је неко написао година пре да имплементира све 116 00:05:39,150 --> 00:05:41,870 функције које су проглашене у стдио.х. 117 00:05:41,870 --> 00:05:45,465 >> Сада у стварности је то вероватно не на ваш Мац или ПЦ рачунар, или чак у 118 00:05:45,465 --> 00:05:47,660 ЦС50 апарат је сирови Ц код. 119 00:05:47,660 --> 00:05:52,710 Неко је већ саставио и укључени О фајл за објектном коду или.. 120 00:05:52,710 --> 00:05:56,020 фајл, који се односи на заједничке библиотеке који је претходно инсталиран и 121 00:05:56,020 --> 00:05:57,240 унапред саставио за вас. 122 00:05:57,240 --> 00:06:01,950 Али, претпоставимо да заиста постоји на нашем рачунару стдио.ц у паралелно 123 00:06:01,950 --> 00:06:02,650 са јека. 124 00:06:02,650 --> 00:06:04,960 Ваш број је прикупљен и окупили. 125 00:06:04,960 --> 00:06:09,200 стдио.ц је код се саставља и окупили, тако да је ова последња 126 00:06:09,200 --> 00:06:13,730 корак, овде доле, морамо некако веза, да тако кажем, ваши нуле и јединице 127 00:06:13,730 --> 00:06:18,430 са својим нуле и јединице у једну једноставан програм који је на крају 128 00:06:18,430 --> 00:06:20,540 зове само Здраво. 129 00:06:20,540 --> 00:06:23,340 >> Дакле, то је све од магије која је се дешавало до сада. 130 00:06:23,340 --> 00:06:26,430 И да ће наставити да се ове процеси за готово, али схватају 131 00:06:26,430 --> 00:06:28,750 има много сочних детаља тамо дешава испод. 132 00:06:28,750 --> 00:06:31,920 И то је оно што чини ваш рачунар са Интел Инсиде 133 00:06:31,920 --> 00:06:33,940 нарочито разликују. 134 00:06:33,940 --> 00:06:37,020 >> Дакле, у том смислу, ако желите да придружите нам се за ручак у петак, идите до 135 00:06:37,020 --> 00:06:41,570 уобичајеној цс50.нет/рсвп место, 1:15 АМ у петак. 136 00:06:41,570 --> 00:06:43,400 А сада неколико саопштења. 137 00:06:43,400 --> 00:06:44,670 Дакле, имамо добре вести. 138 00:06:44,670 --> 00:06:45,970 И ми имамо лоше вести. 139 00:06:45,970 --> 00:06:47,260 Почните са неким добрим вестима овде. 140 00:06:47,260 --> 00:06:52,038 141 00:06:52,038 --> 00:06:54,510 >> [Стење] 142 00:06:54,510 --> 00:06:54,710 >> У реду. 143 00:06:54,710 --> 00:06:56,670 Па, то је технички празник, па то није толико дар од нас. 144 00:06:56,670 --> 00:06:58,030 Али, онда, наравно, лоше вести. 145 00:06:58,030 --> 00:07:00,550 146 00:07:00,550 --> 00:07:01,880 >> [Стење] 147 00:07:01,880 --> 00:07:03,530 >> Провео сам доста времена на ове анимације. 148 00:07:03,530 --> 00:07:04,690 >> [Смех] 149 00:07:04,690 --> 00:07:07,000 >> Ту ће бити преглед сесија ово долази понедељак. 150 00:07:07,000 --> 00:07:08,340 То ће бити у 5:30 часова. 151 00:07:08,340 --> 00:07:11,210 Ми ћемо вас подсетити на све те детаље путем е-поште на курсу је 152 00:07:11,210 --> 00:07:13,470 сајт за само пар дана. 153 00:07:13,470 --> 00:07:16,610 Биће снимљен и доступни убрзо после тога. 154 00:07:16,610 --> 00:07:19,200 Дакле, ако не можете да је понедељак Ноћ слот, не брини. 155 00:07:19,200 --> 00:07:22,270 Секције ове недеље ће такође фокусирати на преглед за квиз. 156 00:07:22,270 --> 00:07:25,670 Ако је одељак је у понедељак, што је заиста универзитет празник, ми ћемо 157 00:07:25,670 --> 00:07:26,920 увек испуни у одељку. 158 00:07:26,920 --> 00:07:28,890 Ако једноставно не може да направи секција јер идете 159 00:07:28,890 --> 00:07:29,860 е, то је у реду. 160 00:07:29,860 --> 00:07:33,710 Учествујте у недељу или уторак секције или Туне-у да Јасоновом град, који је 161 00:07:33,710 --> 00:07:35,110 доступни онлине. 162 00:07:35,110 --> 00:07:37,490 >> Дакле, још лоших вести. 163 00:07:37,490 --> 00:07:41,960 Дакле, у складу са програмом, имамо предавање у петак. 164 00:07:41,960 --> 00:07:43,690 Али, добра вест - 165 00:07:43,690 --> 00:07:44,860 јасно, сам провео превише времена на то. 166 00:07:44,860 --> 00:07:45,280 >> [Смех] 167 00:07:45,280 --> 00:07:47,140 >> Ми ћемо отказати поред петка предавања. 168 00:07:47,140 --> 00:07:50,590 Тако да ће бити поклон за нас, тако да може заиста лепо предах у 169 00:07:50,590 --> 00:07:52,990 између ове недеље и две недеље од данас. 170 00:07:52,990 --> 00:07:57,460 Тако да нема предавања следеће недеље, само мали мали квиз, за ​​који треба да буде 171 00:07:57,460 --> 00:07:59,030 добијају све више узбуђен. 172 00:07:59,030 --> 00:08:03,870 >> Па хајде да сада обратимо пажњу на нешто што је заиста више визуелни 173 00:08:03,870 --> 00:08:06,990 и узбудљивије и да створи услове за шта ће бити на видику 174 00:08:06,990 --> 00:08:08,420 у само неколико недеља. 175 00:08:08,420 --> 00:08:12,160 Након првог квиза, прелазимо Фокус нашег проблем поставе на други 176 00:08:12,160 --> 00:08:16,710 домен специфичан проблем, да од форензика или безбедности више уопште. 177 00:08:16,710 --> 00:08:19,550 >> У ствари, традиција са овим проблемом сет је за мене један од 178 00:08:19,550 --> 00:08:24,850 асистент или ЦАС да хода преко кампус узимање неке фотографије 179 00:08:24,850 --> 00:08:29,450 препознатљиве али не очигледне људи, места или ствари, онда ја сваке године 180 00:08:29,450 --> 00:08:34,520 некако успевају да случајно брисање или оштети дигиталних медијских картица 181 00:08:34,520 --> 00:08:35,720 што је унутар наше камере. 182 00:08:35,720 --> 00:08:36,860 Али ништа страшно. 183 00:08:36,860 --> 00:08:39,200 Ја могу ићи напред и прикључите да у мој компјутер. 184 00:08:39,200 --> 00:08:43,010 Ја могу направити форензичку слику о њој, па да говоре, копирањем и нуле 185 00:08:43,010 --> 00:08:46,830 Они с тога меморијске картице, било његова СД картица или Цомпацт Фласх картица или 186 00:08:46,830 --> 00:08:48,100 шта год да сте упознати са. 187 00:08:48,100 --> 00:08:49,300 И онда можемо да се преда. 188 00:08:49,300 --> 00:08:53,190 >> И тако изазов, између осталог ствари за вас, биће да пишем 189 00:08:53,190 --> 00:08:58,630 Ц код који опоравља гомилу ЈПЕГ за мене и открио ће бити 190 00:08:58,630 --> 00:09:00,190 ти људи, места или ствари. 191 00:09:00,190 --> 00:09:03,340 И такође ћемо разговарати, у овом проблему постављен и за дане који долазе, о 192 00:09:03,340 --> 00:09:04,440 графика уопштено. 193 00:09:04,440 --> 00:09:06,140 Смо их користе, курс, за избити. 194 00:09:06,140 --> 00:09:09,080 Али, ви сте некако узети здраво за готово постоји висок ниво ове појмове 195 00:09:09,080 --> 00:09:10,680 од правоугаоника и овала. 196 00:09:10,680 --> 00:09:12,450 Али, испод хаубе постоје пиксела. 197 00:09:12,450 --> 00:09:14,370 И ви сте морали да почну размишљам о томе. 198 00:09:14,370 --> 00:09:18,800 Или ћете за П-СЕТ 4 морају да размишљају о јаз између својих цигле, како 199 00:09:18,800 --> 00:09:21,990 брзо сте лопта креће преко екран за избити. 200 00:09:21,990 --> 00:09:24,830 Тако да је тај појам тачке на екрану који је 201 00:09:24,830 --> 00:09:26,290 долазе у игру већ. 202 00:09:26,290 --> 00:09:29,430 >> Сада оно што видите, иако, је оно добијате на екрану рачунара. 203 00:09:29,430 --> 00:09:33,680 Ако сте икада гледали неки добар или лош ТВ, шансе су они прилично 204 00:09:33,680 --> 00:09:36,280 третира публику као тецхнопхобес који заправо не 205 00:09:36,280 --> 00:09:37,630 Знам много о рачунарству. 206 00:09:37,630 --> 00:09:40,840 Тако да је врло лако за полицију детектив да кажем, можете да 207 00:09:40,840 --> 00:09:41,710 чишћење да се за мене? 208 00:09:41,710 --> 00:09:42,710 Или побољша, зар не? 209 00:09:42,710 --> 00:09:45,550 Побољшајте је као звучна реч у највише било који злочин у вези шоу. 210 00:09:45,550 --> 00:09:49,240 А реалност је ако се узме веома мутна слика једног осумњиченог ради 211 00:09:49,240 --> 00:09:51,620 нешто лоше, не можете само побољшати га. 212 00:09:51,620 --> 00:09:53,080 Не можете да увећате бесконачно. 213 00:09:53,080 --> 00:09:56,350 Не можете да видите у одсјајем на нечији ока који су починили тај 214 00:09:56,350 --> 00:09:59,860 одређени злочин, упркос преваленција на ТВ. 215 00:09:59,860 --> 00:10:04,110 >> И тако са да ћемо мотивисати да предстојећи сет проблема са Осврт на 216 00:10:04,110 --> 00:10:05,765 неке емисије са којом бити упознат. 217 00:10:05,765 --> 00:10:06,500 >> [ВИДЕО РЕПРОДУКЦИЈА] 218 00:10:06,500 --> 00:10:07,835 >> -У реду. 219 00:10:07,835 --> 00:10:09,956 Сада, хајде да добро погледам. 220 00:10:09,956 --> 00:10:17,060 221 00:10:17,060 --> 00:10:17,766 >> -Стани. 222 00:10:17,766 --> 00:10:18,658 Рун то назад. 223 00:10:18,658 --> 00:10:19,550 >> -Чекај мало. 224 00:10:19,550 --> 00:10:21,580 Иди десно. 225 00:10:21,580 --> 00:10:21,800 >> -Ту. 226 00:10:21,800 --> 00:10:22,690 Фреезе то. 227 00:10:22,690 --> 00:10:23,692 >> -Пун екран. 228 00:10:23,692 --> 00:10:23,846 >> -У реду. 229 00:10:23,846 --> 00:10:24,154 Фреезе то. 230 00:10:24,154 --> 00:10:25,140 >> -Затегните се на то, хоћеш ли? 231 00:10:25,140 --> 00:10:27,090 >> -Вектор у тог момка на задња точка. 232 00:10:27,090 --> 00:10:29,730 >> Зоом-у овде на овом месту. 233 00:10:29,730 --> 00:10:33,700 >> -Са правом опремом, осликан може бити увећана и изоштрио. 234 00:10:33,700 --> 00:10:34,490 >> -Шта је то? 235 00:10:34,490 --> 00:10:35,870 >> -То је проширење програма. 236 00:10:35,870 --> 00:10:36,793 >> -Можеш ли јасно да се било? 237 00:10:36,793 --> 00:10:38,560 >> -Не знам. 238 00:10:38,560 --> 00:10:39,090 Хајде да га побољша. 239 00:10:39,090 --> 00:10:41,690 >> -Унапређење одељак-6. 240 00:10:41,690 --> 00:10:43,510 >> -Ја побољшан ниво детаља и - 241 00:10:43,510 --> 00:10:44,456 >> -Мислим да је довољно да се побољша. 242 00:10:44,456 --> 00:10:45,402 Пустите га да свом екрану. 243 00:10:45,402 --> 00:10:47,300 >> -Унапређење одраз у свом оку. 244 00:10:47,300 --> 00:10:49,330 >> -Хајде да ово кроз Видео проширење. 245 00:10:49,330 --> 00:10:50,340 >> -Едгар, можете да побољшате ово? 246 00:10:50,340 --> 00:10:52,320 >> -Држи се. 247 00:10:52,320 --> 00:10:54,290 >> -Била сам радио на овој размишљање. 248 00:10:54,290 --> 00:10:55,560 >> -Неко је одраз. 249 00:10:55,560 --> 00:10:56,440 >> -Рефлексија. 250 00:10:56,440 --> 00:10:57,940 >> -Ту је одраз на човековом лицу. 251 00:10:57,940 --> 00:10:58,860 >> -Рефлексија. 252 00:10:58,860 --> 00:10:59,710 >> -Ту је одраз. 253 00:10:59,710 --> 00:11:00,900 >> -Увећамо огледалу. 254 00:11:00,900 --> 00:11:03,500 >> -Можете да видите рефлексију. 255 00:11:03,500 --> 00:11:04,700 >> -Можеш ли да побољша слику одавде? 256 00:11:04,700 --> 00:11:05,700 >> -Можеш ли да га побољша овде? 257 00:11:05,700 --> 00:11:06,500 >> -Да ли га побољшати? 258 00:11:06,500 --> 00:11:07,380 >> -Да ли га побољшати? 259 00:11:07,380 --> 00:11:08,190 >> -Можемо ли ово побољшати? 260 00:11:08,190 --> 00:11:08,940 >> -Да ли га побољшати? 261 00:11:08,940 --> 00:11:10,280 >> -Чекај мало, ја ћу повећати. 262 00:11:10,280 --> 00:11:11,570 >> Зоом-у на врата. 263 00:11:11,570 --> 00:11:12,180 >> -Кс10. 264 00:11:12,180 --> 00:11:13,052 >> -Зоом. 265 00:11:13,052 --> 00:11:13,197 >> [Смех] 266 00:11:13,197 --> 00:11:14,360 >> -Мове ин 267 00:11:14,360 --> 00:11:15,100 >> -Чекај, стани. 268 00:11:15,100 --> 00:11:15,740 >> -Стоп. 269 00:11:15,740 --> 00:11:16,290 >> То-пауза. 270 00:11:16,290 --> 00:11:19,390 >> -Ротира око 75 степени вертикална молим. 271 00:11:19,390 --> 00:11:19,886 >> [Смех] 272 00:11:19,886 --> 00:11:24,350 >> -Стани, и назад на делу око врата поново. 273 00:11:24,350 --> 00:11:26,330 >> -Имаш Појачивач то може битмап? 274 00:11:26,330 --> 00:11:28,990 >> -Можда можемо да користимо Прадееп Сен метод да види у прозорима. 275 00:11:28,990 --> 00:11:30,680 >> -Овај софтвер је стање у уметности. 276 00:11:30,680 --> 00:11:31,676 >> -Икона вредност је искључен. 277 00:11:31,676 --> 00:11:34,166 >> -Са правом комбинацијом алгоритама. 278 00:11:34,166 --> 00:11:38,399 >> -Узео је осветљење алгоритме за следећи ниво и могу их користити за 279 00:11:38,399 --> 00:11:38,648 побољшати ову фотографију. 280 00:11:38,648 --> 00:11:42,050 >> -Лоцк и увећати з-осе. 281 00:11:42,050 --> 00:11:42,760 >> -Побољшајте. 282 00:11:42,760 --> 00:11:43,060 >> -Побољшајте. 283 00:11:43,060 --> 00:11:43,760 >> -Побољшајте. 284 00:11:43,760 --> 00:11:45,010 >> -Фреезе и побољша. 285 00:11:45,010 --> 00:11:47,470 286 00:11:47,470 --> 00:11:47,910 >> [ЕНД ВИДЕО РЕПРОДУКЦИЈА] 287 00:11:47,910 --> 00:11:51,470 >> Давид Ј. Малан: Па Проблем Сет 5 је оно што је пред нама тамо. 288 00:11:51,470 --> 00:11:55,260 Дакле, ускоро ћемо добити боље разумевање од када и зашто можете 289 00:11:55,260 --> 00:11:57,300 и наш не може да побољша на тај начин. 290 00:11:57,300 --> 00:12:00,090 Али прво, хајде да се врати нашу пажњу да неки од блокова ћемо 291 00:12:00,090 --> 00:12:02,250 треба да буду у стању да исприча ту причу. 292 00:12:02,250 --> 00:12:05,580 >> Дакле, сећам се да смо нацртао ову слику на Понедељак и мало прошле недеље. 293 00:12:05,580 --> 00:12:09,970 И то описује распоред ствари у меморији рачунара када 294 00:12:09,970 --> 00:12:11,000 покренут неки програм. 295 00:12:11,000 --> 00:12:14,310 Технологија сегмент се врху, подсетимо, односи са стварним нуле и јединице 296 00:12:14,310 --> 00:12:16,000 који сачињавају ваш програм. 297 00:12:16,000 --> 00:12:19,340 Ту је, испод тога, неки иницијализовани или неиницијализоване податке, који обично 298 00:12:19,340 --> 00:12:22,910 односи се на ствари као што су константе или канапа или глобалних променљивих које имају 299 00:12:22,910 --> 00:12:24,200 проглашен унапред. 300 00:12:24,200 --> 00:12:26,500 Постоји гомила, али доћи ћемо назад на то у мало. 301 00:12:26,500 --> 00:12:27,410 >> А онда ту је стек. 302 00:12:27,410 --> 00:12:30,660 Слично као гомилу каблова у кафетерија, ово је место где добија меморија 303 00:12:30,660 --> 00:12:33,610 слојевима и слојевима кад год радиш оно што у програму? 304 00:12:33,610 --> 00:12:36,380 305 00:12:36,380 --> 00:12:37,730 Шта је стек за коришћење? 306 00:12:37,730 --> 00:12:39,320 >> Да? 307 00:12:39,320 --> 00:12:40,000 >> Позив функције. 308 00:12:40,000 --> 00:12:42,890 Сваки пут када позовете функцију, то је дати делић меморије за његову 309 00:12:42,890 --> 00:12:45,020 локалне променљиве или њене параметре. 310 00:12:45,020 --> 00:12:48,810 И сликовито, видимо да са сваким сукцесивно функција зове, када 311 00:12:48,810 --> 00:12:52,520 позиви Б позове Ц Д позиве, они се распореде на стек. 312 00:12:52,520 --> 00:12:55,630 И у сваком од тих кришке меморија је у суштини јединствен простор 313 00:12:55,630 --> 00:12:58,590 за ту функцију, што, наравно, је проблематично ако желите да предате 314 00:12:58,590 --> 00:13:01,850 са једне функције на другу комад података које то желе 315 00:13:01,850 --> 00:13:03,500 да мутира или промените. 316 00:13:03,500 --> 00:13:08,060 >> Дакле, оно што је наше решење за омогућавање Функција представља један стек 317 00:13:08,060 --> 00:13:11,390 оквир да промените меморију унутар другог стек оквира? 318 00:13:11,390 --> 00:13:14,590 Како се те две приче једна другој? 319 00:13:14,590 --> 00:13:18,510 Дакле, путем показивача или адреса, који, опет, само описати где у 320 00:13:18,510 --> 00:13:22,280 меморије, путем специфичних зубало број, нарочито 321 00:13:22,280 --> 00:13:23,830 вредност се може наћи. 322 00:13:23,830 --> 00:13:26,860 Тако се сетим последњи пут превише смо наставили причу и погледао 323 00:13:26,860 --> 00:13:28,280 прилично луд програма. 324 00:13:28,280 --> 00:13:32,900 И овај програм је луд за неколико разлога, али највише забрињава је један 325 00:13:32,900 --> 00:13:34,620 јер не провери шта? 326 00:13:34,620 --> 00:13:39,111 327 00:13:39,111 --> 00:13:40,450 >> Да, она не провери улаз. 328 00:13:40,450 --> 00:13:41,870 Извини? 329 00:13:41,870 --> 00:13:43,880 >> Ако је више од 12 знакова. 330 00:13:43,880 --> 00:13:47,260 Дакле, врло паметно, приликом позивања мемцопи, који, као што име сугерише, само 331 00:13:47,260 --> 00:13:50,630 копије меморије од свог другог аргумента у први аргумент. 332 00:13:50,630 --> 00:13:54,730 Трећи аргумент, веома вешто, је да се уверим да не 333 00:13:54,730 --> 00:13:59,400 копирате више од, у овом случају, дужину бара, број знакова, 334 00:13:59,400 --> 00:14:03,810 у дестинацији, који је овај Низ Ц. Али проблем је у томе што 335 00:14:03,810 --> 00:14:07,230 ако је Ц сама по себи није довољна да средим? 336 00:14:07,230 --> 00:14:09,900 Ти ћеш да копирате број бајтова које сте добили. 337 00:14:09,900 --> 00:14:13,040 Али шта заправо имају више бајтова него има простора? 338 00:14:13,040 --> 00:14:16,770 >> Па, овај програм врло лудо само слепо наставља да предузме све што је 339 00:14:16,770 --> 00:14:20,650 дато, здраво је бацксласх 0 ако је велики низ кратак 340 00:14:20,650 --> 00:14:22,040 довољно, као и пет карактера. 341 00:14:22,040 --> 00:14:26,470 Али, ако то је заправо 12 карактера или 1.200 карактера, видели смо последњи пут 342 00:14:26,470 --> 00:14:29,380 да ћеш само да се потпуно заменити меморију да 343 00:14:29,380 --> 00:14:30,470 не припада теби. 344 00:14:30,470 --> 00:14:34,390 А у најгорем случају, ако да препишете црвени део било које смо назвали 345 00:14:34,390 --> 00:14:35,380 повратна адреса - 346 00:14:35,380 --> 00:14:38,370 ово је само где рачунар аутоматски, за тебе, иза 347 00:14:38,370 --> 00:14:43,130 сцене, подвијања даље 32-битна вредност која подсећа га на оно што би требало адреса 348 00:14:43,130 --> 00:14:47,080 вратити када трла, ова друга функција, се врши извршавање. 349 00:14:47,080 --> 00:14:49,320 То је презла врста на које се враћа. 350 00:14:49,320 --> 00:14:52,490 Ако замените то, потенцијално, ако си лош момак, могао да 351 00:14:52,490 --> 00:14:54,750 потенцијално преузимање нечији рачунар. 352 00:14:54,750 --> 00:14:58,020 А ви ћете сигурно срушити га у већини случајева. 353 00:14:58,020 --> 00:15:01,690 >> Сада је овај проблем само погоршава као што смо почели да причамо о меморији 354 00:15:01,690 --> 00:15:03,010 менаџмента уопште. 355 00:15:03,010 --> 00:15:07,150 А маллоц за меморијске алокације, је функција које можемо да користимо да издвоји 356 00:15:07,150 --> 00:15:11,260 меморије када не знамо унапред да ће бити потребно мало. 357 00:15:11,260 --> 00:15:13,960 Тако, на пример, ако се вратим на уређај овде. 358 00:15:13,960 --> 00:15:21,010 И ја отворим из прошлог времена хелло2.ц, сећам овај програм овде, који је изгледао 359 00:15:21,010 --> 00:15:23,500 мало нешто овако, само три линије - 360 00:15:23,500 --> 00:15:27,940 своје име, затим стринг име, на левој страни, једнако гетстринг. 361 00:15:27,940 --> 00:15:29,690 А онда смо га одштампате, је име корисника. 362 00:15:29,690 --> 00:15:31,170 >> Дакле, ово је супер једноставан програм. 363 00:15:31,170 --> 00:15:34,870 Да буде јасно, иди пусти ме и да здраво-2. 364 00:15:34,870 --> 00:15:36,680 Ја ћу да урадим тачка црта здраво-2. 365 00:15:36,680 --> 00:15:37,750 Реците своје име - 366 00:15:37,750 --> 00:15:38,140 Дејвид. 367 00:15:38,140 --> 00:15:38,840 Ентер. 368 00:15:38,840 --> 00:15:39,540 Здраво Давид. 369 00:15:39,540 --> 00:15:41,060 Чини се да се добро ради. 370 00:15:41,060 --> 00:15:43,140 Али шта се заиста дешава Испод хаубе овде? 371 00:15:43,140 --> 00:15:44,670 Прво да одлепите неким слојевима. 372 00:15:44,670 --> 00:15:48,380 Стринг је само синоним ми смо схватио за шта? 373 00:15:48,380 --> 00:15:49,110 Знак звезда. 374 00:15:49,110 --> 00:15:52,740 Дакле, хајде да се мало више волшебни али више технички тачно да је та 375 00:15:52,740 --> 00:15:55,570 је знак звездице, што значи да име, да је променљива. 376 00:15:55,570 --> 00:15:59,920 Али, оно што је назив продавница адреса Чар, који осећа мало чудно 377 00:15:59,920 --> 00:16:01,050 јер ми се назад стринг. 378 00:16:01,050 --> 00:16:03,580 Идем назад више слова не знак. 379 00:16:03,580 --> 00:16:07,400 >> Али, наравно, потребно је само први Чар адреса да се сетите где 380 00:16:07,400 --> 00:16:08,870 читав низ, јер је зашто? 381 00:16:08,870 --> 00:16:12,700 Како да схватим где је крај стринг се зна почетак? 382 00:16:12,700 --> 00:16:13,630 Бацксласх нула. 383 00:16:13,630 --> 00:16:17,260 Дакле, са те две доказе да схватите пре почетка и краја 384 00:16:17,260 --> 00:16:20,280 сваки стринг су, све док су правилно формирана са тим нулл 385 00:16:20,280 --> 00:16:22,110 терминатор, да инверзна коса црта нула. 386 00:16:22,110 --> 00:16:24,520 >> Али ово се зове гетстринг. 387 00:16:24,520 --> 00:16:28,020 И испада да гетстринг Све ово време било некако 388 00:16:28,020 --> 00:16:28,820 варања за нас. 389 00:16:28,820 --> 00:16:32,460 То радили овај рад, како би били сигурни, добијање стринг од корисника. 390 00:16:32,460 --> 00:16:34,580 Али где је то сећање су долазили? 391 00:16:34,580 --> 00:16:38,440 Ако се вратимо на слици овде и применити дефиницију из само 392 00:16:38,440 --> 00:16:42,610 малочас, да је стек где меморија иде када се називају функције, 393 00:16:42,610 --> 00:16:45,370 по тој логици, кад позовете гетстринг, а онда сам укуца 394 00:16:45,370 --> 00:16:50,900 Д-В-И-Д Ентер, где је Д-В-И-Д бацксласх нула чувају, на основу 395 00:16:50,900 --> 00:16:53,480 прича коју сте нам сада? 396 00:16:53,480 --> 00:16:55,190 >> Чини се да је у стек, зар не? 397 00:16:55,190 --> 00:16:58,120 Када позовете добијете ниску добијате мало парче меморије на стек. 398 00:16:58,120 --> 00:17:01,630 Тако да је сасвим разумљиво да је Д--В-И-Д бацксласх нула се чува 399 00:17:01,630 --> 00:17:02,770 има у стеку. 400 00:17:02,770 --> 00:17:07,680 Али, чекај мало, гетстринг враћа стринг који, да тако кажем, што значи 401 00:17:07,680 --> 00:17:11,700 То је лежиште од кафетерији се скидају са стека. 402 00:17:11,700 --> 00:17:14,560 И ми смо прошли пут рекли да чим Функција враћа, и ти то 403 00:17:14,560 --> 00:17:20,109 касета, да тако кажем, ван стек, шта можете претпоставити о остацима 404 00:17:20,109 --> 00:17:21,819 то сећање? 405 00:17:21,819 --> 00:17:25,160 Некако сам их редрев као знаком питања јер ефикасно постану 406 00:17:25,160 --> 00:17:26,250 непознат вредности. 407 00:17:26,250 --> 00:17:29,500 Они се могу поново користити када се неки следећа функција се зове. 408 00:17:29,500 --> 00:17:31,870 >> Другим речима, ако се деси да се складиштење - 409 00:17:31,870 --> 00:17:34,350 Ја ћу извући брзо слику овде на стека. 410 00:17:34,350 --> 00:17:38,690 Ако се деси да се цртање дно моје меморије сегмента, а ми ћемо рећи 411 00:17:38,690 --> 00:17:42,230 да је ово место сећања окупирали главни и можда арг ц и 412 00:17:42,230 --> 00:17:46,790 АРГ против и било шта друго у програму, када гетстринг се зове, 413 00:17:46,790 --> 00:17:51,120 вероватно добија гетстринг комад меморије овде. 414 00:17:51,120 --> 00:17:53,940 А онда Д-В-И-Д некако завршава у овој функцији. 415 00:17:53,940 --> 00:17:55,320 И ја ћу да поједностављују. 416 00:17:55,320 --> 00:18:00,050 Али, хајде да претпоставимо да је Д-В-И-Д бацксласх нула. 417 00:18:00,050 --> 00:18:03,500 Дакле, ово је бајтова користе у оквир за гетстринг. 418 00:18:03,500 --> 00:18:08,270 >> Али чим гетстринг повратак, ми смо је рекао да је ово последњи пут меморија преко 419 00:18:08,270 --> 00:18:11,340 овде све постаје - Воопс! - 420 00:18:11,340 --> 00:18:14,270 све постаје ефективно брише. 421 00:18:14,270 --> 00:18:17,220 А ми на памет ово сада као питање знаци, јер ко зна 422 00:18:17,220 --> 00:18:18,720 шта ће бити од тог сећања. 423 00:18:18,720 --> 00:18:22,130 Заиста, ја често зовем функције осим гетстринг. 424 00:18:22,130 --> 00:18:24,750 И чим ја зовем неки други функција него гетстринг, можда не у 425 00:18:24,750 --> 00:18:28,860 Овај програм смо само гледали али на неки други, сигурно неки други 426 00:18:28,860 --> 00:18:34,180 Функција може завршити се даје овај следећи спот у стеку. 427 00:18:34,180 --> 00:18:39,410 >> Дакле, не може бити да гетстринг продавнице Д-В-И-Д на стек, јер бих 428 00:18:39,410 --> 00:18:41,040 Одмах изгубите приступ. 429 00:18:41,040 --> 00:18:43,720 Али ми знамо да гетстринг само враћа оно? 430 00:18:43,720 --> 00:18:47,220 То није повратак у ми шест знакова. 431 00:18:47,220 --> 00:18:51,090 Шта се заиста враћа се закључујемо последњи пут? 432 00:18:51,090 --> 00:18:52,480 Адреса првог. 433 00:18:52,480 --> 00:18:56,650 Тако некако, кад си звао гетстринг, то је издвајање комад меморије за 434 00:18:56,650 --> 00:18:59,620 стринг који тип корисника и онда се враћају адреса њега. 435 00:18:59,620 --> 00:19:02,930 И испоставило се да када желите да функционишу на додели меморију у ово 436 00:19:02,930 --> 00:19:08,390 начин и повратак за особу која се зове да функција, адреса 437 00:19:08,390 --> 00:19:11,870 који комад меморије, ви апсолутно не може да се стави у стеку на 438 00:19:11,870 --> 00:19:14,750 дно, јер то је само функционално ће не твоја постати веома 439 00:19:14,750 --> 00:19:17,800 брзо, тако да вероватно може да погоди где вероватно ћемо да га бацим 440 00:19:17,800 --> 00:19:20,130 уместо тога, тзв гомила. 441 00:19:20,130 --> 00:19:25,290 >> Дакле, између дну памћење је распоред и врх памћење је 442 00:19:25,290 --> 00:19:26,820 распоред су гомила сегмената. 443 00:19:26,820 --> 00:19:29,270 Један је стек, и десно изнад ње је гомила. 444 00:19:29,270 --> 00:19:33,680 А гомила је само другачији комад меморија која се не користи за функције 445 00:19:33,680 --> 00:19:34,770 кад они зову. 446 00:19:34,770 --> 00:19:38,100 Користи се за дугорочну меморију, када желите једна функција да зграби неке 447 00:19:38,100 --> 00:19:42,700 меморије и моћи да виси на њој не изгубе контролу над њим. 448 00:19:42,700 --> 00:19:45,550 >> Сада би можда могао одмах видим да ово није 449 00:19:45,550 --> 00:19:48,060 нужно савршен дизајн. 450 00:19:48,060 --> 00:19:51,350 Као ваш програм издвојено памћење стек, или како ви називате и више 451 00:19:51,350 --> 00:19:55,540 више функција, као и да издвоји меморија на гомили са маллоц офф као 452 00:19:55,540 --> 00:20:00,690 гетстринг ради, што јасно Изгледа да је проблем неизбежан? 453 00:20:00,690 --> 00:20:00,860 >> Право. 454 00:20:00,860 --> 00:20:03,150 Као и чињеницу да су ове стрелице су усмерени један према другом 455 00:20:03,150 --> 00:20:04,380 не слути на добро. 456 00:20:04,380 --> 00:20:08,630 И заиста, могли бисмо врло брзо срушити Програм на много начина. 457 00:20:08,630 --> 00:20:12,050 У ствари, мислим да имамо урадили случајно једном. 458 00:20:12,050 --> 00:20:14,020 Или, ако не, хајде да то урадимо намерно сада. 459 00:20:14,020 --> 00:20:21,330 Дозволите ми да иде напред и писати супер брзо програм под називом донтдотхис.ц. 460 00:20:21,330 --> 00:20:26,730 И сад ја идем у ту и не укључују оштар стдио.х. 461 00:20:26,730 --> 00:20:32,620 Хајде да прогласи функција ФОО узима нема аргумената, што је 462 00:20:32,620 --> 00:20:34,040 означен као и по празнини. 463 00:20:34,040 --> 00:20:37,830 >> И једина ствар трла ће урадити је Фоо позив, који вероватно није 464 00:20:37,830 --> 00:20:39,100 најпаметнија идеја, али тако је то. 465 00:20:39,100 --> 00:20:40,490 Ент главни празнина. 466 00:20:40,490 --> 00:20:45,270 Сада једино што ће главни да урадите је да позовете ФОО као добро. 467 00:20:45,270 --> 00:20:51,050 И за сваки случај, ја ћу да идем напред и реци иф "Поздрав из 468 00:20:51,050 --> 00:20:52,340 Фоо. " 469 00:20:52,340 --> 00:20:52,890 >> ОК. 470 00:20:52,890 --> 00:21:00,160 Дакле, ако ја не би било грешке, Направите донтдотхис дот црта. 471 00:21:00,160 --> 00:21:01,960 И хајде да то урадимо у већем прозору - 472 00:21:01,960 --> 00:21:03,210 тачка сласх, донтдотхис. 473 00:21:03,210 --> 00:21:07,590 474 00:21:07,590 --> 00:21:08,840 Хајде. 475 00:21:08,840 --> 00:21:10,940 476 00:21:10,940 --> 00:21:11,890 Ух ох. 477 00:21:11,890 --> 00:21:13,100 Очигледно, можете да урадите. 478 00:21:13,100 --> 00:21:15,190 Проклетство. 479 00:21:15,190 --> 00:21:16,190 ОК. 480 00:21:16,190 --> 00:21:16,580 Чекај. 481 00:21:16,580 --> 00:21:17,370 Станд би. 482 00:21:17,370 --> 00:21:18,270 Да ли смо ми - 483 00:21:18,270 --> 00:21:20,110 Урадили смо то користили за Марка. 484 00:21:20,110 --> 00:21:22,050 >> [Уздише] 485 00:21:22,050 --> 00:21:25,110 >> Ја знам, али мислим да смо избрисао то. 486 00:21:25,110 --> 00:21:28,410 Ух, да. 487 00:21:28,410 --> 00:21:30,660 Проклетство. 488 00:21:30,660 --> 00:21:32,640 Решите овај Роб. 489 00:21:32,640 --> 00:21:34,678 Шта? 490 00:21:34,678 --> 00:21:35,928 То је врло једноставно. 491 00:21:35,928 --> 00:21:43,820 492 00:21:43,820 --> 00:21:47,360 Да, ми смо окренули оптимизацију искључен. 493 00:21:47,360 --> 00:21:48,970 У реду, жао стоје. 494 00:21:48,970 --> 00:21:49,950 Сада се осећам боље. 495 00:21:49,950 --> 00:21:51,390 ОК. 496 00:21:51,390 --> 00:21:51,780 У реду. 497 00:21:51,780 --> 00:21:53,430 >> Па хајде да компајлирате овај - 498 00:21:53,430 --> 00:21:55,880 Нека ти донтдотхис. 499 00:21:55,880 --> 00:22:00,090 Можда ћете морати да промените ово дотхис.ц за који тренутак. 500 00:22:00,090 --> 00:22:00,710 Ту смо. 501 00:22:00,710 --> 00:22:01,240 Хвала. 502 00:22:01,240 --> 00:22:02,050 ОК. 503 00:22:02,050 --> 00:22:05,480 Дакле, чињеница да сам се штампа нешто што се у ствари само 504 00:22:05,480 --> 00:22:08,150 успорава процес којим се би достигли ту тачку. 505 00:22:08,150 --> 00:22:08,510 ОК. 506 00:22:08,510 --> 00:22:08,870 Фуј! 507 00:22:08,870 --> 00:22:11,180 >> Дакле, шта се заправо дешава? 508 00:22:11,180 --> 00:22:14,440 Разлог је, баш као и на страну, је чини ништа у погледу улаза и 509 00:22:14,440 --> 00:22:17,270 излаз обично спорији зато што морате да пишете карактере 510 00:22:17,270 --> 00:22:18,600 екран, Има да се крећете. 511 00:22:18,600 --> 00:22:21,720 Дакле, да скратим причу, ја заправо имао Десило се тако нестрпљив, имали бисмо 512 00:22:21,720 --> 00:22:23,260 видели крајњи резултат као добро. 513 00:22:23,260 --> 00:22:26,220 Сада када сам вожњу из штампе-упс, ми смо то одмах. 514 00:22:26,220 --> 00:22:28,410 Дакле, зашто се ово дешава. 515 00:22:28,410 --> 00:22:31,300 Па, једноставно објашњење, наравно, је то трла вероватно не треба 516 00:22:31,300 --> 00:22:32,500 да се зове. 517 00:22:32,500 --> 00:22:34,470 >> Сада, у општим цртама, ово је рекурзије. 518 00:22:34,470 --> 00:22:36,970 И ми смо мислили неколико недеља Пре рекурзивни је добро. 519 00:22:36,970 --> 00:22:40,330 Рекурзија је тај магични начин изражава се језгровито супер. 520 00:22:40,330 --> 00:22:41,400 И то само ради. 521 00:22:41,400 --> 00:22:45,060 Али, ту је кључна карактеристика свих Рекурзив програми Разговарали смо 522 00:22:45,060 --> 00:22:48,260 око и погледао до сада, који је да су они имали шта? 523 00:22:48,260 --> 00:22:52,610 Базни случај, што је био неки фиксирани случај да је у неким ситуацијама 524 00:22:52,610 --> 00:22:56,210 не зови ФОО, што је очигледно није случај овде. 525 00:22:56,210 --> 00:22:58,920 >> Дакле, оно што се заиста дешава у смислу ове слике? 526 00:22:58,920 --> 00:23:01,790 Па, када је главни зове Фоо, она добија парче меморије. 527 00:23:01,790 --> 00:23:04,150 Када фоо фоо зове, она добија парче меморије. 528 00:23:04,150 --> 00:23:06,430 Када фоо фоо зове, она добија парче. 529 00:23:06,430 --> 00:23:07,080 Она добија парче. 530 00:23:07,080 --> 00:23:08,120 Она добија парче. 531 00:23:08,120 --> 00:23:09,460 Пошто је трла никада не враћају. 532 00:23:09,460 --> 00:23:12,160 Ми никада нисмо брисање једног од оних оквири са стека. 533 00:23:12,160 --> 00:23:15,930 Дакле, ми дува кроз гомилу, не спомињем ко зна шта још, и 534 00:23:15,930 --> 00:23:19,600 смо прекорачење границе наше такозвани сегмент меморије. 535 00:23:19,600 --> 00:23:21,790 Грешку Иди сегментација лажна. 536 00:23:21,790 --> 00:23:24,110 >> Дакле, решење постоји очигледно не ради то. 537 00:23:24,110 --> 00:23:28,830 Али већи импликација је да, да, апсолутно постоји нека граница, 538 00:23:28,830 --> 00:23:32,470 чак и ако то није добро дефинисан, како многе функције можете да позовете у 539 00:23:32,470 --> 00:23:34,970 Програм, колико пута функција може да се назове. 540 00:23:34,970 --> 00:23:38,430 Дакле, иако смо урадили проповедамо рекурзију као ове потенцијално магична ствар 541 00:23:38,430 --> 00:23:41,870 Пре пар недеља за СИГМА функцију, и када смо добили податке 542 00:23:41,870 --> 00:23:45,270 структуре и ЦС50, видећете други апликације за њега, то није 543 00:23:45,270 --> 00:23:46,500 нужно најбоља ствар. 544 00:23:46,500 --> 00:23:50,070 Јер, ако се функција позива, позива се, чак и ако постоји база 545 00:23:50,070 --> 00:23:54,860 случају, ако не погодио тај основни случај позиве за 1.000 или 10.000 позива, од 546 00:23:54,860 --> 00:23:58,800 да пут можда понестало простора на такозваном стеку и притиснете 547 00:23:58,800 --> 00:24:00,400 неких других сегмената меморије. 548 00:24:00,400 --> 00:24:03,950 Дакле, то је сувише дизајн компромис између елеганције и између 549 00:24:03,950 --> 00:24:06,920 робусност ваш посебно имплементација. 550 00:24:06,920 --> 00:24:10,780 >> Дакле, ту је још једна лоша страна или Имам још један на оно што смо 551 00:24:10,780 --> 00:24:11,720 радили до сада. 552 00:24:11,720 --> 00:24:12,980 Када сам звао гетстринг - 553 00:24:12,980 --> 00:24:15,120 дозволите ми да се вратим у Хелло-2. 554 00:24:15,120 --> 00:24:18,170 Приметимо да зовем гетстринг, која се враћа адресу. 555 00:24:18,170 --> 00:24:20,730 А ми данас тврде да је адреса је из гомиле. 556 00:24:20,730 --> 00:24:24,480 И сада сам одштампа стринг на тој адреси. 557 00:24:24,480 --> 00:24:27,000 Али ми никада звао супротност гетстринг. 558 00:24:27,000 --> 00:24:30,850 Никада нисмо имали да цаллл функцију као унгетстринг, где вратити 559 00:24:30,850 --> 00:24:31,610 то сећање. 560 00:24:31,610 --> 00:24:33,250 Али, искрено ми вероватно требало да буде. 561 00:24:33,250 --> 00:24:37,390 Јер ако се стално питате рачунар за меморију, путем неког као 562 00:24:37,390 --> 00:24:40,830 гетстринг али никада га врати, сигурно и то је сигурно довести до 563 00:24:40,830 --> 00:24:42,970 Проблеми при чему нам понестане меморије. 564 00:24:42,970 --> 00:24:46,140 >> А у ствари, можемо да тражимо ове Проблеми са новог алата чија је употреба 565 00:24:46,140 --> 00:24:47,640 је мало загонетан да куцате. 566 00:24:47,640 --> 00:24:50,960 Али, дозволите ми да иде напред и прска га на екрану за који тренутак. 567 00:24:50,960 --> 00:24:56,940 Ја ћу ићи напред и покрените Валгринд са параметром чија је прва наредба 568 00:24:56,940 --> 00:25:00,260 линија аргумент је име тог програма здраво-2. 569 00:25:00,260 --> 00:25:02,650 И, нажалост, то је излаз је атроциоусли 570 00:25:02,650 --> 00:25:04,290 Комплекс без икаквог разлога. 571 00:25:04,290 --> 00:25:06,280 Дакле, видимо сву ту збрку. 572 00:25:06,280 --> 00:25:07,530 Давид је рећи моје име. 573 00:25:07,530 --> 00:25:09,760 Дакле, то је програм заправо ради. 574 00:25:09,760 --> 00:25:11,180 И сада смо добили овај излаз. 575 00:25:11,180 --> 00:25:13,400 >> Дакле Валгринд је сличан по духу ГДБ. 576 00:25:13,400 --> 00:25:14,950 То није за отклањање грешака по себи. 577 00:25:14,950 --> 00:25:16,270 Али, то је сећање правописа. 578 00:25:16,270 --> 00:25:20,140 То је програм који ће покренути ваш програмира и да вам кажем, ако тражите 579 00:25:20,140 --> 00:25:23,860 компјутер за меморију и никада га предао назад, тиме што значи да имате 580 00:25:23,860 --> 00:25:24,570 осипање меморије. 581 00:25:24,570 --> 00:25:26,240 А мемори леакс имају тенденцију да буду лоше. 582 00:25:26,240 --> 00:25:29,120 А ти се корисници рачунара имају вероватно осетио то, да ли имате 583 00:25:29,120 --> 00:25:30,300 Мац или ПЦ. 584 00:25:30,300 --> 00:25:33,730 Да ли сте икада користили рачунар за и док не рестартовао у неколико 585 00:25:33,730 --> 00:25:36,820 дана, или само имате много програми раде, а проклету ствар 586 00:25:36,820 --> 00:25:42,360 успорава до застоја, или барем то је супер нервира да користите, јер 587 00:25:42,360 --> 00:25:44,350 Управо сам све супер споро. 588 00:25:44,350 --> 00:25:46,260 >> Сада то може бити било који број разлога. 589 00:25:46,260 --> 00:25:49,600 То може бити бесконачна петља, буба у нечији број, или, једноставно, то 590 00:25:49,600 --> 00:25:53,250 може да значи да користите више меморије, или покушавају да, него ваш 591 00:25:53,250 --> 00:25:54,920 рачунар заправо има. 592 00:25:54,920 --> 00:25:57,770 А можда постоји грешка у неком програму да стално питате за меморију. 593 00:25:57,770 --> 00:26:02,480 Читачи за година били познати по ово, тражећи више и више меморије 594 00:26:02,480 --> 00:26:03,870 али га никада није вратио предаје. 595 00:26:03,870 --> 00:26:07,220 Наравно, ако имате само коначан количина меморије, не можете да питате 596 00:26:07,220 --> 00:26:09,990 бесконачно много пута за неки од тог сећања. 597 00:26:09,990 --> 00:26:13,070 >> И тако оно што овде видите, иако поново валгринд је излаз 598 00:26:13,070 --> 00:26:17,490 непотребно сложен да поглед на Прво, ово је занимљив део. 599 00:26:17,490 --> 00:26:18,890 Хеап - 600 00:26:18,890 --> 00:26:20,060 у употреби на излазу. 601 00:26:20,060 --> 00:26:22,810 Па ево колико је меморије у употреби у гомили на 602 00:26:22,810 --> 00:26:24,300 пут изашао мој програм - 603 00:26:24,300 --> 00:26:27,280 очигледно шест бајтова у једном блоку. 604 00:26:27,280 --> 00:26:28,710 Зато ћу да талас руке по којој је блок. 605 00:26:28,710 --> 00:26:31,270 Замислите то је само комад, више техничка реч за комад. 606 00:26:31,270 --> 00:26:33,140 Али шест бајтова - 607 00:26:33,140 --> 00:26:36,870 шта су шест бајта која су и даље у употреби? 608 00:26:36,870 --> 00:26:37,390 >> Тачно. 609 00:26:37,390 --> 00:26:41,520 Д-В-И-Д обрнута коса црта нула, пет слова Име плус нулл терминатор. 610 00:26:41,520 --> 00:26:46,350 Дакле, овај програм валгринд приметио да сам тражио шест бајтова, очигледно, по 611 00:26:46,350 --> 00:26:48,950 гетстринг начин, али никада Дао их назад. 612 00:26:48,950 --> 00:26:52,030 А у ствари, то можда неће бити тако ако је очигледно мој програм није три 613 00:26:52,030 --> 00:26:53,590 линије, али то је 300 линија. 614 00:26:53,590 --> 00:26:56,920 Тако да заправо може дати другој команди линија аргумент да Валгринд 615 00:26:56,920 --> 00:26:58,290 буде разумљивији. 616 00:26:58,290 --> 00:26:59,760 То је мало непријатно да се сетим. 617 00:26:59,760 --> 00:27:01,580 Али ако то урадим - 618 00:27:01,580 --> 00:27:01,930 хајде да видимо. 619 00:27:01,930 --> 00:27:03,540 Цурење - 620 00:27:03,540 --> 00:27:05,030 Да ли је то цури - 621 00:27:05,030 --> 00:27:07,580 чак и не сећам шта је искључен руци. 622 00:27:07,580 --> 00:27:08,550 >> - Провера цурења једнако пуна. 623 00:27:08,550 --> 00:27:10,180 Да, хвала. 624 00:27:10,180 --> 00:27:12,520 - Провера цурења једнако пуна. 625 00:27:12,520 --> 00:27:13,800 Ентер. 626 00:27:13,800 --> 00:27:14,940 Исти програм извршава. 627 00:27:14,940 --> 00:27:16,180 Упишите у Давида поново. 628 00:27:16,180 --> 00:27:17,660 Сада видим мало више детаља. 629 00:27:17,660 --> 00:27:20,890 Али, испод гомиле резиме, који је идентична четири - ах, 630 00:27:20,890 --> 00:27:22,120 ово је лепо. 631 00:27:22,120 --> 00:27:25,460 Сада Валгринд се ствари гледа мало теже у мом коду. 632 00:27:25,460 --> 00:27:29,580 И она каже да је, по свему судећи, маллоц у реду - 633 00:27:29,580 --> 00:27:30,580 смо умањили. 634 00:27:30,580 --> 00:27:31,980 У реду - 635 00:27:31,980 --> 00:27:32,930 ми не видимо шта је то ред. 636 00:27:32,930 --> 00:27:35,110 Али маллоц је први кривац. 637 00:27:35,110 --> 00:27:38,630 Ту је блог у маллоц. 638 00:27:38,630 --> 00:27:39,810 >> У реду? 639 00:27:39,810 --> 00:27:40,450 ОК, нема. 640 00:27:40,450 --> 00:27:40,940 Зар не? 641 00:27:40,940 --> 00:27:42,520 Звао сам гетстринг. 642 00:27:42,520 --> 00:27:44,460 гетстринг очигледно позива маллоц. 643 00:27:44,460 --> 00:27:47,800 Дакле, шта линија кода је очигледно је крив за то што 644 00:27:47,800 --> 00:27:49,050 издвојила ову меморију? 645 00:27:49,050 --> 00:27:51,560 646 00:27:51,560 --> 00:27:55,540 Претпоставимо да је онај ко је написао маллоц је већ довољно дуго да је то 647 00:27:55,540 --> 00:27:56,390 није њихова кривица. 648 00:27:56,390 --> 00:27:57,520 Дакле, то је вероватно моја. 649 00:27:57,520 --> 00:28:02,000 гетстринг у цс50.ц - тако да је филе негде на рачунару - 650 00:28:02,000 --> 00:28:05,210 на линији 286 изгледа да кривац. 651 00:28:05,210 --> 00:28:08,140 Сада претпоставимо да је ЦС50 око за пристојну количину времена, тако 652 00:28:08,140 --> 00:28:09,720 и ми смо непогрешиви. 653 00:28:09,720 --> 00:28:14,080 Тако да вероватно није у гетстринг да буг лежи, већ у 654 00:28:14,080 --> 00:28:17,810 здраво-2.ц линија 18. 655 00:28:17,810 --> 00:28:20,670 >> Па хајде да погледамо шта та линија 18 је било. 656 00:28:20,670 --> 00:28:21,130 О. 657 00:28:21,130 --> 00:28:27,130 Некако ова линија не мора да буде луд, по себи, али то је разлог 658 00:28:27,130 --> 00:28:28,630 иза тог мемори леак. 659 00:28:28,630 --> 00:28:32,140 Па супер једноставно, шта би интуитивно бити решење овде? 660 00:28:32,140 --> 00:28:34,710 Ако тражимо меморију, никада нису били дајући га назад, а изгледа да је то 661 00:28:34,710 --> 00:28:37,940 проблем, јер током времена мој рачунар Можда останете без меморије, може успорити 662 00:28:37,940 --> 00:28:42,110 доле, лоше ствари се може догодити, па, шта је једноставно интуитивно решење? 663 00:28:42,110 --> 00:28:43,140 Само ми је врати. 664 00:28:43,140 --> 00:28:44,770 >> Како да ослободите меморију? 665 00:28:44,770 --> 00:28:49,970 Па, на срећу то је прилично једноставно само да кажем бесплатно име. 666 00:28:49,970 --> 00:28:51,260 И никада нисмо урадили раније. 667 00:28:51,260 --> 00:28:55,890 Али у суштини могу да се сетим слободан као супротност маллоц. 668 00:28:55,890 --> 00:28:58,030 бесплатно је супротно од доделу меморије. 669 00:28:58,030 --> 00:28:59,540 Тако да сада дозволите ми компајлирате ово. 670 00:28:59,540 --> 00:29:02,050 Направите хелло-2. 671 00:29:02,050 --> 00:29:04,620 Дајте да поново покренете. здраво-2 Давид. 672 00:29:04,620 --> 00:29:07,290 Дакле, чини се да ради у потпуно исти начин. 673 00:29:07,290 --> 00:29:11,180 Али, ако се вратим на Валгринд и поново покренути да иста команда на моје ново 674 00:29:11,180 --> 00:29:14,720 саставио програм, куцање у моје име, као и раније - 675 00:29:14,720 --> 00:29:15,370 лепо. 676 00:29:15,370 --> 00:29:16,760 Хеап резиме - 677 00:29:16,760 --> 00:29:17,740 у употреби на Екиту - 678 00:29:17,740 --> 00:29:19,370 бајтова нула нула блоковима. 679 00:29:19,370 --> 00:29:21,840 И ово је супер лепо, све хеап блокови су ослобођени. 680 00:29:21,840 --> 00:29:23,480 Нема цурења су могуће. 681 00:29:23,480 --> 00:29:27,200 >> Тако долази, не са проблематичним Сет 4, али са проблематичним сет 5, за форензику 682 00:29:27,200 --> 00:29:30,740 и надаље, и ово ће постати мера тачност ваш 683 00:29:30,740 --> 00:29:33,630 програма, без обзира да ли имате или не или немају мемори леакс. 684 00:29:33,630 --> 00:29:36,900 Али срећом, не само да можете резоновати кроз њих интуитивно, који 685 00:29:36,900 --> 00:29:40,430 је, вероватно, лако за мале програме али теже за веће програме, 686 00:29:40,430 --> 00:29:43,860 Валгринд, за оне већих програма, може да вам помогне да идентификујете 687 00:29:43,860 --> 00:29:45,360 Посебан проблем. 688 00:29:45,360 --> 00:29:47,500 >> Али постоји један други проблем која би могла настати. 689 00:29:47,500 --> 00:29:51,245 Дозволите ми да отворим овај фајл овде, што је, опет, донекле једноставан пример. 690 00:29:51,245 --> 00:29:53,760 Али, хајде да се фокусирају на оно што Овај програм ради. 691 00:29:53,760 --> 00:29:55,190 Ово се зове мемори.ц. 692 00:29:55,190 --> 00:29:58,380 Ми ћемо писати касније данас у зип изворног кода данашњег. 693 00:29:58,380 --> 00:30:01,610 И приметио сам да се позива функција Ф да нема аргумената и 694 00:30:01,610 --> 00:30:02,800 враћа ништа. 695 00:30:02,800 --> 00:30:07,240 У 20. реду, ја сам очигледно проглашења показивач на инт и називајући га к. 696 00:30:07,240 --> 00:30:09,570 Ја додељивање је повратак вредност маллоц. 697 00:30:09,570 --> 00:30:14,590 И само да буде јасно, колико је бајтова ам Вероватно се вратимо из маллоц 698 00:30:14,590 --> 00:30:17,080 у овој ситуацији? 699 00:30:17,080 --> 00:30:18,040 >> Вероватно 40. 700 00:30:18,040 --> 00:30:18,840 Одакле ти то? 701 00:30:18,840 --> 00:30:22,410 Па, ако се сећате да је често инт 4 бајта, барем је у 702 00:30:22,410 --> 00:30:25,110 апарата, 10 пута 4 је очигледно 40. 703 00:30:25,110 --> 00:30:28,920 Дакле маллоц враћа адресу од комад меморије и складиштења да 704 00:30:28,920 --> 00:30:30,800 обрати на крају у к. 705 00:30:30,800 --> 00:30:32,570 Дакле, да буде јасно, шта онда се дешава? 706 00:30:32,570 --> 00:30:34,990 Па, дозволите ми да се вратите на нашу слику овде. 707 00:30:34,990 --> 00:30:38,150 Само да не скрене свег Меморија рачунара, дозволите ми да иде напред и 708 00:30:38,150 --> 00:30:42,990 нацртати цео правоугаоник који представља све моје меморије. 709 00:30:42,990 --> 00:30:44,790 >> Ми ћемо рећи да стек је на дну. 710 00:30:44,790 --> 00:30:47,010 А ту је и текст сегмент у су неиницијализоване податке. 711 00:30:47,010 --> 00:30:49,880 Али, ја ћу само да издвоје оне друге ствари далеко као тачка, тачка тачку. 712 00:30:49,880 --> 00:30:53,470 Ја ћу само да се односи на ово као гомилу на врху. 713 00:30:53,470 --> 00:30:57,070 А онда на дну ове слике, да представља главни, ја ћу 714 00:30:57,070 --> 00:30:59,880 да га дају кришке памћење на стек. 715 00:30:59,880 --> 00:31:03,150 За ф, ја ћу да га дају парче сећања на стек. 716 00:31:03,150 --> 00:31:05,140 Сада, морам да се консултујем са својим изворни код поново. 717 00:31:05,140 --> 00:31:07,170 Који су локалне променљиве за главни? 718 00:31:07,170 --> 00:31:10,710 Очигледно ништа, тако да је кришка ефикасно празан или не чак ни као велики 719 00:31:10,710 --> 00:31:11,600 као што сам то нацртао. 720 00:31:11,600 --> 00:31:15,730 Али у ф, имам локалну променљиву, која се зове к. 721 00:31:15,730 --> 00:31:20,410 Дакле, ја ћу да наставим и да ф комад меморије, називајући је к. 722 00:31:20,410 --> 00:31:24,680 >> А сада маллоц од 10 пута 4, Дакле маллоц 40, где је то 723 00:31:24,680 --> 00:31:25,430 меморија долази? 724 00:31:25,430 --> 00:31:27,530 Не смо нацртао слику овако раније. 725 00:31:27,530 --> 00:31:31,140 Али, хајде да претпоставимо да је то ефикасно долази одавде, па се, 726 00:31:31,140 --> 00:31:33,170 два, три, четири, пет. 727 00:31:33,170 --> 00:31:34,680 И сад ми треба 40 од ових. 728 00:31:34,680 --> 00:31:37,540 Тако да ћу учинити тачка, тачка, тачка сугерисати да има још више меморије 729 00:31:37,540 --> 00:31:39,350 враћа из гомиле. 730 00:31:39,350 --> 00:31:40,710 Сада која је адреса? 731 00:31:40,710 --> 00:31:42,620 Бирајмо наша произвољна баве као и увек - 732 00:31:42,620 --> 00:31:46,310 Ок123, иако вероватно ће да буде нешто потпуно другачије. 733 00:31:46,310 --> 00:31:50,420 То је адреса првог бајта у меморије да питам за маллоц. 734 00:31:50,420 --> 00:31:53,630 >> Дакле, укратко, једном линије 20 извршава, оно што је буквално 735 00:31:53,630 --> 00:31:57,170 складиште унутар к овде? 736 00:31:57,170 --> 00:31:58,730 Ок123. 737 00:31:58,730 --> 00:32:00,370 Ок123. 738 00:32:00,370 --> 00:32:01,550 А вола је незанимљива. 739 00:32:01,550 --> 00:32:03,200 То само значи да је овде хексадекадни број. 740 00:32:03,200 --> 00:32:06,490 Али, оно што је кључно јесте да то што сам продавницу у Кс, који је локална променљива. 741 00:32:06,490 --> 00:32:10,260 Али њен тип података, опет, је адреса цео број. 742 00:32:10,260 --> 00:32:12,710 Па, ја ћу да сачувате Ок123. 743 00:32:12,710 --> 00:32:16,610 Али опет, ако је то мало превише непотребно компликује, ако помицати 744 00:32:16,610 --> 00:32:21,490 назад, ми можемо ово даље апстрактна сасвим разумно и само да кажем да је к 745 00:32:21,490 --> 00:32:23,910 показивач на ту меморију. 746 00:32:23,910 --> 00:32:24,070 >> ОК. 747 00:32:24,070 --> 00:32:26,230 Сада је питање при руци је следећи - 748 00:32:26,230 --> 00:32:29,910 линија 21, испоставља се, није луд. 749 00:32:29,910 --> 00:32:31,160 Зашто? 750 00:32:31,160 --> 00:32:34,890 751 00:32:34,890 --> 00:32:36,930 >> Извини? 752 00:32:36,930 --> 00:32:38,640 Он нема - 753 00:32:38,640 --> 00:32:40,390 кажу да још једном. 754 00:32:40,390 --> 00:32:41,240 Па, то није случај бесплатно. 755 00:32:41,240 --> 00:32:42,350 Дакле, то је већ друго. 756 00:32:42,350 --> 00:32:45,000 Дакле, постоји још једно, али посебно на линији 21. 757 00:32:45,000 --> 00:32:49,480 758 00:32:49,480 --> 00:32:50,040 >> Тачно. 759 00:32:50,040 --> 00:32:54,980 Ова једноставна линија кода је само бафера, тампон преплављен. 760 00:32:54,980 --> 00:32:57,050 Амортизер само значи комад меморије. 761 00:32:57,050 --> 00:33:01,520 Али то комад од величине меморије 10, 10 целих бројева, што значи да смо 762 00:33:01,520 --> 00:33:05,350 индекс у њега помоћу синтаксичких шећер од низа нотацији, квадрат 763 00:33:05,350 --> 00:33:09,220 заграде, имате приступ конзола к 0 к 1 к конзола, 764 00:33:09,220 --> 00:33:10,390 носач тачка, тачка, тачка. 765 00:33:10,390 --> 00:33:13,270 к 9 носач је највећи. 766 00:33:13,270 --> 00:33:17,680 Дакле, ако ја урадим к држач 10, где Ја стварно идем у меморији? 767 00:33:17,680 --> 00:33:19,120 >> Па, ако имам 10 Инт - 768 00:33:19,120 --> 00:33:21,070 хајде да сви заправо нерешено од ових овде. 769 00:33:21,070 --> 00:33:22,700 Дакле, то је био први пет. 770 00:33:22,700 --> 00:33:24,660 Ево осталих пет интс. 771 00:33:24,660 --> 00:33:29,580 Дакле, к 0 носач је овде. к 1 носач је овде. к носач 9 је овде. к носач 772 00:33:29,580 --> 00:33:37,960 10 је овде, што значи да говорим, на линији 21, рачунар да стави 773 00:33:37,960 --> 00:33:39,400 где је број? 774 00:33:39,400 --> 00:33:42,010 Број 0 где? 775 00:33:42,010 --> 00:33:43,380 Па, то је 0, да. 776 00:33:43,380 --> 00:33:45,460 Али чињеница да је њен 0 је врста случајности. 777 00:33:45,460 --> 00:33:47,140 То може бити број 50, за све бринемо. 778 00:33:47,140 --> 00:33:50,480 Али ми покушавамо да га ставите на к држач 10, где се ова 779 00:33:50,480 --> 00:33:53,700 знак питања је нацртана, који није добра ствар. 780 00:33:53,700 --> 00:33:57,070 Овај програм може врло добро срушити као резултат. 781 00:33:57,070 --> 00:33:59,400 >> Сада, хајде да идемо напред и видети да ли то је, заиста, шта се дешава. 782 00:33:59,400 --> 00:34:02,600 Направите меморију, пошто фајл се зове мемори.ц. 783 00:34:02,600 --> 00:34:05,950 Идемо напред и покрените Програм Мемори. 784 00:34:05,950 --> 00:34:08,239 Тако нам се посрећило, у ствари, чини се. 785 00:34:08,239 --> 00:34:09,340 Имамо среће. 786 00:34:09,340 --> 00:34:11,060 Али, хајде да видимо да ли ћемо сада покренути валгринд. 787 00:34:11,060 --> 00:34:14,170 На први поглед, можда мој програм Чини се да су савршено тачна. 788 00:34:14,170 --> 00:34:18,010 Али допустите да радим са Валгринд - Провера цурења једнако пуно о меморији. 789 00:34:18,010 --> 00:34:20,110 >> И сад кад сам покренути ово - 790 00:34:20,110 --> 00:34:21,030 занимљиво. 791 00:34:21,030 --> 00:34:26,800 Неважећи писање величине 4 у линија 21 од мемори.ц. 792 00:34:26,800 --> 00:34:29,284 Линија 21 мемори.ц од којих је један? 793 00:34:29,284 --> 00:34:30,340 О, занимљиво. 794 00:34:30,340 --> 00:34:31,080 Али чекајте. 795 00:34:31,080 --> 00:34:32,389 Величина 4, шта је то говорите? 796 00:34:32,389 --> 00:34:34,969 Ја само нисам писати, али је од величине 4. 797 00:34:34,969 --> 00:34:36,889 Зашто је 4? 798 00:34:36,889 --> 00:34:39,280 То је зато што је инт, који је, опет, четири бајта. 799 00:34:39,280 --> 00:34:42,510 Тако Валгринд пронашли грешку коју сам, гледајући мој код, зар не. 800 00:34:42,510 --> 00:34:45,040 А можда ваш ТФ би или не би. 801 00:34:45,040 --> 00:34:48,469 Шта Валгринд Али сигурно утврдио да Направили смо ту грешку, чак и 802 00:34:48,469 --> 00:34:52,719 иако нам се посрећило, а рачунар одлучио, ех, ја нећу да се сруши 803 00:34:52,719 --> 00:34:57,470 само зато што дотакао један бајт, један Инт је вредно памћења да нисте 804 00:34:57,470 --> 00:34:58,550 њихово власништво. 805 00:34:58,550 --> 00:35:00,380 >> Па, шта је овде луд. 806 00:35:00,380 --> 00:35:01,180 Адреса - 807 00:35:01,180 --> 00:35:03,190 ово је лудо изгледа адреса у хексадецимални. 808 00:35:03,190 --> 00:35:06,890 То само значи да негде у гомили је нула бајта након блок величине 40 809 00:35:06,890 --> 00:35:07,620 додељује. 810 00:35:07,620 --> 00:35:10,610 Дозволите ми да умањите овде и видите да ли ово је мало више од помоћи. 811 00:35:10,610 --> 00:35:11,410 Занимљиво. 812 00:35:11,410 --> 00:35:15,600 40 бајта су дефинитивно изгубљени пораза у 1. 1.. 813 00:35:15,600 --> 00:35:17,840 Опет, више речи него што је корисно овде. 814 00:35:17,840 --> 00:35:21,350 Али, на основу истакнуте линије, где би требало да вероватно фокусирам 815 00:35:21,350 --> 00:35:24,070 пажња за другу буг? 816 00:35:24,070 --> 00:35:26,570 Изгледа као линије 20 мемори.ц. 817 00:35:26,570 --> 00:35:30,990 >> Дакле, ако се вратимо на линији 20, који је онај који сте раније идентификовали. 818 00:35:30,990 --> 00:35:33,030 И то није нужно луд. 819 00:35:33,030 --> 00:35:35,160 Али, ми смо то преокренути своје ефекте. 820 00:35:35,160 --> 00:35:38,790 Па како да исправи бар један од тих грешака? 821 00:35:38,790 --> 00:35:42,240 Шта сам могао да урадим после линији 21? 822 00:35:42,240 --> 00:35:47,110 Сам могао да урадим без к, па је да се врати то сећање. 823 00:35:47,110 --> 00:35:49,230 И како могу да поправим ову грешку? 824 00:35:49,230 --> 00:35:52,120 Ја дефинитивно треба да иде не даље од 0. 825 00:35:52,120 --> 00:35:53,670 Дакле, дозволите ми да покушам и поново покренути ово. 826 00:35:53,670 --> 00:35:56,080 Жао нам је, дефинитивно идем не даље од 9. 827 00:35:56,080 --> 00:35:57,510 Маке меморију. 828 00:35:57,510 --> 00:36:00,650 Дозволите ми да реприза Валгринд у већем прозору. 829 00:36:00,650 --> 00:36:01,580 А сада погледајте. 830 00:36:01,580 --> 00:36:02,250 Лепо. 831 00:36:02,250 --> 00:36:03,270 Сви хеап блокови су ослобођени. 832 00:36:03,270 --> 00:36:04,270 Нема цурења су могуће. 833 00:36:04,270 --> 00:36:07,520 А горе изнад ту, нема помена више од неважеће права. 834 00:36:07,520 --> 00:36:09,820 >> Само да се похлепан, и хајде да видим да други демонстрација 835 00:36:09,820 --> 00:36:11,050 не иде како треба - 836 00:36:11,050 --> 00:36:12,560 Ја нисам посрећи малопре. 837 00:36:12,560 --> 00:36:15,530 А чињеница да је ово 0 је можда непотребно доводи у заблуду. 838 00:36:15,530 --> 00:36:20,650 Хајде само до 50, нешто произвољно број, направи меморијски дот цртица меморију - 839 00:36:20,650 --> 00:36:21,410 ипак посрећи. 840 00:36:21,410 --> 00:36:22,510 Ништа не пада. 841 00:36:22,510 --> 00:36:26,150 Рецимо да сам урадим нешто стварно глупо, а ја 100. 842 00:36:26,150 --> 00:36:30,360 Дозволите ми да преобликује меморије, дот сласх меморија - 843 00:36:30,360 --> 00:36:31,075 посрећило поново. 844 00:36:31,075 --> 00:36:32,800 Како око 1.000? 845 00:36:32,800 --> 00:36:35,370 интс ван, отприлике, где би требало да буде? 846 00:36:35,370 --> 00:36:37,410 Маке меморију - 847 00:36:37,410 --> 00:36:38,570 проклетство. 848 00:36:38,570 --> 00:36:39,920 >> [Смех] 849 00:36:39,920 --> 00:36:41,270 >> ОК. 850 00:36:41,270 --> 00:36:43,920 Хајде да не зезај се више. 851 00:36:43,920 --> 00:36:45,120 Реприза меморију. 852 00:36:45,120 --> 00:36:45,840 Ту смо. 853 00:36:45,840 --> 00:36:46,410 У реду. 854 00:36:46,410 --> 00:36:52,500 Дакле, очигледно је да индекс 100.000 Интс изван где би сте били у 855 00:36:52,500 --> 00:36:54,410 меморије, лоше ствари се дешавају. 856 00:36:54,410 --> 00:36:56,430 Тако да је ово очигледно није тешко, брзо правило. 857 00:36:56,430 --> 00:36:58,190 Ја сам се користе суђења грешка и да се тамо. 858 00:36:58,190 --> 00:37:02,230 Али, то је зато, да скратим причу, рачунара меморија је подељена 859 00:37:02,230 --> 00:37:03,580 у ове ствари називају сегменти. 860 00:37:03,580 --> 00:37:07,260 А понекад, у ствари компјутер вам је дао мало више меморије 861 00:37:07,260 --> 00:37:08,400 него што затражите. 862 00:37:08,400 --> 00:37:12,170 Али, због ефикасности, то је само лакше добити више меморије, али само да вам кажем 863 00:37:12,170 --> 00:37:13,780 да сте добијање део тога. 864 00:37:13,780 --> 00:37:16,370 >> А ако се посрећи понекад, Стога, можда ћете моћи да додирнете 865 00:37:16,370 --> 00:37:17,795 меморија која не припада теби. 866 00:37:17,795 --> 00:37:21,860 Ви немате гаранцију да оно што вредност сте ставили тамо ће остати, јер 867 00:37:21,860 --> 00:37:25,080 рачунар и даље мисли да није твој, али то није нужно иде 868 00:37:25,080 --> 00:37:29,910 да удари још један сегмент у меморији рачунар и изазивају грешку као 869 00:37:29,910 --> 00:37:31,710 Овај овде. 870 00:37:31,710 --> 00:37:32,060 У реду. 871 00:37:32,060 --> 00:37:37,240 Сва питања онда на меморију? 872 00:37:37,240 --> 00:37:37,590 >> У реду. 873 00:37:37,590 --> 00:37:40,610 Хајде да погледамо ту, онда, у нешто што смо узимали за 874 00:37:40,610 --> 00:37:48,361 одобрен за неко време, који је у овом фајлу названом цс50.х. 875 00:37:48,361 --> 00:37:49,420 Дакле, ово је фајл. 876 00:37:49,420 --> 00:37:51,130 Ово су само гомила Коментари на горе. 877 00:37:51,130 --> 00:37:53,900 А можда сте гледали ово ако око вас упери на уређају. 878 00:37:53,900 --> 00:37:57,000 Али, испоставило се да је све време, када смо користили као стринг 879 00:37:57,000 --> 00:38:01,130 синоним, средство којим се проглашава који је био синоним за ово 880 00:38:01,130 --> 00:38:03,990 кључна реч типедеф, за дефинисање типа. 881 00:38:03,990 --> 00:38:07,500 И ми у суштини говориш, направити Стринг синоним за цхар звезде. 882 00:38:07,500 --> 00:38:11,190 Та средства помоћу којих стек створио ову обуку точкова познате као 883 00:38:11,190 --> 00:38:12,040 стринг. 884 00:38:12,040 --> 00:38:14,830 >> Сада овде је само прототип за гетцхар. 885 00:38:14,830 --> 00:38:17,350 Можда смо видели раније, али то је заиста оно што ради. гетцхар 886 00:38:17,350 --> 00:38:19,070 нема аргумената, даје знак. 887 00:38:19,070 --> 00:38:21,340 гетдоубле нема аргумената, враћа двојника. 888 00:38:21,340 --> 00:38:24,440 гетфлоат нема аргумената, враћа пловак, и тако даље. 889 00:38:24,440 --> 00:38:27,270 Тоноване је овде. гетлонглонг је овде. 890 00:38:27,270 --> 00:38:28,820 А гетстринг је овде. 891 00:38:28,820 --> 00:38:29,420 И то је то. 892 00:38:29,420 --> 00:38:33,080 Ово је још једна љубичаста линија Претпроцесор Директива због 893 00:38:33,080 --> 00:38:35,550 хасхтаг на почетку. 894 00:38:35,550 --> 00:38:35,870 >> У реду. 895 00:38:35,870 --> 00:38:38,380 Дакле, сада пусти ме на цс50.ц. 896 00:38:38,380 --> 00:38:40,400 И нећемо говорити превише дуго на томе. 897 00:38:40,400 --> 00:38:43,280 Али, да вам дати увид у оно што је траје све ово 898 00:38:43,280 --> 00:38:46,434 време, пусти ме да - 899 00:38:46,434 --> 00:38:48,250 Урадимо гетцхар. 900 00:38:48,250 --> 00:38:51,050 Тако је углавном гетцхар коментаре. 901 00:38:51,050 --> 00:38:52,060 Али, то изгледа овако. 902 00:38:52,060 --> 00:38:54,800 Дакле, ово је стварна функција гетцхар да смо били 903 00:38:54,800 --> 00:38:56,055 узимајући здраво за готово не постоји. 904 00:38:56,055 --> 00:38:59,370 И иако нисмо користили ову да често, ако икад, то је бар 905 00:38:59,370 --> 00:39:00,470 релативно једноставна. 906 00:39:00,470 --> 00:39:02,580 Тако да вреди Кратак поглед овде. 907 00:39:02,580 --> 00:39:06,540 >> Дакле гетцхар има бесконачну петља, намерно тако очигледно. 908 00:39:06,540 --> 00:39:10,050 То онда зове - и то је врста лепо поновна употреба кода смо сами написали. 909 00:39:10,050 --> 00:39:11,220 Он позива гетстринг. 910 00:39:11,220 --> 00:39:12,460 Јер шта то ради значи да се знак? 911 00:39:12,460 --> 00:39:14,730 Па, можда и покушати да се цео ред текста од корисника и 912 00:39:14,730 --> 00:39:16,940 па погледајте само једном од оних ликова. 913 00:39:16,940 --> 00:39:19,170 У линији 60, ево мало мало здравог разума провере. 914 00:39:19,170 --> 00:39:21,610 Ако гетстринг вратио нулл, хајде да не наставимо. 915 00:39:21,610 --> 00:39:22,820 Нешто је кренуло наопако. 916 00:39:22,820 --> 00:39:28,120 >> Сада је то нешто смета, али конвенционалне у Ц. цхар мак вероватно 917 00:39:28,120 --> 00:39:29,960 представља управо оно што на основу свог имена? 918 00:39:29,960 --> 00:39:31,670 То је константа. 919 00:39:31,670 --> 00:39:36,040 То је као нумеричке вредности Највећи знак да може да заступа са 920 00:39:36,040 --> 00:39:40,370 један залогај, што је вероватно број 255, што је највећи број ти 921 00:39:40,370 --> 00:39:42,720 представљају осам битова, почевши од нуле. 922 00:39:42,720 --> 00:39:47,460 Тако сам искористити, у овој функцији, када писања кода, само зато што 923 00:39:47,460 --> 00:39:51,753 ако нешто крене наопако, али у гетцхар његова сврха у животу је да се врати 924 00:39:51,753 --> 00:39:54,830 Чар, морате бити у стању да некако да сигнализира кориснику да 925 00:39:54,830 --> 00:39:55,840 нешто није у реду. 926 00:39:55,840 --> 00:39:56,970 Ми не можемо вратити нулл. 927 00:39:56,970 --> 00:39:58,480 Испоставило се да је нула показивач. 928 00:39:58,480 --> 00:40:01,030 А опет, има гетцхар да се врате знак. 929 00:40:01,030 --> 00:40:04,760 >> Дакле конвенција, ако несто крене погрешно, да је, програмер, или у 930 00:40:04,760 --> 00:40:08,160 овом случају, ја са библиотеком, имао сам само да одлучи произвољно, ако 931 00:40:08,160 --> 00:40:12,230 нешто крене наопако, ја ћу да врати број 255, који је заиста 932 00:40:12,230 --> 00:40:17,240 значи да не можемо, корисник може да откуцате карактер заступа 933 00:40:17,240 --> 00:40:21,410 број 255, јер смо имали га украде као тзв сентинел вредности за 934 00:40:21,410 --> 00:40:23,410 представљају проблем. 935 00:40:23,410 --> 00:40:27,010 Сада испада да је лик 255 није нешто што можете да упишете на 936 00:40:27,010 --> 00:40:28,380 тастатура, тако да није страшно. 937 00:40:28,380 --> 00:40:30,910 Корисник не приметити да Украли ми овај лик. 938 00:40:30,910 --> 00:40:34,620 Али ако сте икада видели у ман страницама рачунарски систем неке референце на 939 00:40:34,620 --> 00:40:38,560 све капе као константа то да каже, у случају грешке ова стална можда 940 00:40:38,560 --> 00:40:42,720 се вратио, то је све учинио неки људски година је самовољно одлучио да 941 00:40:42,720 --> 00:40:45,680 вратите ову посебну вредност и зову константа у случају 942 00:40:45,680 --> 00:40:46,840 нешто крене наопако. 943 00:40:46,840 --> 00:40:48,580 >> Сада магија се дешава овде. 944 00:40:48,580 --> 00:40:52,600 Прво, ја сам у реду 67 изјављујући два знака, Ц1 и Ц2. 945 00:40:52,600 --> 00:40:57,080 А онда у реду 68, заправо има линија кода који подсећа 946 00:40:57,080 --> 00:41:01,140 принтф наш пријатељ, с обзиром да је нема Цс одсто у наводницима. 947 00:41:01,140 --> 00:41:06,490 Али приметили шта се овде дешава. ссцанф значи стринг скенирање - 948 00:41:06,490 --> 00:41:11,690 подразумева скенирање форматиран ниска, ерго ссцанф. 949 00:41:11,690 --> 00:41:12,590 Шта то значи? 950 00:41:12,590 --> 00:41:16,310 То значи да прође да ссцанф стринг. 951 00:41:16,310 --> 00:41:18,420 А линија је год које корисник укуцава ин 952 00:41:18,420 --> 00:41:23,520 Пролазите да ссцанф стринг формату као што Ово говори да је оно што су сцанф 953 00:41:23,520 --> 00:41:25,870 надајући се да корисник унесе 954 00:41:25,870 --> 00:41:29,730 Онда прође-у на адресе два комади меморије, у овом случају, 955 00:41:29,730 --> 00:41:31,150 јер имам два чувара места. 956 00:41:31,150 --> 00:41:34,610 Зато ћу му дати адресу од Ц1 и Ц2 адреса. 957 00:41:34,610 --> 00:41:37,700 >> И сећам се да вам дају неку функцију адресу неке променљиве, што је 958 00:41:37,700 --> 00:41:38,950 импликација? 959 00:41:38,950 --> 00:41:41,400 960 00:41:41,400 --> 00:41:45,050 Шта могу да урадим функционишу као резултат давања му адресу 961 00:41:45,050 --> 00:41:48,170 променљива, за разлику од сама променљива? 962 00:41:48,170 --> 00:41:49,450 То може да се промени, зар не? 963 00:41:49,450 --> 00:41:53,250 Ако сте имали некога карте за физичко адресу, они могу да иду и до 964 00:41:53,250 --> 00:41:54,750 шта год желе на тој адреси. 965 00:41:54,750 --> 00:41:55,800 Иста идеја овде. 966 00:41:55,800 --> 00:41:59,950 Ако прође у ссцанф, адреси два комади меморије, чак и ове сићушне 967 00:41:59,950 --> 00:42:03,585 мали комади меморије, Ц1 и Ц2, али ми то рећи адресу њих, 968 00:42:03,585 --> 00:42:05,170 ссцанф можете га променити. 969 00:42:05,170 --> 00:42:08,530 >> Дакле ссцанф сврха у животу, ако читамо ман страница, јесте да прочитате оно што 970 00:42:08,530 --> 00:42:13,420 корисник откуцао у, који има наду за корисника откуцан на карактер и можда 971 00:42:13,420 --> 00:42:16,470 још један лик, и шта год корисник откуцан, први знак иде 972 00:42:16,470 --> 00:42:19,310 овде, други лик иде овде. 973 00:42:19,310 --> 00:42:22,470 Сада, као и на страну, овај, и ти би само знам из документације, 974 00:42:22,470 --> 00:42:25,570 Чињеница да сам ставио празан простор само значи да није ме брига да ли 975 00:42:25,570 --> 00:42:28,440 корисник удари размак неколико пута пре него што он или она узима 976 00:42:28,440 --> 00:42:30,400 карактер, ја ћу игнорисати сваки празан простор. 977 00:42:30,400 --> 00:42:32,510 Тако да, ја знам из документација. 978 00:42:32,510 --> 00:42:36,570 >> Чињеница да постоји друга% Ц затим размаком заправо 979 00:42:36,570 --> 00:42:37,410 намерно. 980 00:42:37,410 --> 00:42:41,190 Желим да будем у стању да открије да ли корисник зезнуо или не сарађују. 981 00:42:41,190 --> 00:42:45,630 Тако да се надам да корисник само куцао у једном лику, дакле надам се 982 00:42:45,630 --> 00:42:50,640 ссцанф да ће само да се врати вредност 1 јер, опет, ако сам прочитао 983 00:42:50,640 --> 00:42:55,400 документација, ссцанф сврха у живот је да се врати у броју 984 00:42:55,400 --> 00:42:59,170 варијабле које су испуњене са корисничког уноса. 985 00:42:59,170 --> 00:43:02,270 >> Прошао сам у две варијанте адресе, Ц1 и Ц2. 986 00:43:02,270 --> 00:43:06,420 Надам се, ипак, да је само један од погине, јер ако их ссцанф 987 00:43:06,420 --> 00:43:11,130 повратак 2, шта је по свој прилици Импликација логично? 988 00:43:11,130 --> 00:43:14,600 Тај корисник није дај ми једну карактер као што сам му рекао, или јој. 989 00:43:14,600 --> 00:43:17,860 Вероватно су откуцана на најмање два карактера. 990 00:43:17,860 --> 00:43:22,430 Дакле, ако сам уместо тога није имао други % Ц, само сам имао један, који 991 00:43:22,430 --> 00:43:25,370 искрено би било интуитивно приступ, мислим на први поглед, 992 00:43:25,370 --> 00:43:30,220 нећете бити у стању да детектује Ако корисник је дајући вам више 993 00:43:30,220 --> 00:43:31,780 улаз него што стварно желео. 994 00:43:31,780 --> 00:43:34,100 Дакле, ово је имплицитном облику за проверавање грешака. 995 00:43:34,100 --> 00:43:35,640 >> Али, обратите пажњу шта ја овде радим. 996 00:43:35,640 --> 00:43:39,970 Једном сам сигуран да ми је један корисник карактер, ја ослободи линију, ради 997 00:43:39,970 --> 00:43:44,450 супротно од гетстринг, што заузврат користи маллоц, а онда се вратим 998 00:43:44,450 --> 00:43:51,030 Ц1, лик који сам се надао корисник и то само под условом. 999 00:43:51,030 --> 00:43:54,680 Тако брзо осврнуо само, али на сва питања на гетцхар? 1000 00:43:54,680 --> 00:43:57,450 1001 00:43:57,450 --> 00:43:59,590 Вратићемо се на неке од осталих. 1002 00:43:59,590 --> 00:44:03,770 >> Па, дозволите ми да идем напред и урадили - Претпоставимо сада, само да мотивише наше 1003 00:44:03,770 --> 00:44:08,910 дискусија за недељу дана плус време, то је фајл под струцтс.х. 1004 00:44:08,910 --> 00:44:11,440 И опет, то је само део нечега што је пред нама. 1005 00:44:11,440 --> 00:44:13,090 Али, обавештење да је много ово је коментар. 1006 00:44:13,090 --> 00:44:17,440 Дозволите ми да нагласим само занимљив део за сада. 1007 00:44:17,440 --> 00:44:18,020 типедеф - 1008 00:44:18,020 --> 00:44:19,700 опет има исте кључне речи. 1009 00:44:19,700 --> 00:44:23,100 типедеф користимо да прогласи стринг као посебан тип података. 1010 00:44:23,100 --> 00:44:27,490 Можете да користите типедеф за креирање новог бренда типови података који нису постојали када 1011 00:44:27,490 --> 00:44:28,570 Ц је измишљен. 1012 00:44:28,570 --> 00:44:32,520 На пример, долази са инт цхар Ц. долази са дупло Ц. долази са Ц. Али 1013 00:44:32,520 --> 00:44:34,000 нема појма студента. 1014 00:44:34,000 --> 00:44:37,230 А ипак, било би веома корисно да се у стању да напише програм који складишти 1015 00:44:37,230 --> 00:44:40,440 у променљивој, ИД број ученика, њихово име, и њихова кућа. 1016 00:44:40,440 --> 00:44:42,890 Другим речима, три комада података, као инт и 1017 00:44:42,890 --> 00:44:44,420 ниска и други стринг. 1018 00:44:44,420 --> 00:44:48,220 >> Са типедеф, што је прилично моћна о томе и кључних речи за стурцт 1019 00:44:48,220 --> 00:44:53,660 структура, ви, програмер у 2013, заправо може дефинисати своје 1020 00:44:53,660 --> 00:44:57,530 типови података који нису постојали година Пре него што одговара вашим сврхе. 1021 00:44:57,530 --> 00:45:01,910 И ево, у редовима 13 до 19, смо проглашења нови тип података, као што су 1022 00:45:01,910 --> 00:45:04,320 инт, али називајући је ученик. 1023 00:45:04,320 --> 00:45:09,310 И унутар ове променљиве ће бити три ствари - инт, ниска, 1024 00:45:09,310 --> 00:45:09,930 и стринг. 1025 00:45:09,930 --> 00:45:13,040 Тако да могу да се сетим шта је стварно се овде догодило, иако је ово 1026 00:45:13,040 --> 00:45:17,160 мало поједностављења за данас, Студент је у суштини иде 1027 00:45:17,160 --> 00:45:19,450 да изгледа овако. 1028 00:45:19,450 --> 00:45:22,580 Његова ће бити комад меморија са ИД, име 1029 00:45:22,580 --> 00:45:25,580 поља, а кућа поље. 1030 00:45:25,580 --> 00:45:30,670 И ми ћемо бити у могућности да користе те комаде меморије и приступ их на следећи начин. 1031 00:45:30,670 --> 00:45:38,870 >> Ако одем у струцт0.ц, овде је релативно дуго, али након 1032 00:45:38,870 --> 00:45:42,630 образац, кода који користи овај нови трик. 1033 00:45:42,630 --> 00:45:45,790 Дакле, прво, дозволите ми да вам скренем пажњу до занимљивих делова до врха. 1034 00:45:45,790 --> 00:45:49,670 Оштро дефинише студенте 3, објављује сталне називају студенти и лица са пренетим 1035 00:45:49,670 --> 00:45:53,450 је произвољно број 3, само тако да имам три ученика коришћењем 1036 00:45:53,450 --> 00:45:54,830 Овај програм за сада. 1037 00:45:54,830 --> 00:45:55,960 Ево Главни. 1038 00:45:55,960 --> 00:45:58,860 И приметите, како ја изјављујем низ ученика? 1039 00:45:58,860 --> 00:46:00,480 Па, само користе исту синтаксу. 1040 00:46:00,480 --> 00:46:02,110 Реч Студент је очигледно ново. 1041 00:46:02,110 --> 00:46:04,790 Али, студентске класе, носач студената. 1042 00:46:04,790 --> 00:46:06,720 >> Дакле, нажалост, има много за поновну употребу термина овде. 1043 00:46:06,720 --> 00:46:07,660 Ово је само број. 1044 00:46:07,660 --> 00:46:09,040 Дакле, то је као да кажеш три. 1045 00:46:09,040 --> 00:46:11,430 Класа је управо оно што желим да позове променљиву. 1046 00:46:11,430 --> 00:46:12,840 Ја га назвати ученика. 1047 00:46:12,840 --> 00:46:15,880 Али класа, то није класа у објектно оријентисани Јава врста начин. 1048 00:46:15,880 --> 00:46:17,220 То је само класа студената. 1049 00:46:17,220 --> 00:46:20,590 А тип података сваког елемента у том низу је ученик. 1050 00:46:20,590 --> 00:46:23,040 Дакле, ово је мало другачија и да каже нешто 1051 00:46:23,040 --> 00:46:25,250 Овако, то је само - 1052 00:46:25,250 --> 00:46:29,500 Ја кажем, дајте ми три студента и зовемо класу низа. 1053 00:46:29,500 --> 00:46:29,800 >> У реду. 1054 00:46:29,800 --> 00:46:30,680 Сада овде је четири петља. 1055 00:46:30,680 --> 00:46:33,480 Овај тип је познато - Итерате од нуле на до три. 1056 00:46:33,480 --> 00:46:35,160 А ево и нови део синтаксе. 1057 00:46:35,160 --> 00:46:37,710 Програм ће питај ме, човек, да га дају студенту 1058 00:46:37,710 --> 00:46:39,200 ИД, што је инт. 1059 00:46:39,200 --> 00:46:44,650 И овде је синтакса са којима можете да сачувати нешто у ИД поља на 1060 00:46:44,650 --> 00:46:48,630 локација класа конзола И тако Ова синтакса није нова. 1061 00:46:48,630 --> 00:46:51,450 То само значи да ми осми студент у класи. 1062 00:46:51,450 --> 00:46:52,940 Али, ово је нови симбол. 1063 00:46:52,940 --> 00:46:56,320 До сада, ми смо не може да се користи тачка, барем код овако. 1064 00:46:56,320 --> 00:47:01,490 То значи идите на струцт познат као студент и стави нешто тамо. 1065 00:47:01,490 --> 00:47:05,670 Слично томе, у овом новом реду, 31, идите напред и стави све што корисник упише 1066 00:47:05,670 --> 00:47:10,530 за име овде и шта раде за кућа, иста ствар, само напред и 1067 00:47:10,530 --> 00:47:13,230 стави га у кући.. 1068 00:47:13,230 --> 00:47:15,955 >> Дакле, шта је овај програм на крају урадио? 1069 00:47:15,955 --> 00:47:17,220 Можете видети мало задиркивање тамо. 1070 00:47:17,220 --> 00:47:24,780 Дозволите ми да иде напред и да направи Структуре 0 тачка сласх струцт 0, студентска ИД 1, 1071 00:47:24,780 --> 00:47:28,250 каже Давид Матхер, студент ИД 2. 1072 00:47:28,250 --> 00:47:32,070 Роб Киркланд, ученик 3. ИД. 1073 00:47:32,070 --> 00:47:35,010 Лаурен Леверит - 1074 00:47:35,010 --> 00:47:38,380 и једина ствар коју је овај програм учинио, што је само потпуно произвољна, 1075 00:47:38,380 --> 00:47:40,980 Желео сам да урадим нешто са овим подацима, сада када сам научио нас је како да 1076 00:47:40,980 --> 00:47:43,450 Структуре користе, је сам имао ово екстра петља овде. 1077 00:47:43,450 --> 00:47:45,260 Ја прелазили преко низа ученика. 1078 00:47:45,260 --> 00:47:49,170 Некада сам, можда је сада наш присни пријатељ, стринг упореди, на стирцомп 1079 00:47:49,170 --> 00:47:53,780 провера је 8. студента кућа једнак Матхер? 1080 00:47:53,780 --> 00:47:56,760 И ако је тако, само одштампате нешто произвољно се свиђа, да, то је. 1081 00:47:56,760 --> 00:47:59,430 Али, опет, само ми је дао прилике да користе и поново користити и 1082 00:47:59,430 --> 00:48:02,270 поново ову нову нотацију дот. 1083 00:48:02,270 --> 00:48:03,250 >> Па кога је брига, зар не? 1084 00:48:03,250 --> 00:48:06,270 Долази са студентског програма је прилично произвољан, али се испоставило 1085 00:48:06,270 --> 00:48:09,800 да можемо да урадимо корисне ствари са то, на пример, као што следи. 1086 00:48:09,800 --> 00:48:14,600 То је много компликованије Структ у Ц. Има десетак или више поља, 1087 00:48:14,600 --> 00:48:15,880 помало загонетно имену. 1088 00:48:15,880 --> 00:48:20,110 Али ако сте икада чули за графику формат се зове бит мапа, БМП, она 1089 00:48:20,110 --> 00:48:22,830 Испоставило се да је битмапа формат датотеке прилично изгледа да је то. 1090 00:48:22,830 --> 00:48:24,200 То је глупо мало насмејано лице. 1091 00:48:24,200 --> 00:48:27,840 То је мала слика која сам зумирао на прилично велики, тако да сам могао да видим сваки 1092 00:48:27,840 --> 00:48:30,410 од појединачних тачака или пиксела. 1093 00:48:30,410 --> 00:48:33,800 Сада испада да можемо да представљају Црна тачка са, рецимо, број 0. 1094 00:48:33,800 --> 00:48:35,520 И бела тачка са бројем 1. 1095 00:48:35,520 --> 00:48:39,140 >> Другим речима, ако желите да нацртате Насмејано лице и сачувајте ту слику у 1096 00:48:39,140 --> 00:48:42,680 рачунар, довољно је за складиштење и нуле оне које изгледају као ова, где, 1097 00:48:42,680 --> 00:48:45,250 опет, оне су беле и нула су црни. 1098 00:48:45,250 --> 00:48:48,290 А заједно, ако имате ефикасно грдња од јединица и нула, имате 1099 00:48:48,290 --> 00:48:51,030 мрежу пиксела, а ако се постави их, морате сладак 1100 00:48:51,030 --> 00:48:52,560 мало насмејано лице. 1101 00:48:52,560 --> 00:48:58,150 Сада, битмап формату, БМП, је ефикасно да се испод хаубе, 1102 00:48:58,150 --> 00:49:00,970 али са више пиксела Сот да може заправо представљају боје. 1103 00:49:00,970 --> 00:49:05,170 >> Али, када имате више софистициран формати као што су БМП и ЈПЕГ и ГИФ 1104 00:49:05,170 --> 00:49:09,360 са којима можете бити упознати, они датотеке на диску обично не само 1105 00:49:09,360 --> 00:49:13,760 имају нула и јединица за пиксела, али они имају неке метаподатака као и - 1106 00:49:13,760 --> 00:49:16,960 мета у смислу да није стварно Подаци али је корисно имати. 1107 00:49:16,960 --> 00:49:21,370 Дакле, ова поља се овде подразумева, и ћемо видети детаљније у П-СЕТ 1108 00:49:21,370 --> 00:49:25,810 5, да пре него што су нуле и јединице које представљају пиксела у слици, 1109 00:49:25,810 --> 00:49:29,110 постоји гомила метаподатака као величина слике и 1110 00:49:29,110 --> 00:49:30,250 ширину слике. 1111 00:49:30,250 --> 00:49:32,910 И приметио сам неке черупање искључен произвољне ствари овде - 1112 00:49:32,910 --> 00:49:34,260 ширина и висина. 1113 00:49:34,260 --> 00:49:36,160 Бит рачунају и неке друге ствари. 1114 00:49:36,160 --> 00:49:37,840 Дакле, постоји нека мета у датотеци. 1115 00:49:37,840 --> 00:49:41,470 >> Али разумевање како фајлови су постављени на овај начин, можете заправо 1116 00:49:41,470 --> 00:49:45,890 онда манипулишу слике, слике опоравак од диска, промените величину слике. 1117 00:49:45,890 --> 00:49:47,560 Али не можете баш побољшати их. 1118 00:49:47,560 --> 00:49:48,480 Требао ми је фотографију. 1119 00:49:48,480 --> 00:49:52,840 Тако да сам се вратио у РЈ овде, који сте видели на екрану пре доста времена. 1120 00:49:52,840 --> 00:49:57,160 И ако ја отворим Уводно овде, ово је шта се дешава ако покушате да зумирате и 1121 00:49:57,160 --> 00:49:59,380 побољшати РЈ. 1122 00:49:59,380 --> 00:50:01,480 Он не добија ништа боље стварно. 1123 00:50:01,480 --> 00:50:06,240 Уводно Сада је то врста замагљују мало, само да занемаре 1124 00:50:06,240 --> 00:50:11,040 Чињеница да је РЈ не добије посебно побољшана када се зумирати 1125 00:50:11,040 --> 00:50:13,310 И ако то овако, види квадрата? 1126 00:50:13,310 --> 00:50:15,490 Да, дефинитивно може видети квадрата на пројектору. 1127 00:50:15,490 --> 00:50:17,690 >> То је оно што добијете када побољшати. 1128 00:50:17,690 --> 00:50:22,570 Али у разумевању како наш РЈ или Насмејано лице спроводи ће нам дозволити 1129 00:50:22,570 --> 00:50:24,950 стварно писање кода који манипулише ове ствари. 1130 00:50:24,950 --> 00:50:29,970 А ја мислио да ћу завршити на ове белешке, с 55 секунди побољшати то је, 1131 00:50:29,970 --> 00:50:31,230 Усуђујем се, кажем прилично заблуду. 1132 00:50:31,230 --> 00:50:32,990 >> [ВИДЕО РЕПРОДУКЦИЈА] 1133 00:50:32,990 --> 00:50:34,790 >> -Он лаже. 1134 00:50:34,790 --> 00:50:38,310 Због чега, не знам. 1135 00:50:38,310 --> 00:50:41,200 >> -Па, шта знамо? 1136 00:50:41,200 --> 00:50:45,280 >> -Да у 9:15 Раи Сантоиа био на банкомату. 1137 00:50:45,280 --> 00:50:47,830 >> -Дакле, питање је шта је радио у 9:16? 1138 00:50:47,830 --> 00:50:50,750 >> -Снимање девет милиметара у нечему. 1139 00:50:50,750 --> 00:50:52,615 Можда је видео снајперисту. 1140 00:50:52,615 --> 00:50:54,760 >> -Или је радио са њим. 1141 00:50:54,760 --> 00:50:56,120 >> -Чекај. 1142 00:50:56,120 --> 00:50:57,450 Назад један. 1143 00:50:57,450 --> 00:50:58,700 >> -Шта видиш? 1144 00:50:58,700 --> 00:51:05,530 1145 00:51:05,530 --> 00:51:09,490 >> -Донесите му лице горе, преко целог екрана. 1146 00:51:09,490 --> 00:51:09,790 >> -Његове наочаре. 1147 00:51:09,790 --> 00:51:11,040 >> -Ту је одраз. 1148 00:51:11,040 --> 00:51:21,790 1149 00:51:21,790 --> 00:51:23,520 >> -То је Неувитас бејзбол тим. 1150 00:51:23,520 --> 00:51:24,530 То је њихов лого. 1151 00:51:24,530 --> 00:51:27,040 >> -И причао је да ко год да је носио ту јакну. 1152 00:51:27,040 --> 00:51:27,530 >> [ЕНД ВИДЕО РЕПРОДУКЦИЈА] 1153 00:51:27,530 --> 00:51:29,180 >> Давид Ј. Малан: Ово ће Проблем је сет 5. 1154 00:51:29,180 --> 00:51:30,720 Ми ћемо те видети следеће недеље. 1155 00:51:30,720 --> 00:51:32,330 >> МУШКИ СПИКЕР: На следећем ЦС50. 1156 00:51:32,330 --> 00:51:39,240 >> [ЦРИЦКЕТС цхирпинг] 1157 00:51:39,240 --> 00:51:41,270 >> [Музика свира]