>> [Музика свира]
>> Давид Ј. Малан: У реду.
>> [Смех]
>> Добродошао назад.
Ово је ЦС50.
И ово је крај недеље пет.
И до сада, ми смо прилично узимали здраво за готово да нема
постоји овај компајлер, јека, да сте позивајући се путем овог
други алат који се зове Марка некако магично конвертује изворни код
у објектном коду, у нуле и јединице да је ваш рачунари процесор, централна
јединица за обраду, у ствари разуме.
Али испоставља се да је број који је дешава испод хаубе у
између улаза и излаза.
>> И ја бих да предложи да се месо да се у мало детаљније у
ова четири корака, имамо нешто што се зове претходна обрада, нешто
зове састављање, које смо видели, нешто што се зове монтажа, и
нешто што се зове повезивање.
Дакле, до сада, у неком од наших програми, ми смо имали оштар укључује.
Недавно смо имали неки оштар дефинише за константе.
Тако испада да оне ствари које имају префикс хеш симбола или
Фунта је симбол су унапред процесор директиве.
То је само фенси начин да се каже да је линија кода који је заиста
претвара у нешто друго пре рачунар чак и покушати да конвертујете
Програм у нуле и јединице.
>> На пример, оштро укључује стандард У / х., Прилично једноставно значи ићи
напред, зграби садржај досијеа стдио.х и налепите их тамо.
Дакле, нема нуле и јединице у том тренутку још.
То је заиста само замена.
И то је урадио током тзв претходна обрада фази, када сте
стварно извршавати јека или посебно Направите у већини случајева.
Дакле, све ово што се дешава Први аутоматски до сада.
>> Онда долази компилација корак.
Али ми смо били превише поједностављена компилација.
Израда програма заиста значи узми од нечега као Ц,
изворног кода смо писање, доле на нешто што се зове скупштину.
Скупштина језик је нижи ниво језик који, на срећу, нећемо
су много прилике да Пишем овај семестар.
Али, то је на најнижем нивоу у осећај да сте буквално почнете да пишете
сабира и одузима и множите и оптерећења из меморије и сачувате у меморију,
Веома основне инструкције које рачунар, испод хаубе,
заиста разуме.
>> На крају, монтажа траје тај језик на нула и јединица које смо
описујући до сада.
И заиста на крају, ту је и такозвани повезивање фазе, које ћемо
видети у само једном тренутку, који комбинује Ваши нуле и јединице нулама и
оне друге људе пре него Направили сте.
>> Па размислите овај супер једноставан програм.
То је из недеље 1.
Само је рекао, Хелло Ворлд, на екрану.
Трчали смо кроз ово јека.
Или ми је трчао кроз Марка која је трајала јека.
И испоручују у времену у коме нека нула и јединица.
Али испоставило се да постоји међукорак.
Ако ја овде - пардон, није Желим да га видим још.
Ако ја одем у моју уређаја и ја отворим хелло.ц, овде
то је исти програм.
И шта ћу да урадим у мојој терминалу прозор овде ћу
покренути цланг уместо Марка, који аутоматизује све четири
ти кораци за нас.
И ја ћу да урадим јека-С и онда хелло.ц и онда ући.
>> И ја се трепери брзо опет, што је добро.
А сада у мало већи прозор, Ја ћу отворити гедит овде.
И ја ћу да отворим тај фајл, Испоставило се, то се зове хелло.с
садржи тај асемблеру Сам раније поменуо.
И то је оно што се зове скупштина језик, прилично низак ниво
инструкције да ваш АМД процесор или шта год да је то што је унутра
разуме.
И мов је за потез. позив за позива, на веома ниском нивоу функцију.
под је за одузимање.
>> Дакле, када имате одређену процесор унутра вашег рачунара, што га чини
различита, у односу на друга ЦПУ тржиште, које је он инструкције
разуме и често колико је ефикасан је, колико брзо је на извршавање неке
тих инструкција.
Сада више о овоме, можете да следеће јесени ЦС61 на колеџу.
Али овде се, на пример, неколико Идентификатори који може да изгледа познато.
хелло.ц је име програма.
>> Текст. -
нема много интереса тамо Управо сада, сећам да је текст
сегмента, од понедељка, где је у меморија ваш програм заправо завршава.
Дакле, то је барем нејасно познато тамо.
Овде, наравно, помиње наше главне функције.
Скролујете доле, они се односе на ствари називају регистри, веома мали комади
меморије унутар вашег стварног процесора.
И ако сам доле и помицати даље, видим неку врсту
индиректни помињање АСЦИИ.
И заиста постоји,, је то ниска, Здраво, зарез, свет.
>> Дакле, да скратим причу, ово је било дешава за вас, аутоматски,
испод хаубе све ово време.
А шта се дешава када је стварно обавите ви јека, или путем
Направите, ви прво све, из изворног кода,
тзв асемблеру.
Затим Цланг конвертује ове Скупштине језик до нуле и јединице.
И то је слајд који смо почели Наша расправа у недељи на 0 -
а затим недеља 1 на.
И на крају, те нуле и јединице комбинују са нуле и јединице
из тих библиотека смо узимали здраво за готово, као Стандард И / О или
Стринг библиотека или чак ЦС50 библиотека.
>> Тако да сликам ову слику више визуелно, имамо хелло.ц.
И то, наравно, користи иф функционишу рећи, здраво свет.
Компилација корак је потребно до да фајл смо управо видели хелло.с, чак
иако је то обично избрисана аутоматски за вас.
Али то је скупштина код у средњем кораку.
И онда када смо окупи склоп језик, да тако кажем, то је када се
се оне нула и јединица.
Тако смо зумирао ефикасно данас оно што смо узимали здраво за готово,
значи да ће изворни код да уложи приговор код.
>> Али на крају, сада та иста слика - хајде да гурају га до
лева страна.
И имајте на уму да је у самом врху Поменуо сам стдио.х.
То је фајл који смо укључени у готово свим
Програми се писало.
И то је фајл чији садржај се копија налепљен,
ефикасно врху вашег кода.
Али испоставило се да је, на рачунару систем негде, ту је вероватно
стдио.ц фајл који је неко написао година пре да имплементира све
функције које су проглашене у стдио.х.
>> Сада у стварности је то вероватно не на ваш Мац или ПЦ рачунар, или чак у
ЦС50 апарат је сирови Ц код.
Неко је већ саставио и укључени О фајл за објектном коду или..
фајл, који се односи на заједничке библиотеке који је претходно инсталиран и
унапред саставио за вас.
Али, претпоставимо да заиста постоји на нашем рачунару стдио.ц у паралелно
са јека.
Ваш број је прикупљен и окупили.
стдио.ц је код се саставља и окупили, тако да је ова последња
корак, овде доле, морамо некако веза, да тако кажем, ваши нуле и јединице
са својим нуле и јединице у једну једноставан програм који је на крају
зове само Здраво.
>> Дакле, то је све од магије која је се дешавало до сада.
И да ће наставити да се ове процеси за готово, али схватају
има много сочних детаља тамо дешава испод.
И то је оно што чини ваш рачунар са Интел Инсиде
нарочито разликују.
>> Дакле, у том смислу, ако желите да придружите нам се за ручак у петак, идите до
уобичајеној цс50.нет/рсвп место, 1:15 АМ у петак.
А сада неколико саопштења.
Дакле, имамо добре вести.
И ми имамо лоше вести.
Почните са неким добрим вестима овде.
>> [Стење]
>> У реду.
Па, то је технички празник, па то није толико дар од нас.
Али, онда, наравно, лоше вести.
>> [Стење]
>> Провео сам доста времена на ове анимације.
>> [Смех]
>> Ту ће бити преглед сесија ово долази понедељак.
То ће бити у 5:30 часова.
Ми ћемо вас подсетити на све те детаље путем е-поште на курсу је
сајт за само пар дана.
Биће снимљен и доступни убрзо после тога.
Дакле, ако не можете да је понедељак Ноћ слот, не брини.
Секције ове недеље ће такође фокусирати на преглед за квиз.
Ако је одељак је у понедељак, што је заиста универзитет празник, ми ћемо
увек испуни у одељку.
Ако једноставно не може да направи секција јер идете
е, то је у реду.
Учествујте у недељу или уторак секције или Туне-у да Јасоновом град, који је
доступни онлине.
>> Дакле, још лоших вести.
Дакле, у складу са програмом, имамо предавање у петак.
Али, добра вест -
јасно, сам провео превише времена на то.
>> [Смех]
>> Ми ћемо отказати поред петка предавања.
Тако да ће бити поклон за нас, тако да може заиста лепо предах у
између ове недеље и две недеље од данас.
Тако да нема предавања следеће недеље, само мали мали квиз, за ​​који треба да буде
добијају све више узбуђен.
>> Па хајде да сада обратимо пажњу на нешто што је заиста више визуелни
и узбудљивије и да створи услове за шта ће бити на видику
у само неколико недеља.
Након првог квиза, прелазимо Фокус нашег проблем поставе на други
домен специфичан проблем, да од форензика или безбедности више уопште.
>> У ствари, традиција са овим проблемом сет је за мене један од
асистент или ЦАС да хода преко кампус узимање неке фотографије
препознатљиве али не очигледне људи, места или ствари, онда ја сваке године
некако успевају да случајно брисање или оштети дигиталних медијских картица
што је унутар наше камере.
Али ништа страшно.
Ја могу ићи напред и прикључите да у мој компјутер.
Ја могу направити форензичку слику о њој, па да говоре, копирањем и нуле
Они с тога меморијске картице, било његова СД картица или Цомпацт Фласх картица или
шта год да сте упознати са.
И онда можемо да се преда.
>> И тако изазов, између осталог ствари за вас, биће да пишем
Ц код који опоравља гомилу ЈПЕГ за мене и открио ће бити
ти људи, места или ствари.
И такође ћемо разговарати, у овом проблему постављен и за дане који долазе, о
графика уопштено.
Смо их користе, курс, за избити.
Али, ви сте некако узети здраво за готово постоји висок ниво ове појмове
од правоугаоника и овала.
Али, испод хаубе постоје пиксела.
И ви сте морали да почну размишљам о томе.
Или ћете за П-СЕТ 4 морају да размишљају о јаз између својих цигле, како
брзо сте лопта креће преко екран за избити.
Тако да је тај појам тачке на екрану који је
долазе у игру већ.
>> Сада оно што видите, иако, је оно добијате на екрану рачунара.
Ако сте икада гледали неки добар или лош ТВ, шансе су они прилично
третира публику као тецхнопхобес који заправо не
Знам много о рачунарству.
Тако да је врло лако за полицију детектив да кажем, можете да
чишћење да се за мене?
Или побољша, зар не?
Побољшајте је као звучна реч у највише било који злочин у вези шоу.
А реалност је ако се узме веома мутна слика једног осумњиченог ради
нешто лоше, не можете само побољшати га.
Не можете да увећате бесконачно.
Не можете да видите у одсјајем на нечији ока који су починили тај
одређени злочин, упркос преваленција на ТВ.
>> И тако са да ћемо мотивисати да предстојећи сет проблема са Осврт на
неке емисије са којом бити упознат.
>> [ВИДЕО РЕПРОДУКЦИЈА]
>> -У реду.
Сада, хајде да добро погледам.
>> -Стани.
Рун то назад.
>> -Чекај мало.
Иди десно.
>> -Ту.
Фреезе то.
>> -Пун екран.
>> -У реду.
Фреезе то.
>> -Затегните се на то, хоћеш ли?
>> -Вектор у тог момка на задња точка.
>> Зоом-у овде на овом месту.
>> -Са правом опремом, осликан може бити увећана и изоштрио.
>> -Шта је то?
>> -То је проширење програма.
>> -Можеш ли јасно да се било?
>> -Не знам.
Хајде да га побољша.
>> -Унапређење одељак-6.
>> -Ја побољшан ниво детаља и -
>> -Мислим да је довољно да се побољша.
Пустите га да свом екрану.
>> -Унапређење одраз у свом оку.
>> -Хајде да ово кроз Видео проширење.
>> -Едгар, можете да побољшате ово?
>> -Држи се.
>> -Била сам радио на овој размишљање.
>> -Неко је одраз.
>> -Рефлексија.
>> -Ту је одраз на човековом лицу.
>> -Рефлексија.
>> -Ту је одраз.
>> -Увећамо огледалу.
>> -Можете да видите рефлексију.
>> -Можеш ли да побољша слику одавде?
>> -Можеш ли да га побољша овде?
>> -Да ли га побољшати?
>> -Можемо ли ово побољшати?
>> -Да ли га побољшати?
>> -Чекај мало, ја ћу повећати.
>> Зоом-у на врата.
>> -Кс10.
>> -Зоом.
>> [Смех]
>> -Мове ин
>> -Чекај, стани.
>> -Стоп.
>> То-пауза.
>> -Ротира око 75 степени вертикална молим.
>> [Смех]
>> -Стани, и назад на делу око врата поново.
>> -Имаш Појачивач то може битмап?
>> -Можда можемо да користимо Прадееп Сен метод да види у прозорима.
>> -Овај софтвер је стање у уметности.
>> -Икона вредност је искључен.
>> -Са правом комбинацијом алгоритама.
>> -Узео је осветљење алгоритме за следећи ниво и могу их користити за
побољшати ову фотографију.
>> -Лоцк и увећати з-осе.
>> -Побољшајте.
>> -Фреезе и побољша.
>> [ЕНД ВИДЕО РЕПРОДУКЦИЈА]
>> Давид Ј. Малан: Па Проблем Сет 5 је оно што је пред нама тамо.
Дакле, ускоро ћемо добити боље разумевање од када и зашто можете
и наш не може да побољша на тај начин.
Али прво, хајде да се врати нашу пажњу да неки од блокова ћемо
треба да буду у стању да исприча ту причу.
>> Дакле, сећам се да смо нацртао ову слику на Понедељак и мало прошле недеље.
И то описује распоред ствари у меморији рачунара када
покренут неки програм.
Технологија сегмент се врху, подсетимо, односи са стварним нуле и јединице
који сачињавају ваш програм.
Ту је, испод тога, неки иницијализовани или неиницијализоване податке, који обично
односи се на ствари као што су константе или канапа или глобалних променљивих које имају
проглашен унапред.
Постоји гомила, али доћи ћемо назад на то у мало.
>> А онда ту је стек.
Слично као гомилу каблова у кафетерија, ово је место где добија меморија
слојевима и слојевима кад год радиш оно што у програму?
Шта је стек за коришћење?
>> Да?
>> Позив функције.
Сваки пут када позовете функцију, то је дати делић меморије за његову
локалне променљиве или њене параметре.
И сликовито, видимо да са сваким сукцесивно функција зове, када
позиви Б позове Ц Д позиве, они се распореде на стек.
И у сваком од тих кришке меморија је у суштини јединствен простор
за ту функцију, што, наравно, је проблематично ако желите да предате
са једне функције на другу комад података које то желе
да мутира или промените.
>> Дакле, оно што је наше решење за омогућавање Функција представља један стек
оквир да промените меморију унутар другог стек оквира?
Како се те две приче једна другој?
Дакле, путем показивача или адреса, који, опет, само описати где у
меморије, путем специфичних зубало број, нарочито
вредност се може наћи.
Тако се сетим последњи пут превише смо наставили причу и погледао
прилично луд програма.
И овај програм је луд за неколико разлога, али највише забрињава је један
јер не провери шта?
>> Да, она не провери улаз.
Извини?
>> Ако је више од 12 знакова.
Дакле, врло паметно, приликом позивања мемцопи, који, као што име сугерише, само
копије меморије од свог другог аргумента у први аргумент.
Трећи аргумент, веома вешто, је да се уверим да не
копирате више од, у овом случају, дужину бара, број знакова,
у дестинацији, који је овај Низ Ц. Али проблем је у томе што
ако је Ц сама по себи није довољна да средим?
Ти ћеш да копирате број бајтова које сте добили.
Али шта заправо имају више бајтова него има простора?
>> Па, овај програм врло лудо само слепо наставља да предузме све што је
дато, здраво је бацксласх 0 ако је велики низ кратак
довољно, као и пет карактера.
Али, ако то је заправо 12 карактера или 1.200 карактера, видели смо последњи пут
да ћеш само да се потпуно заменити меморију да
не припада теби.
А у најгорем случају, ако да препишете црвени део било које смо назвали
повратна адреса -
ово је само где рачунар аутоматски, за тебе, иза
сцене, подвијања даље 32-битна вредност која подсећа га на оно што би требало адреса
вратити када трла, ова друга функција, се врши извршавање.
То је презла врста на које се враћа.
Ако замените то, потенцијално, ако си лош момак, могао да
потенцијално преузимање нечији рачунар.
А ви ћете сигурно срушити га у већини случајева.
>> Сада је овај проблем само погоршава као што смо почели да причамо о меморији
менаџмента уопште.
А маллоц за меморијске алокације, је функција које можемо да користимо да издвоји
меморије када не знамо унапред да ће бити потребно мало.
Тако, на пример, ако се вратим на уређај овде.
И ја отворим из прошлог времена хелло2.ц, сећам овај програм овде, који је изгледао
мало нешто овако, само три линије -
своје име, затим стринг име, на левој страни, једнако гетстринг.
А онда смо га одштампате, је име корисника.
>> Дакле, ово је супер једноставан програм.
Да буде јасно, иди пусти ме и да здраво-2.
Ја ћу да урадим тачка црта здраво-2.
Реците своје име -
Дејвид.
Ентер.
Здраво Давид.
Чини се да се добро ради.
Али шта се заиста дешава Испод хаубе овде?
Прво да одлепите неким слојевима.
Стринг је само синоним ми смо схватио за шта?
Знак звезда.
Дакле, хајде да се мало више волшебни али више технички тачно да је та
је знак звездице, што значи да име, да је променљива.
Али, оно што је назив продавница адреса Чар, који осећа мало чудно
јер ми се назад стринг.
Идем назад више слова не знак.
>> Али, наравно, потребно је само први Чар адреса да се сетите где
читав низ, јер је зашто?
Како да схватим где је крај стринг се зна почетак?
Бацксласх нула.
Дакле, са те две доказе да схватите пре почетка и краја
сваки стринг су, све док су правилно формирана са тим нулл
терминатор, да инверзна коса црта нула.
>> Али ово се зове гетстринг.
И испада да гетстринг Све ово време било некако
варања за нас.
То радили овај рад, како би били сигурни, добијање стринг од корисника.
Али где је то сећање су долазили?
Ако се вратимо на слици овде и применити дефиницију из само
малочас, да је стек где меморија иде када се називају функције,
по тој логици, кад позовете гетстринг, а онда сам укуца
Д-В-И-Д Ентер, где је Д-В-И-Д бацксласх нула чувају, на основу
прича коју сте нам сада?
>> Чини се да је у стек, зар не?
Када позовете добијете ниску добијате мало парче меморије на стек.
Тако да је сасвим разумљиво да је Д--В-И-Д бацксласх нула се чува
има у стеку.
Али, чекај мало, гетстринг враћа стринг који, да тако кажем, што значи
То је лежиште од кафетерији се скидају са стека.
И ми смо прошли пут рекли да чим Функција враћа, и ти то
касета, да тако кажем, ван стек, шта можете претпоставити о остацима
то сећање?
Некако сам их редрев као знаком питања јер ефикасно постану
непознат вредности.
Они се могу поново користити када се неки следећа функција се зове.
>> Другим речима, ако се деси да се складиштење -
Ја ћу извући брзо слику овде на стека.
Ако се деси да се цртање дно моје меморије сегмента, а ми ћемо рећи
да је ово место сећања окупирали главни и можда арг ц и
АРГ против и било шта друго у програму, када гетстринг се зове,
вероватно добија гетстринг комад меморије овде.
А онда Д-В-И-Д некако завршава у овој функцији.
И ја ћу да поједностављују.
Али, хајде да претпоставимо да је Д-В-И-Д бацксласх нула.
Дакле, ово је бајтова користе у оквир за гетстринг.
>> Али чим гетстринг повратак, ми смо је рекао да је ово последњи пут меморија преко
овде све постаје - Воопс! -
све постаје ефективно брише.
А ми на памет ово сада као питање знаци, јер ко зна
шта ће бити од тог сећања.
Заиста, ја често зовем функције осим гетстринг.
И чим ја зовем неки други функција него гетстринг, можда не у
Овај програм смо само гледали али на неки други, сигурно неки други
Функција може завршити се даје овај следећи спот у стеку.
>> Дакле, не може бити да гетстринг продавнице Д-В-И-Д на стек, јер бих
Одмах изгубите приступ.
Али ми знамо да гетстринг само враћа оно?
То није повратак у ми шест знакова.
Шта се заиста враћа се закључујемо последњи пут?
Адреса првог.
Тако некако, кад си звао гетстринг, то је издвајање комад меморије за
стринг који тип корисника и онда се враћају адреса њега.
И испоставило се да када желите да функционишу на додели меморију у ово
начин и повратак за особу која се зове да функција, адреса
који комад меморије, ви апсолутно не може да се стави у стеку на
дно, јер то је само функционално ће не твоја постати веома
брзо, тако да вероватно може да погоди где вероватно ћемо да га бацим
уместо тога, тзв гомила.
>> Дакле, између дну памћење је распоред и врх памћење је
распоред су гомила сегмената.
Један је стек, и десно изнад ње је гомила.
А гомила је само другачији комад меморија која се не користи за функције
кад они зову.
Користи се за дугорочну меморију, када желите једна функција да зграби неке
меморије и моћи да виси на њој не изгубе контролу над њим.
>> Сада би можда могао одмах видим да ово није
нужно савршен дизајн.
Као ваш програм издвојено памћење стек, или како ви називате и више
више функција, као и да издвоји меморија на гомили са маллоц офф као
гетстринг ради, што јасно Изгледа да је проблем неизбежан?
>> Право.
Као и чињеницу да су ове стрелице су усмерени један према другом
не слути на добро.
И заиста, могли бисмо врло брзо срушити Програм на много начина.
У ствари, мислим да имамо урадили случајно једном.
Или, ако не, хајде да то урадимо намерно сада.
Дозволите ми да иде напред и писати супер брзо програм под називом донтдотхис.ц.
И сад ја идем у ту и не укључују оштар стдио.х.
Хајде да прогласи функција ФОО узима нема аргумената, што је
означен као и по празнини.
>> И једина ствар трла ће урадити је Фоо позив, који вероватно није
најпаметнија идеја, али тако је то.
Ент главни празнина.
Сада једино што ће главни да урадите је да позовете ФОО као добро.
И за сваки случај, ја ћу да идем напред и реци иф "Поздрав из
Фоо. "
>> ОК.
Дакле, ако ја не би било грешке, Направите донтдотхис дот црта.
И хајде да то урадимо у већем прозору -
тачка сласх, донтдотхис.
Хајде.
Ух ох.
Очигледно, можете да урадите.
Проклетство.
ОК.
Чекај.
Станд би.
Да ли смо ми -
Урадили смо то користили за Марка.
>> [Уздише]
>> Ја знам, али мислим да смо избрисао то.
Ух, да.
Проклетство.
Решите овај Роб.
Шта?
То је врло једноставно.
Да, ми смо окренули оптимизацију искључен.
У реду, жао стоје.
Сада се осећам боље.
ОК.
У реду.
>> Па хајде да компајлирате овај -
Нека ти донтдотхис.
Можда ћете морати да промените ово дотхис.ц за који тренутак.
Ту смо.
Хвала.
ОК.
Дакле, чињеница да сам се штампа нешто што се у ствари само
успорава процес којим се би достигли ту тачку.
ОК.
Фуј!
>> Дакле, шта се заправо дешава?
Разлог је, баш као и на страну, је чини ништа у погледу улаза и
излаз обично спорији зато што морате да пишете карактере
екран, Има да се крећете.
Дакле, да скратим причу, ја заправо имао Десило се тако нестрпљив, имали бисмо
видели крајњи резултат као добро.
Сада када сам вожњу из штампе-упс, ми смо то одмах.
Дакле, зашто се ово дешава.
Па, једноставно објашњење, наравно, је то трла вероватно не треба
да се зове.
>> Сада, у општим цртама, ово је рекурзије.
И ми смо мислили неколико недеља Пре рекурзивни је добро.
Рекурзија је тај магични начин изражава се језгровито супер.
И то само ради.
Али, ту је кључна карактеристика свих Рекурзив програми Разговарали смо
око и погледао до сада, који је да су они имали шта?
Базни случај, што је био неки фиксирани случај да је у неким ситуацијама
не зови ФОО, што је очигледно није случај овде.
>> Дакле, оно што се заиста дешава у смислу ове слике?
Па, када је главни зове Фоо, она добија парче меморије.
Када фоо фоо зове, она добија парче меморије.
Када фоо фоо зове, она добија парче.
Она добија парче.
Пошто је трла никада не враћају.
Ми никада нисмо брисање једног од оних оквири са стека.
Дакле, ми дува кроз гомилу, не спомињем ко зна шта још, и
смо прекорачење границе наше такозвани сегмент меморије.
Грешку Иди сегментација лажна.
>> Дакле, решење постоји очигледно не ради то.
Али већи импликација је да, да, апсолутно постоји нека граница,
чак и ако то није добро дефинисан, како многе функције можете да позовете у
Програм, колико пута функција може да се назове.
Дакле, иако смо урадили проповедамо рекурзију као ове потенцијално магична ствар
Пре пар недеља за СИГМА функцију, и када смо добили податке
структуре и ЦС50, видећете други апликације за њега, то није
нужно најбоља ствар.
Јер, ако се функција позива, позива се, чак и ако постоји база
случају, ако не погодио тај основни случај позиве за 1.000 или 10.000 позива, од
да пут можда понестало простора на такозваном стеку и притиснете
неких других сегмената меморије.
Дакле, то је сувише дизајн компромис између елеганције и између
робусност ваш посебно имплементација.
>> Дакле, ту је још једна лоша страна или Имам још један на оно што смо
радили до сада.
Када сам звао гетстринг -
дозволите ми да се вратим у Хелло-2.
Приметимо да зовем гетстринг, која се враћа адресу.
А ми данас тврде да је адреса је из гомиле.
И сада сам одштампа стринг на тој адреси.
Али ми никада звао супротност гетстринг.
Никада нисмо имали да цаллл функцију као унгетстринг, где вратити
то сећање.
Али, искрено ми вероватно требало да буде.
Јер ако се стално питате рачунар за меморију, путем неког као
гетстринг али никада га врати, сигурно и то је сигурно довести до
Проблеми при чему нам понестане меморије.
>> А у ствари, можемо да тражимо ове Проблеми са новог алата чија је употреба
је мало загонетан да куцате.
Али, дозволите ми да иде напред и прска га на екрану за који тренутак.
Ја ћу ићи напред и покрените Валгринд са параметром чија је прва наредба
линија аргумент је име тог програма здраво-2.
И, нажалост, то је излаз је атроциоусли
Комплекс без икаквог разлога.
Дакле, видимо сву ту збрку.
Давид је рећи моје име.
Дакле, то је програм заправо ради.
И сада смо добили овај излаз.
>> Дакле Валгринд је сличан по духу ГДБ.
То није за отклањање грешака по себи.
Али, то је сећање правописа.
То је програм који ће покренути ваш програмира и да вам кажем, ако тражите
компјутер за меморију и никада га предао назад, тиме што значи да имате
осипање меморије.
А мемори леакс имају тенденцију да буду лоше.
А ти се корисници рачунара имају вероватно осетио то, да ли имате
Мац или ПЦ.
Да ли сте икада користили рачунар за и док не рестартовао у неколико
дана, или само имате много програми раде, а проклету ствар
успорава до застоја, или барем то је супер нервира да користите, јер
Управо сам све супер споро.
>> Сада то може бити било који број разлога.
То може бити бесконачна петља, буба у нечији број, или, једноставно, то
може да значи да користите више меморије, или покушавају да, него ваш
рачунар заправо има.
А можда постоји грешка у неком програму да стално питате за меморију.
Читачи за година били познати по ово, тражећи више и више меморије
али га никада није вратио предаје.
Наравно, ако имате само коначан количина меморије, не можете да питате
бесконачно много пута за неки од тог сећања.
>> И тако оно што овде видите, иако поново валгринд је излаз
непотребно сложен да поглед на Прво, ово је занимљив део.
Хеап -
у употреби на излазу.
Па ево колико је меморије у употреби у гомили на
пут изашао мој програм -
очигледно шест бајтова у једном блоку.
Зато ћу да талас руке по којој је блок.
Замислите то је само комад, више техничка реч за комад.
Али шест бајтова -
шта су шест бајта која су и даље у употреби?
>> Тачно.
Д-В-И-Д обрнута коса црта нула, пет слова Име плус нулл терминатор.
Дакле, овај програм валгринд приметио да сам тражио шест бајтова, очигледно, по
гетстринг начин, али никада Дао их назад.
А у ствари, то можда неће бити тако ако је очигледно мој програм није три
линије, али то је 300 линија.
Тако да заправо може дати другој команди линија аргумент да Валгринд
буде разумљивији.
То је мало непријатно да се сетим.
Али ако то урадим -
хајде да видимо.
Цурење -
Да ли је то цури -
чак и не сећам шта је искључен руци.
>> - Провера цурења једнако пуна.
Да, хвала.
- Провера цурења једнако пуна.
Ентер.
Исти програм извршава.
Упишите у Давида поново.
Сада видим мало више детаља.
Али, испод гомиле резиме, који је идентична четири - ах,
ово је лепо.
Сада Валгринд се ствари гледа мало теже у мом коду.
И она каже да је, по свему судећи, маллоц у реду -
смо умањили.
У реду -
ми не видимо шта је то ред.
Али маллоц је први кривац.
Ту је блог у маллоц.
>> У реду?
ОК, нема.
Зар не?
Звао сам гетстринг.
гетстринг очигледно позива маллоц.
Дакле, шта линија кода је очигледно је крив за то што
издвојила ову меморију?
Претпоставимо да је онај ко је написао маллоц је већ довољно дуго да је то
није њихова кривица.
Дакле, то је вероватно моја.
гетстринг у цс50.ц - тако да је филе негде на рачунару -
на линији 286 изгледа да кривац.
Сада претпоставимо да је ЦС50 око за пристојну количину времена, тако
и ми смо непогрешиви.
Тако да вероватно није у гетстринг да буг лежи, већ у
здраво-2.ц линија 18.
>> Па хајде да погледамо шта та линија 18 је било.
О.
Некако ова линија не мора да буде луд, по себи, али то је разлог
иза тог мемори леак.
Па супер једноставно, шта би интуитивно бити решење овде?
Ако тражимо меморију, никада нису били дајући га назад, а изгледа да је то
проблем, јер током времена мој рачунар Можда останете без меморије, може успорити
доле, лоше ствари се може догодити, па, шта је једноставно интуитивно решење?
Само ми је врати.
>> Како да ослободите меморију?
Па, на срећу то је прилично једноставно само да кажем бесплатно име.
И никада нисмо урадили раније.
Али у суштини могу да се сетим слободан као супротност маллоц.
бесплатно је супротно од доделу меморије.
Тако да сада дозволите ми компајлирате ово.
Направите хелло-2.
Дајте да поново покренете. здраво-2 Давид.
Дакле, чини се да ради у потпуно исти начин.
Али, ако се вратим на Валгринд и поново покренути да иста команда на моје ново
саставио програм, куцање у моје име, као и раније -
лепо.
Хеап резиме -
у употреби на Екиту -
бајтова нула нула блоковима.
И ово је супер лепо, све хеап блокови су ослобођени.
Нема цурења су могуће.
>> Тако долази, не са проблематичним Сет 4, али са проблематичним сет 5, за форензику
и надаље, и ово ће постати мера тачност ваш
програма, без обзира да ли имате или не или немају мемори леакс.
Али срећом, не само да можете резоновати кроз њих интуитивно, који
је, вероватно, лако за мале програме али теже за веће програме,
Валгринд, за оне већих програма, може да вам помогне да идентификујете
Посебан проблем.
>> Али постоји један други проблем која би могла настати.
Дозволите ми да отворим овај фајл овде, што је, опет, донекле једноставан пример.
Али, хајде да се фокусирају на оно што Овај програм ради.
Ово се зове мемори.ц.
Ми ћемо писати касније данас у зип изворног кода данашњег.
И приметио сам да се позива функција Ф да нема аргумената и
враћа ништа.
У 20. реду, ја сам очигледно проглашења показивач на инт и називајући га к.
Ја додељивање је повратак вредност маллоц.
И само да буде јасно, колико је бајтова ам Вероватно се вратимо из маллоц
у овој ситуацији?
>> Вероватно 40.
Одакле ти то?
Па, ако се сећате да је често инт 4 бајта, барем је у
апарата, 10 пута 4 је очигледно 40.
Дакле маллоц враћа адресу од комад меморије и складиштења да
обрати на крају у к.
Дакле, да буде јасно, шта онда се дешава?
Па, дозволите ми да се вратите на нашу слику овде.
Само да не скрене свег Меморија рачунара, дозволите ми да иде напред и
нацртати цео правоугаоник који представља све моје меморије.
>> Ми ћемо рећи да стек је на дну.
А ту је и текст сегмент у су неиницијализоване податке.
Али, ја ћу само да издвоје оне друге ствари далеко као тачка, тачка тачку.
Ја ћу само да се односи на ово као гомилу на врху.
А онда на дну ове слике, да представља главни, ја ћу
да га дају кришке памћење на стек.
За ф, ја ћу да га дају парче сећања на стек.
Сада, морам да се консултујем са својим изворни код поново.
Који су локалне променљиве за главни?
Очигледно ништа, тако да је кришка ефикасно празан или не чак ни као велики
као што сам то нацртао.
Али у ф, имам локалну променљиву, која се зове к.
Дакле, ја ћу да наставим и да ф комад меморије, називајући је к.
>> А сада маллоц од 10 пута 4, Дакле маллоц 40, где је то
меморија долази?
Не смо нацртао слику овако раније.
Али, хајде да претпоставимо да је то ефикасно долази одавде, па се,
два, три, четири, пет.
И сад ми треба 40 од ових.
Тако да ћу учинити тачка, тачка, тачка сугерисати да има још више меморије
враћа из гомиле.
Сада која је адреса?
Бирајмо наша произвољна баве као и увек -
Ок123, иако вероватно ће да буде нешто потпуно другачије.
То је адреса првог бајта у меморије да питам за маллоц.
>> Дакле, укратко, једном линије 20 извршава, оно што је буквално
складиште унутар к овде?
Ок123.
А вола је незанимљива.
То само значи да је овде хексадекадни број.
Али, оно што је кључно јесте да то што сам продавницу у Кс, који је локална променљива.
Али њен тип података, опет, је адреса цео број.
Па, ја ћу да сачувате Ок123.
Али опет, ако је то мало превише непотребно компликује, ако помицати
назад, ми можемо ово даље апстрактна сасвим разумно и само да кажем да је к
показивач на ту меморију.
>> ОК.
Сада је питање при руци је следећи -
линија 21, испоставља се, није луд.
Зашто?
>> Извини?
Он нема -
кажу да још једном.
Па, то није случај бесплатно.
Дакле, то је већ друго.
Дакле, постоји још једно, али посебно на линији 21.
>> Тачно.
Ова једноставна линија кода је само бафера, тампон преплављен.
Амортизер само значи комад меморије.
Али то комад од величине меморије 10, 10 целих бројева, што значи да смо
индекс у њега помоћу синтаксичких шећер од низа нотацији, квадрат
заграде, имате приступ конзола к 0 к 1 к конзола,
носач тачка, тачка, тачка.
к 9 носач је највећи.
Дакле, ако ја урадим к држач 10, где Ја стварно идем у меморији?
>> Па, ако имам 10 Инт -
хајде да сви заправо нерешено од ових овде.
Дакле, то је био први пет.
Ево осталих пет интс.
Дакле, к 0 носач је овде. к 1 носач је овде. к носач 9 је овде. к носач
10 је овде, што значи да говорим, на линији 21, рачунар да стави
где је број?
Број 0 где?
Па, то је 0, да.
Али чињеница да је њен 0 је врста случајности.
То може бити број 50, за све бринемо.
Али ми покушавамо да га ставите на к држач 10, где се ова
знак питања је нацртана, који није добра ствар.
Овај програм може врло добро срушити као резултат.
>> Сада, хајде да идемо напред и видети да ли то је, заиста, шта се дешава.
Направите меморију, пошто фајл се зове мемори.ц.
Идемо напред и покрените Програм Мемори.
Тако нам се посрећило, у ствари, чини се.
Имамо среће.
Али, хајде да видимо да ли ћемо сада покренути валгринд.
На први поглед, можда мој програм Чини се да су савршено тачна.
Али допустите да радим са Валгринд - Провера цурења једнако пуно о меморији.
>> И сад кад сам покренути ово -
занимљиво.
Неважећи писање величине 4 у линија 21 од мемори.ц.
Линија 21 мемори.ц од којих је један?
О, занимљиво.
Али чекајте.
Величина 4, шта је то говорите?
Ја само нисам писати, али је од величине 4.
Зашто је 4?
То је зато што је инт, који је, опет, четири бајта.
Тако Валгринд пронашли грешку коју сам, гледајући мој код, зар не.
А можда ваш ТФ би или не би.
Шта Валгринд Али сигурно утврдио да Направили смо ту грешку, чак и
иако нам се посрећило, а рачунар одлучио, ех, ја нећу да се сруши
само зато што дотакао један бајт, један Инт је вредно памћења да нисте
њихово власништво.
>> Па, шта је овде луд.
Адреса -
ово је лудо изгледа адреса у хексадецимални.
То само значи да негде у гомили је нула бајта након блок величине 40
додељује.
Дозволите ми да умањите овде и видите да ли ово је мало више од помоћи.
Занимљиво.
40 бајта су дефинитивно изгубљени пораза у 1. 1..
Опет, више речи него што је корисно овде.
Али, на основу истакнуте линије, где би требало да вероватно фокусирам
пажња за другу буг?
Изгледа као линије 20 мемори.ц.
>> Дакле, ако се вратимо на линији 20, који је онај који сте раније идентификовали.
И то није нужно луд.
Али, ми смо то преокренути своје ефекте.
Па како да исправи бар један од тих грешака?
Шта сам могао да урадим после линији 21?
Сам могао да урадим без к, па је да се врати то сећање.
И како могу да поправим ову грешку?
Ја дефинитивно треба да иде не даље од 0.
Дакле, дозволите ми да покушам и поново покренути ово.
Жао нам је, дефинитивно идем не даље од 9.
Маке меморију.
Дозволите ми да реприза Валгринд у већем прозору.
А сада погледајте.
Лепо.
Сви хеап блокови су ослобођени.
Нема цурења су могуће.
А горе изнад ту, нема помена више од неважеће права.
>> Само да се похлепан, и хајде да видим да други демонстрација
не иде како треба -
Ја нисам посрећи малопре.
А чињеница да је ово 0 је можда непотребно доводи у заблуду.
Хајде само до 50, нешто произвољно број, направи меморијски дот цртица меморију -
ипак посрећи.
Ништа не пада.
Рецимо да сам урадим нешто стварно глупо, а ја 100.
Дозволите ми да преобликује меморије, дот сласх меморија -
посрећило поново.
Како око 1.000?
интс ван, отприлике, где би требало да буде?
Маке меморију -
проклетство.
>> [Смех]
>> ОК.
Хајде да не зезај се више.
Реприза меморију.
Ту смо.
У реду.
Дакле, очигледно је да индекс 100.000 Интс изван где би сте били у
меморије, лоше ствари се дешавају.
Тако да је ово очигледно није тешко, брзо правило.
Ја сам се користе суђења грешка и да се тамо.
Али, то је зато, да скратим причу, рачунара меморија је подељена
у ове ствари називају сегменти.
А понекад, у ствари компјутер вам је дао мало више меморије
него што затражите.
Али, због ефикасности, то је само лакше добити више меморије, али само да вам кажем
да сте добијање део тога.
>> А ако се посрећи понекад, Стога, можда ћете моћи да додирнете
меморија која не припада теби.
Ви немате гаранцију да оно што вредност сте ставили тамо ће остати, јер
рачунар и даље мисли да није твој, али то није нужно иде
да удари још један сегмент у меморији рачунар и изазивају грешку као
Овај овде.
У реду.
Сва питања онда на меморију?
>> У реду.
Хајде да погледамо ту, онда, у нешто што смо узимали за
одобрен за неко време, који је у овом фајлу названом цс50.х.
Дакле, ово је фајл.
Ово су само гомила Коментари на горе.
А можда сте гледали ово ако око вас упери на уређају.
Али, испоставило се да је све време, када смо користили као стринг
синоним, средство којим се проглашава који је био синоним за ово
кључна реч типедеф, за дефинисање типа.
И ми у суштини говориш, направити Стринг синоним за цхар звезде.
Та средства помоћу којих стек створио ову обуку точкова познате као
стринг.
>> Сада овде је само прототип за гетцхар.
Можда смо видели раније, али то је заиста оно што ради. гетцхар
нема аргумената, даје знак.
гетдоубле нема аргумената, враћа двојника.
гетфлоат нема аргумената, враћа пловак, и тако даље.
Тоноване је овде. гетлонглонг је овде.
А гетстринг је овде.
И то је то.
Ово је још једна љубичаста линија Претпроцесор Директива због
хасхтаг на почетку.
>> У реду.
Дакле, сада пусти ме на цс50.ц.
И нећемо говорити превише дуго на томе.
Али, да вам дати увид у оно што је траје све ово
време, пусти ме да -
Урадимо гетцхар.
Тако је углавном гетцхар коментаре.
Али, то изгледа овако.
Дакле, ово је стварна функција гетцхар да смо били
узимајући здраво за готово не постоји.
И иако нисмо користили ову да често, ако икад, то је бар
релативно једноставна.
Тако да вреди Кратак поглед овде.
>> Дакле гетцхар има бесконачну петља, намерно тако очигледно.
То онда зове - и то је врста лепо поновна употреба кода смо сами написали.
Он позива гетстринг.
Јер шта то ради значи да се знак?
Па, можда и покушати да се цео ред текста од корисника и
па погледајте само једном од оних ликова.
У линији 60, ево мало мало здравог разума провере.
Ако гетстринг вратио нулл, хајде да не наставимо.
Нешто је кренуло наопако.
>> Сада је то нешто смета, али конвенционалне у Ц. цхар мак вероватно
представља управо оно што на основу свог имена?
То је константа.
То је као нумеричке вредности Највећи знак да може да заступа са
један залогај, што је вероватно број 255, што је највећи број ти
представљају осам битова, почевши од нуле.
Тако сам искористити, у овој функцији, када писања кода, само зато што
ако нешто крене наопако, али у гетцхар његова сврха у животу је да се врати
Чар, морате бити у стању да некако да сигнализира кориснику да
нешто није у реду.
Ми не можемо вратити нулл.
Испоставило се да је нула показивач.
А опет, има гетцхар да се врате знак.
>> Дакле конвенција, ако несто крене погрешно, да је, програмер, или у
овом случају, ја са библиотеком, имао сам само да одлучи произвољно, ако
нешто крене наопако, ја ћу да врати број 255, који је заиста
значи да не можемо, корисник може да откуцате карактер заступа
број 255, јер смо имали га украде као тзв сентинел вредности за
представљају проблем.
Сада испада да је лик 255 није нешто што можете да упишете на
тастатура, тако да није страшно.
Корисник не приметити да Украли ми овај лик.
Али ако сте икада видели у ман страницама рачунарски систем неке референце на
све капе као константа то да каже, у случају грешке ова стална можда
се вратио, то је све учинио неки људски година је самовољно одлучио да
вратите ову посебну вредност и зову константа у случају
нешто крене наопако.
>> Сада магија се дешава овде.
Прво, ја сам у реду 67 изјављујући два знака, Ц1 и Ц2.
А онда у реду 68, заправо има линија кода који подсећа
принтф наш пријатељ, с обзиром да је нема Цс одсто у наводницима.
Али приметили шта се овде дешава. ссцанф значи стринг скенирање -
подразумева скенирање форматиран ниска, ерго ссцанф.
Шта то значи?
То значи да прође да ссцанф стринг.
А линија је год које корисник укуцава ин
Пролазите да ссцанф стринг формату као што Ово говори да је оно што су сцанф
надајући се да корисник унесе
Онда прође-у на адресе два комади меморије, у овом случају,
јер имам два чувара места.
Зато ћу му дати адресу од Ц1 и Ц2 адреса.
>> И сећам се да вам дају неку функцију адресу неке променљиве, што је
импликација?
Шта могу да урадим функционишу као резултат давања му адресу
променљива, за разлику од сама променљива?
То може да се промени, зар не?
Ако сте имали некога карте за физичко адресу, они могу да иду и до
шта год желе на тој адреси.
Иста идеја овде.
Ако прође у ссцанф, адреси два комади меморије, чак и ове сићушне
мали комади меморије, Ц1 и Ц2, али ми то рећи адресу њих,
ссцанф можете га променити.
>> Дакле ссцанф сврха у животу, ако читамо ман страница, јесте да прочитате оно што
корисник откуцао у, који има наду за корисника откуцан на карактер и можда
још један лик, и шта год корисник откуцан, први знак иде
овде, други лик иде овде.
Сада, као и на страну, овај, и ти би само знам из документације,
Чињеница да сам ставио празан простор само значи да није ме брига да ли
корисник удари размак неколико пута пре него што он или она узима
карактер, ја ћу игнорисати сваки празан простор.
Тако да, ја знам из документација.
>> Чињеница да постоји друга% Ц затим размаком заправо
намерно.
Желим да будем у стању да открије да ли корисник зезнуо или не сарађују.
Тако да се надам да корисник само куцао у једном лику, дакле надам се
ссцанф да ће само да се врати вредност 1 јер, опет, ако сам прочитао
документација, ссцанф сврха у живот је да се врати у броју
варијабле које су испуњене са корисничког уноса.
>> Прошао сам у две варијанте адресе, Ц1 и Ц2.
Надам се, ипак, да је само један од погине, јер ако их ссцанф
повратак 2, шта је по свој прилици Импликација логично?
Тај корисник није дај ми једну карактер као што сам му рекао, или јој.
Вероватно су откуцана на најмање два карактера.
Дакле, ако сам уместо тога није имао други % Ц, само сам имао један, који
искрено би било интуитивно приступ, мислим на први поглед,
нећете бити у стању да детектује Ако корисник је дајући вам више
улаз него што стварно желео.
Дакле, ово је имплицитном облику за проверавање грешака.
>> Али, обратите пажњу шта ја овде радим.
Једном сам сигуран да ми је један корисник карактер, ја ослободи линију, ради
супротно од гетстринг, што заузврат користи маллоц, а онда се вратим
Ц1, лик који сам се надао корисник и то само под условом.
Тако брзо осврнуо само, али на сва питања на гетцхар?
Вратићемо се на неке од осталих.
>> Па, дозволите ми да идем напред и урадили - Претпоставимо сада, само да мотивише наше
дискусија за недељу дана плус време, то је фајл под струцтс.х.
И опет, то је само део нечега што је пред нама.
Али, обавештење да је много ово је коментар.
Дозволите ми да нагласим само занимљив део за сада.
типедеф -
опет има исте кључне речи.
типедеф користимо да прогласи стринг као посебан тип података.
Можете да користите типедеф за креирање новог бренда типови података који нису постојали када
Ц је измишљен.
На пример, долази са инт цхар Ц. долази са дупло Ц. долази са Ц. Али
нема појма студента.
А ипак, било би веома корисно да се у стању да напише програм који складишти
у променљивој, ИД број ученика, њихово име, и њихова кућа.
Другим речима, три комада података, као инт и
ниска и други стринг.
>> Са типедеф, што је прилично моћна о томе и кључних речи за стурцт
структура, ви, програмер у 2013, заправо може дефинисати своје
типови података који нису постојали година Пре него што одговара вашим сврхе.
И ево, у редовима 13 до 19, смо проглашења нови тип података, као што су
инт, али називајући је ученик.
И унутар ове променљиве ће бити три ствари - инт, ниска,
и стринг.
Тако да могу да се сетим шта је стварно се овде догодило, иако је ово
мало поједностављења за данас, Студент је у суштини иде
да изгледа овако.
Његова ће бити комад меморија са ИД, име
поља, а кућа поље.
И ми ћемо бити у могућности да користе те комаде меморије и приступ их на следећи начин.
>> Ако одем у струцт0.ц, овде је релативно дуго, али након
образац, кода који користи овај нови трик.
Дакле, прво, дозволите ми да вам скренем пажњу до занимљивих делова до врха.
Оштро дефинише студенте 3, објављује сталне називају студенти и лица са пренетим
је произвољно број 3, само тако да имам три ученика коришћењем
Овај програм за сада.
Ево Главни.
И приметите, како ја изјављујем низ ученика?
Па, само користе исту синтаксу.
Реч Студент је очигледно ново.
Али, студентске класе, носач студената.
>> Дакле, нажалост, има много за поновну употребу термина овде.
Ово је само број.
Дакле, то је као да кажеш три.
Класа је управо оно што желим да позове променљиву.
Ја га назвати ученика.
Али класа, то није класа у објектно оријентисани Јава врста начин.
То је само класа студената.
А тип података сваког елемента у том низу је ученик.
Дакле, ово је мало другачија и да каже нешто
Овако, то је само -
Ја кажем, дајте ми три студента и зовемо класу низа.
>> У реду.
Сада овде је четири петља.
Овај тип је познато - Итерате од нуле на до три.
А ево и нови део синтаксе.
Програм ће питај ме, човек, да га дају студенту
ИД, што је инт.
И овде је синтакса са којима можете да сачувати нешто у ИД поља на
локација класа конзола И тако Ова синтакса није нова.
То само значи да ми осми студент у класи.
Али, ово је нови симбол.
До сада, ми смо не може да се користи тачка, барем код овако.
То значи идите на струцт познат као студент и стави нешто тамо.
Слично томе, у овом новом реду, 31, идите напред и стави све што корисник упише
за име овде и шта раде за кућа, иста ствар, само напред и
стави га у кући..
>> Дакле, шта је овај програм на крају урадио?
Можете видети мало задиркивање тамо.
Дозволите ми да иде напред и да направи Структуре 0 тачка сласх струцт 0, студентска ИД 1,
каже Давид Матхер, студент ИД 2.
Роб Киркланд, ученик 3. ИД.
Лаурен Леверит -
и једина ствар коју је овај програм учинио, што је само потпуно произвољна,
Желео сам да урадим нешто са овим подацима, сада када сам научио нас је како да
Структуре користе, је сам имао ово екстра петља овде.
Ја прелазили преко низа ученика.
Некада сам, можда је сада наш присни пријатељ, стринг упореди, на стирцомп
провера је 8. студента кућа једнак Матхер?
И ако је тако, само одштампате нешто произвољно се свиђа, да, то је.
Али, опет, само ми је дао прилике да користе и поново користити и
поново ову нову нотацију дот.
>> Па кога је брига, зар не?
Долази са студентског програма је прилично произвољан, али се испоставило
да можемо да урадимо корисне ствари са то, на пример, као што следи.
То је много компликованије Структ у Ц. Има десетак или више поља,
помало загонетно имену.
Али ако сте икада чули за графику формат се зове бит мапа, БМП, она
Испоставило се да је битмапа формат датотеке прилично изгледа да је то.
То је глупо мало насмејано лице.
То је мала слика која сам зумирао на прилично велики, тако да сам могао да видим сваки
од појединачних тачака или пиксела.
Сада испада да можемо да представљају Црна тачка са, рецимо, број 0.
И бела тачка са бројем 1.
>> Другим речима, ако желите да нацртате Насмејано лице и сачувајте ту слику у
рачунар, довољно је за складиштење и нуле оне које изгледају као ова, где,
опет, оне су беле и нула су црни.
А заједно, ако имате ефикасно грдња од јединица и нула, имате
мрежу пиксела, а ако се постави их, морате сладак
мало насмејано лице.
Сада, битмап формату, БМП, је ефикасно да се испод хаубе,
али са више пиксела Сот да може заправо представљају боје.
>> Али, када имате више софистициран формати као што су БМП и ЈПЕГ и ГИФ
са којима можете бити упознати, они датотеке на диску обично не само
имају нула и јединица за пиксела, али они имају неке метаподатака као и -
мета у смислу да није стварно Подаци али је корисно имати.
Дакле, ова поља се овде подразумева, и ћемо видети детаљније у П-СЕТ
5, да пре него што су нуле и јединице које представљају пиксела у слици,
постоји гомила метаподатака као величина слике и
ширину слике.
И приметио сам неке черупање искључен произвољне ствари овде -
ширина и висина.
Бит рачунају и неке друге ствари.
Дакле, постоји нека мета у датотеци.
>> Али разумевање како фајлови су постављени на овај начин, можете заправо
онда манипулишу слике, слике опоравак од диска, промените величину слике.
Али не можете баш побољшати их.
Требао ми је фотографију.
Тако да сам се вратио у РЈ овде, који сте видели на екрану пре доста времена.
И ако ја отворим Уводно овде, ово је шта се дешава ако покушате да зумирате и
побољшати РЈ.
Он не добија ништа боље стварно.
Уводно Сада је то врста замагљују мало, само да занемаре
Чињеница да је РЈ не добије посебно побољшана када се зумирати
И ако то овако, види квадрата?
Да, дефинитивно може видети квадрата на пројектору.
>> То је оно што добијете када побољшати.
Али у разумевању како наш РЈ или Насмејано лице спроводи ће нам дозволити
стварно писање кода који манипулише ове ствари.
А ја мислио да ћу завршити на ове белешке, с 55 секунди побољшати то је,
Усуђујем се, кажем прилично заблуду.
>> [ВИДЕО РЕПРОДУКЦИЈА]
>> -Он лаже.
Због чега, не знам.
>> -Па, шта знамо?
>> -Да у 9:15 Раи Сантоиа био на банкомату.
>> -Дакле, питање је шта је радио у 9:16?
>> -Снимање девет милиметара у нечему.
Можда је видео снајперисту.
>> -Или је радио са њим.
>> -Чекај.
Назад један.
>> -Шта видиш?
>> -Донесите му лице горе, преко целог екрана.
>> -Његове наочаре.
>> -Ту је одраз.
>> -То је Неувитас бејзбол тим.
То је њихов лого.
>> -И причао је да ко год да је носио ту јакну.
>> [ЕНД ВИДЕО РЕПРОДУКЦИЈА]
>> Давид Ј. Малан: Ово ће Проблем је сет 5.
Ми ћемо те видети следеће недеље.
>> МУШКИ СПИКЕР: На следећем ЦС50.
>> [ЦРИЦКЕТС цхирпинг]
>> [Музика свира]