[CHWARAE CERDDORIAETH] DAVID J. Malan: Pob hawl. [Chwerthin] Croeso yn ôl. Mae hyn yn CS50. Ac mae hyn yn y diwedd yr wythnos bump. A hyd yn hyn, rydym wedi 'n bert lawer bod yn cymryd yn ganiataol bod bodoli compiler hwn, clang, eich bod i wedi bod yn galw ar ffurf y offeryn eraill o'r enw Gwneud hynny rywsut hud a lledrith yn trosi eich cod ffynhonnell i mewn cod gwrthrych, y zeros a rhai bod eich cyfrifiaduron CPU, canolog uned brosesu, mewn gwirionedd yn deall. Ond mae'n troi allan mae nifer sy'n mynd ymlaen o dan y cwfl yn rhwng mewnbwn ac allbwn. A hoffwn i gynnig ein bod cnawd ar hynny mewn ychydig mwy o fanylder i y pedwar cam, yn cael rhywbeth o'r enw cyn-prosesu, rhywbeth enw lunio, yr ydym wedi gweld, rywbeth a elwir yn cydosod, a rywbeth a elwir cysylltu. Felly, hyd yn hyn, yn rhai o'n rhaglenni, rydym wedi cael miniog cynnwys. Yn fwy diweddar, rydym wedi cael rhai miniog diffinio ar gyfer cysonion. Felly, mae'n troi allan bod y pethau hynny sy'n yn cael eu rhagddodi gyda'r symbol stwnsh neu y symbol punt yn cyn-brosesydd cyfarwyddebau. Dyna dim ond ffordd ffansi o ddweud ei fod yn llinell o god sydd mewn gwirionedd troi'n rhywbeth arall cyn y cyfrifiadur hyd yn oed yn ceisio newid eich rhaglen i sero a rhai. Er enghraifft, miniog cynnwys safon I / O. H, 'n bert lawer yn unig yn golygu mynd yn ei flaen, chrafangia 'r cynnwys y ffeiliau stdio.h a gludo yn iawn yno. Felly dim zeros a rhai ar y pwynt hwnnw eto. Mae'n wir dim ond amnewid. Ac mae hynny'n cael ei wneud yn ystod yr hyn a elwir yn cyfnod cyn-brosesu, pan fyddwch yn mewn gwirionedd yn rhedeg clang neu'n benodol Gwneud yn y rhan fwyaf o achosion. Felly, mae hyn i gyd wedi bod yn digwydd gyntaf yn awtomatig hyd yn hyn. Yna daw'r cam casglu. Ond rydym wedi bod yn gorsymleiddio casgliad. Llunio rhaglen yn ei olygu i gymryd o rhywbeth fel C, y cod ffynhonnell rydym wedi bod yn ysgrifennu, i lawr i rywbeth o'r enw cynulliad. Iaith y Cynulliad yn lefel is iaith, diolch byth, ni fyddwn yn wedi un achlysur llawer i ysgrifennu semester hwn. Ond ar y lefel isaf yn y ymdeimlad eich bod yn llythrennol dechrau ysgrifennu adio a thynnu ac yn lluosi a llwytho ar y cof ac yn arbed i gof, y cyfarwyddiadau sylfaenol iawn y cyfrifiadur, o dan y cwfl, mewn gwirionedd yn deall. Yn olaf, cydosod yn cymryd yr iaith honno at y zeros a rhai ein bod wedi disgrifio hyd yn hyn. Ac yn wir yn olaf, mae hyn a elwir yn cysylltu gam, a gallwn eich gweld mewn dim ond hyn o bryd, sy'n cyfuno eich sero a rhai sydd â seroau a rhai pobl eraill cyn yr ydych wedi creu. Felly, yn ystyried y rhaglen syml super. Yr oedd yn deillio o Wythnos 1. Mae'n newydd ei ddweud, Helo Byd, ar y sgrin. Rydym yn rhedeg hyn drwy clang. Neu yr ydym yn ei rhedeg trwy Gwneud a oedd yn rhedeg clang. Ac outputted ar y pryd lle rhai seroau a rhai. Ond mae'n troi allan mae yn gam canolradd. Os byddaf yn mynd dros yma - wps, nid oedd eisiau ei weld eto. Os byddaf yn mynd dros yma i fy offer ac yr wyf yn agor hello.c, dyma yw bod un rhaglen. A hyn yr wyf i'n mynd i wneud yn fy terfynell ffenestr yma Rydw i'n mynd i rhedeg clang yn hytrach na gwneud, a awtomeiddio pob un o'r pedwar camau hynny i ni. Ac yr wyf i'n mynd i wneud clang-S a Yna hello.c ac yna mynd i mewn. Ac yr wyf yn cael prydlon amrantu unwaith eto, sydd yn dda. Ac yn awr yn ychydig yn fwy ffenestr, Rydw i'n mynd i agor gedit yma. Ac yr wyf i'n mynd i agor ffeil hynny, troi allan, gelwir hello.s hwn yn cynnwys yr iaith cynulliad Cyfeiriais ato yn gynharach. Ac mae hyn yn yr hyn a elwir cynulliad iaith, lefel gymharol isel cyfarwyddiadau bod eich CPU Intel neu beth bynnag yw ei bod y tu mewn yn deall. Ac mov ar gyfer symud. alwad ar gyfer galw, rhaid i swyddogaeth lefel isel iawn. is ar gyfer tynnu. Felly, pan fydd gennych CPU penodol y tu mewn ar eich cyfrifiadur, yr hyn yn ei gwneud yn gwahanol, yn erbyn eraill CPUs ar y farchnad, yn cael ei pa gyfarwyddiadau y mae'n deall ac yn aml pa mor effeithlon y mae'n yw, pa mor gyflym yw hi yn cyflawni rhai cyfarwyddiadau hynny. Yn awr ar gyfer rhagor o wybodaeth am hyn, gallwch gymryd CS61 Fall nesaf yn y coleg. Ond dyma yr ydym, er enghraifft, mae rhai adnabod a allai edrych yn gyfarwydd. hello.c yw enw'r rhaglen. . Destun - Nid oes llawer o ddiddordeb yno yn unig yn awr, dwyn i gof bod y testun segment, o ddydd Llun, yw lle yn cof eich rhaglen mewn gwirionedd yn dod i ben i fyny. Felly dyna o leiaf yn fras cyfarwydd yno. Yma, wrth gwrs, yn sôn o'n prif swyddogaeth. Sgrolio i lawr, mae'r rhain yn cyfeirio at bethau cofrestrau gelwir, darnau bach iawn o y tu mewn cof am eich CPU gwirioneddol. Ac os wyf yn sgroliwch i lawr hyd yn oed yn pellach, yr wyf yn gweld rhyw fath sôn anuniongyrchol ASCII. Ac yno, yn wir, yw y llinyn, helo, coma, byd. Felly, stori hir yn fyr, mae hyn wedi bod yn digwydd i chi, yn awtomatig, o dan y cwfl i gyd o'r amser hwn. A beth sydd wedi bod yn digwydd mewn gwirionedd unwaith rydych wedi rhedeg clang, neu ar ffurf Gwnewch, eich bod yn cael yn gyntaf, o'r cod ffynhonnell, y hyn a elwir yn iaith cynulliad. Yna clang yn trosi gwasanaeth yma iaith i lawr i sero a rhai. Ac mae hyn yn y sleid a ddechreuwyd gennym ein trafodaeth yn Wythnos 0 ar - ac yna Wythnos 1 ar. Ac yna yn olaf, a'r rhai sero hynny yn cael eu cyfuno â seroau a rhai o lyfrgelloedd hynny rydym wedi bod yn cymryd yn ganiataol fel Safon I / O neu Llyfrgell llinyn neu hyd yn oed y llyfrgell CS50. Felly, i baentio darlun hwn yn fwy golwg, rydym wedi hello.c. Ac, wrth gwrs, yn defnyddio'r printf gweithredu i ddweud, helo byd. Y cam casglu yn mynd ag ef i lawr i y ffeil yn jyst yn gweld hello.s, hyd yn oed er sy'n cael ei arfer yn dileu yn awtomatig ar eich cyfer. Ond dyna y cod cynulliad yn y cam canol. Ac yna pan fyddwn yn cydosod y cynulliad iaith, fel petai, dyna pan fyddwch yn cael sero a'r rhai hynny. Felly, rydym wedi chwyddo i mewn yn effeithiol heddiw ar yr hyn yr ydym wedi bod yn cymryd yn ganiataol, yn golygu mynd cod ffynhonnell i wrthwynebu cod. Ond yn olaf, yr un darlun yn awr - gadewch i ni gwthio 'i ar at yr ochr chwith. Ac yn nodi bod yn y top mae Soniais stdio.h. Dyna ffeil ein bod wedi cynnwys ym mron pob un o'r raglenni rydym wedi ysgrifennu. A dyna y ffeil y mae ei gynnwys cael copi gludo, effeithiol ar ben eich cod. Ond mae'n troi allan bod, ar gyfrifiadur system yn rhywle, mae pob tebyg yn ffeil stdio.c bod rhywun ysgrifennodd mlynedd yn ôl a gweithredu pob un o'r swyddogaethau a oedd yn datgan yn stdio.h. Nawr, mewn gwirionedd mae'n debyg ddim ar eich Mac neu eich PC neu hyd yn oed yn y CS50 offer yn god C amrwd. Rhywun sydd eisoes yn llunio ac yn cynnwys . O ffeil ar gyfer cod gwrthrych neu a. ffeiliau, sy'n cyfeirio at lyfrgell a rennir sydd wedi cael ei osod ymlaen llaw a cyn-llunio i chi. Ond mae'n debyg nad oes yn wir yn bodoli ar ein stdio.c cyfrifiadur ochr yn ochr gyda clang. Eich cod sy'n cael ei llunio ac yn ymgynnull. Cod stdio.c 's yn cael ei lunio a'i ymgynnull, fel bod hyn yn olaf cam, i lawr yma, mae'n rhaid i ni rywsut cyswllt, fel petai, eich zeros a rhai gyda'i sero a rhai i mewn i un rhaglen syml yn y pen draw yn a elwir yn unig Helo. Felly dyna i gyd o'r hud sy'n wedi bod yn digwydd hyd yn hyn. A bydd yn parhau i gymryd y prosesau ar gyfer ganiataol, ond yn sylweddoli mae yna lawer o fanylion llawn sudd mynd ymlaen o dan yno. Ac mae hyn yn beth sy'n gwneud eich cyfrifiadur gyda Intel tu mewn yn arbennig o amlwg. Felly, ar y nodyn hwnnw, os hoffech chi ymuno â ni am ginio ddydd Gwener, yn mynd i'r cs50.net/rsvp gweithle arferol, 13:15 ddydd Gwener. Ac yn awr ychydig o gyhoeddiadau. Felly mae gennym ychydig o newyddion da. Ac mae gennym rywfaint o newyddion drwg. Dechreuwch gyda rhywfaint o newyddion da yma. [Ochneidio] Mae pob hawl. Wel, mae'n dechnegol gwyliau, felly nid yw'n gymaint rhodd oddi wrthym ni. Ond yna y newyddion drwg wrth gwrs. [Ochneidio] Yr wyf yn treulio llawer o amser ar animeiddiadau hyn. [Chwerthin] Bydd sesiwn adolygu hyn yn dod dydd Llun. Mae'n mynd i fod ar 05:30 PM. Byddwn yn eich atgoffa o'r holl fanylion hyn drwy e-bost ar y cwrs gwefan mewn dim ond cwpl o diwrnod. Bydd yn cael ei ffilmio ac ar gael yn fuan wedi hynny. Felly, os nad ydych yn gallu gwneud y Dydd Llun slot nos, peidiwch â phoeni. Adrannau Bydd yr wythnos hon yn dod hefyd canolbwyntio ar adolygu ar gyfer y cwis. Os yw eich adran ar ddydd Llun, sef yn wir prifysgol gwyliau, byddwn yn dal i gyfarfod yn yr adran. Os ydych yn syml na all wneud y adran hon oherwydd eich bod yn mynd i ffwrdd, mae hynny'n iawn. Mynychu ddydd Sul neu adran dydd Mawrth neu alaw i mewn i adran Jason, sy'n gael ar-lein. Felly, mwy o newyddion drwg. Felly, yn ôl y maes llafur, rydym wedi darlith ddydd Gwener nesaf. Ond y newyddion da - yn glir, yr wyf yn treulio gormod o amser ar hyn. [Chwerthin] Byddwn yn canslo darlithoedd ddydd Gwener nesaf. Felly, a fydd yn anrheg i ni, er mwyn i chi Gall mewn gwirionedd yn cael seibiant braf yn rhwng yr wythnos a phythefnos felly. Felly nid oes unrhyw ddarlithoedd yr wythnos nesaf, dim ond bach ychydig cwis, er y dylech fod yn cael gyffrous gynyddol. Felly, gadewch i ni yn awr yn troi ein sylw at rhywbeth sydd yn wir yn fwy gweledol ac yn fwy cyffrous ac i osod y llwyfan ar gyfer yr hyn sy'n mynd i fod ar y gorwel mewn dim ond cwpl o wythnosau amser. Ar ôl y cwis cyntaf, byddwn yn troi'r canolbwyntio ar ein setiau problem i un arall problem benodol parth, sef fforensig neu ddiogelwch yn fwy cyffredinol. Yn wir, y traddodiad â'r broblem hon set i mi un o'r cymrawd neu CAs addysgu i gerdded ar draws campws cymryd rhai lluniau o pobl amlwg adnabyddadwy ond non, lleoedd neu bethau, yna bob blwyddyn byddaf yn rhywsut yn llwyddo i ddileu ddamweiniol neu llygredig y cerdyn cyfryngau digidol dyna tu mewn ein camera. Ond nid oes llawer mawr. Gallaf fynd yn ei flaen ac yn plwg hynny yn fy chyfrifiadur. Gallaf wneud delwedd fforensig ohono, felly i siarad, drwy gopïo y zeros a rhai oddi ar y cerdyn cof, boed ei cerdyn SD neu gerdyn fflach compact neu beth bynnag yr ydych yn gyfarwydd ag ef. Ac yna gallwn roi hynny. Ac felly yr her sydd o'n blaenau, ymhlith eraill pethau i chi, bydd yn ysgrifennu Cod C sy'n adennill criw cyfan o Bydd JPEG i mi a dangos fod bobl hynny, lleoedd neu bethau. A byddwn hefyd yn siarad, yn y broblem gosod ac yn y dyddiau i ddod, am graffeg yn fwy cyffredinol. Rydym wedi defnyddio nhw, cwrs, am dorri allan. Ond eich bod wedi fath o gymryd yn ganiataol mae hyn yn bodoli syniadau lefel uchel petryalau a siapiau hirgrwn. Ond o dan y cwfl mae yna picsel. A bu'n rhaid i chi ddechrau meddwl am hynny. Neu a fydd ar gyfer p-set 4 yn rhaid i chi feddwl am y bwlch rhwng eich brics, sut gyflym rydych yn bêl yn cael ei symud ar draws y sgrîn ar gyfer torri allan. Felly mae syniad hwn o'r dotiau ar eich sgrîn sy'n yn dod i rym yn barod. Nawr yr hyn yr ydych yn gweld, fodd bynnag, yw beth eich bod yn cael ar sgrin cyfrifiadur. Os ydych chi erioed wedi gwylio rhai da neu teledu ddrwg, groes yn eu 'n bert lawer trin y gynulleidfa debyg technophobes nad ydynt mewn gwirionedd gwybod llawer am cyfrifiadurol. Ac felly mae'n hawdd iawn ar gyfer yr heddlu ditectif i'w ddweud, gallwch glanhau hynny i mi? Neu wella, dde? Gwella yn debyg i'r gair gwefr yn unrhyw sioe ymwneud â throseddau fwyaf. A'r realiti yw os byddwch yn cymryd iawn darlun aneglur o dan amheuaeth yn ei wneud rhywbeth drwg, ni allwch yn unig wella. Ni allwch chwyddo i mewn anfeidrol. Ni allwch weld yn y glint o rhywun llygaid a gyflawnodd y trosedd penodol, er gwaethaf y nifer yr achosion o hyn ar y teledu. Felly, gyda hynny gadewch i ni cymell y problem sydd ar y gweill gosod gyda cipolwg ar rhai sioeau yr ydych gallai fod yn gyfarwydd. [VIDEO Playback] -OK. Yn awr, gadewch i ni gael edrych yn dda ar chi. -Cynnal ei. Rhedeg y cefn. -Arhoswch funud. Mynd yn iawn. -Mae. Rhewi hynny. Sgrîn-lawn. -OK. Rhewi hynny. -Tynhau i fyny ar hynny, bydd ya? -Fector i mewn ar y boi gan yr olwyn gefn. -Zoom i mewn i'r dde yma ar y fan a'r lle hwn. -Gyda'r offer cywir, y ddelwedd y gellir ei ehangu a'i hogi. -Beth sy'n bod? -Mae'n rhaglen wella. -A allwch egluro hynny o gwbl? -I ddim yn gwybod. Gadewch i wella. -Gwella adran A-6. -I wella y manylion a - -Rwy'n credu bod yna ddigon i wella. Rhyddhau i fy sgrin. -Gwella myfyrio yn ei llygad. -Gadewch i ni redeg hyn drwy gwella fideo. -Edgar, gallwch gwella hyn? -Arhoswch. -I've bod yn gweithio ar fyfyrio hwn. -Rhywun myfyrio ar. -Myfyrio. -Mae adlewyrchiad wyneb y dyn. -The myfyrio. -Mae adlewyrchiad. -Zoom i mewn ar y drych. -Gallwch weld adlewyrchiad. -Allwch chi wella delwedd o fan hyn? -Allwch chi wella ef yma? -Allwch chi ei wella? -Allwch chi ei wella? -A allwn ni wella hyn? -Allwch chi ei wella? -Cynnal ar ail, byddaf yn gwella. -Zoom i mewn ar y drws. -X10. -Zoom. [Chwerthin] -Symud i mewn -Aros, stopio. -Stop. -Saib hynny. -Cylchdroi 75 gradd o amgylch fertigol os gwelwch yn dda. [Chwerthin] -Aros, ac yn ôl i'r rhan am y drws eto. -Oes gennych enhancer image y gall didfap? -Efallai y gallwn ddefnyddio'r Pradeep Sen ddull i weld i mewn i'r ffenestri. -Mae'r meddalwedd yn gyflwr y celf. -Mae gwerth icon i ffwrdd. -Gyda'r cyfuniad cywir o algorithmau. -Mae'n cymryd algorithmau goleuo i gall y lefel nesaf ac yr wyf yn eu defnyddio i gwella y llun. -Lock ymlaen ac ehangu'r z-echel. -Gwella. -Gwella. -Gwella. -Rhewi a gwella. [VIDEO END Playback] DAVID J. Malan: Set Problem Felly 5 yw'r hyn sydd i ddod yno. Felly, byddwn yn fuan yn cael gwell dealltwriaeth o pryd a pham y gallwch ac ni all ein wella yn y ffordd honno. Ond yn gyntaf, gadewch i ni ddychwelyd i'n sylw i rai o'r blociau adeiladu gallwn eich angen i ni allu dweud y stori honno. Felly cofio i ni dynnu llun hwn ar Llun a ychydig bach yr wythnos diwethaf. Ac mae hyn yn disgrifio cynllun o bethau er cof am eich cyfrifiadur pan rhedeg rhai rhaglen. Mae'r segment dechnoleg i fyny top, galw i gof, yn cyfeirio at y zeros a rhai gwirioneddol sy'n cyfansoddi eich rhaglen. Mae, is na hynny, mae rhai ymgychwyn neu data uninitialized, sydd fel arfer yn yn cyfeirio at bethau fel cysonion neu llinynnau neu newidynnau byd-eang sy'n cael ei ddatgan o flaen llaw. Mae y domen, ond byddwn yn dod yn ôl at hynny mewn ychydig. Ac yna mae y pentwr. Mae llawer yn hoffi pentwr o hambyrddau yn y caffeteria, dyma lle cof yn cael haenau a haenau pryd bynnag y i wneud yr hyn mewn rhaglen? Beth yw'r defnydd pentwr amdano? Yeah? Ffoniwch swyddogaeth. Unrhyw tro y byddwch yn galw swyddogaeth, mae'n a roddir i sliver o gof ar gyfer ei newidynnau lleol neu ei baramedrau. Ac yn ddarluniadol, gwelwn fod gyda phob swyddogaeth olynol alw, pan A galwadau B galwadau C galwadau D, maent yn cael haenau ar y pentwr. Ac o fewn pob un o'r dafell hynny o cof yn ei hanfod gwmpas unigryw ar gyfer y swyddogaeth honno, sydd, wrth gwrs, yn broblem os ydych am i law o un swyddogaeth i'r llall Darn o ddata yr ydych ei eisiau i droi neu newid. Felly, beth oedd ein ateb i alluogi Mae swyddogaeth a gynrychiolir gan un pentwr fframio i newid y cof y tu mewn o ffrâm pentwr arall? Sut y ddau siarad i un arall? Felly, trwy gyfrwng arwyddion neu gyfeiriadau, sydd, unwaith eto, dim ond disgrifio ble yn cof, ar ffurf benodol Rhif brathu, y penodol Gellir werth i'w gweld. Felly, yn dwyn i gof y tro diwethaf hefyd rydym wedi parhau y stori ac edrych ar rhaglen bygi yn deg. Ac mae hyn yn rhaglen yn buggy am ychydig resymau, ond yr un mwyaf worrisome yn oherwydd ei fod yn methu i wirio beth? Yeah, nid yw'n edrych ar y mewnbwn. Mae'n ddrwg gennym? Os yw'n fwy na 12 nod. Felly drwsiadus iawn, pan fyddwch yn ffonio memcopy, sydd, fel yr awgryma'r enw, dim ond copïau cof o'i ail ddadl yn ei ddadl gyntaf. Mae'r drydedd ddadl, drwsiadus iawn, yn gwirio i wneud yn siŵr nad ydych yn copïo yn fwy na, yn yr achos hwn, hyd o bar, nifer o gymeriadau, i mewn i'r gyrchfan, sydd yn hyn amrywiaeth C. Ond y broblem yw bod yr hyn os nad yw C ei hun yn ddigon mawr i ymdrin â hynny? Rydych yn mynd i gopïo nifer y bytes eich bod wedi ei roi. Ond beth ydych chi'n mewn gwirionedd yn cael mwy bytes nag sydd gennych le i? Wel, mae hyn yn rhaglen hynod ffôl yn unig blindly mynd yn ei flaen i gymryd beth bynnag y mae'n roddir, helo slaes 0 yn gwych os llinyn yn brin ddigon, fel pum chars. Ond os yw'n mewn gwirionedd yn 12 nod neu 1,200 o gymeriadau, gwelsom y tro diwethaf eich bod yn jyst yn mynd i yn gyfan gwbl trosysgrifo cof sy'n nad yw'n perthyn i chi. Ac achos gwaethaf, os ydych yn trosysgrifo bod cyfran coch yno y byddem ni'n ei alw y dychwelyd cyfeiriad - mae hyn yn unig lle mae'r cyfrifiadur yn awtomatig, i chi, y tu ôl i'r golygfeydd, tucks i ffwrdd gwerth 32-bit sy'n atgoffa i ba gyfeiriad y dylai dychwelyd pan foo, mae hyn yn swyddogaeth arall, yn cael ei wneud cyflawni. Mae'n bara a briwsion o ryw fath y mae'n dychwelyd. Os ydych yn ysgrifennu dros hynny, o bosibl, os ydych yn y dyn drwg, gall y gallai o bosibl yn cymryd drosodd cyfrifiadur rhywun. A byddwch yn sicr damwain yn y rhan fwyaf o achosion. Nawr y broblem hon yn unig yn gwaethygu wrth i ni ddechrau siarad am cof rheoli mwy cyffredinol. Ac malloc, ar gyfer dyrannu cof, yn swyddogaeth y gallwn ei defnyddio i ddyrannu cof pan nad ydym yn gwybod o flaen llaw y gallai fod angen rhai ni. Felly, er enghraifft, os byddaf yn mynd yn ôl at y peiriant yma. Ac yr wyf yn agor i fyny o hello2.c tro diwethaf, dwyn i gof y rhaglen yma, a oedd yn edrych rhywbeth bach fel hyn, dim ond tair llinell - nodi eich enw, yna enw llinyn, ar y chwith, yn hafal i getstring. Ac yna rydym yn ei hargraffu, enw'r defnyddiwr. Felly roedd hwn yn rhaglen syml super. I fod yn glir, gadewch i mi fynd yn ei flaen ac yn gwneud helo-2. Rydw i'n mynd i wneud dot slaes helo-2. Nodwch eich enw chi - Dafydd. Enter. Helo David. Mae'n ymddangos i weithio'n iawn. Ond beth sy'n digwydd mewn gwirionedd dan cwfl yma? Yn gyntaf gadewch i croen yn ôl rhai haenau. Llinyn yn unig yw gyfystyr rydym wedi gwireddu ar gyfer yr hyn? Seren torgoch. Felly, gadewch i ni ei wneud yn ychydig yn fwy dirgel ond yn fwy cywir yn dechnegol bod hyn yn yn seren golosg, sy'n golygu bod enw, ie, yn newidyn. Ond beth siopau enw yw cyfeiriad y golosg, sy'n teimlo ychydig yn rhyfedd gan fy mod yn cael llinyn ôl. Im 'yn cael yn ôl lluosog chars nid torgoch. Ond wrth gwrs, dim ond angen y cyntaf gyfeiriad torgoch i gofio lle mae'r llinyn cyfan oherwydd pham? Sut yr ydych yn chyfrif i maes ble y diwedd y llinyn yw gwybod y dechrau? Y sero slaes. Felly, gyda y ddau cliwiau i chi chyfrif i maes cyn dechrau a diwedd unrhyw llinyn yw, ar yr amod eu bod yn ffurfio'n gywir â'r null terminator, y sero slaes. Ond mae hyn yn galw getstring. Ac mae'n ymddangos bod getstring yr holl amser hwn wedi bod yn fath o twyllo i ni. Mae wedi bod yn gwneud llafur hwn, i fod yn sicr, cael llinyn gan y defnyddiwr. Ond ble bod y cof bod yn dod o? Os ydym yn mynd yn ôl at y darlun yma ac cymhwyso'r diffiniad o ddim ond funud yn ôl, bod y pentwr yw lle cof yn mynd pan fydd swyddogaethau yn cael eu galw, gan y rhesymeg, pan fyddwch yn ffonio getstring, ac yna mi deipio i mewn D-A-V-I-D Nodwch, lle mae D-A-V-I-D slaes sero storio, yn seiliedig ar y stori rydym wedi dweud wrthym yn hyn? Mae'n ymddangos i fod mewn y simnai, dde? Pan fyddwch yn ffonio cael llinyn byddwch yn cael ychydig tafell o gof ar y pentwr. Felly, mae'n sefyll i resymu bod D-A-V-I-D slaes sero yn cael ei storio yno yn y pentwr. Ond arhoswch funud, getstring ffurflenni y llinyn, fel petai, sy'n golygu mae'n hambwrdd o'r caffeteria yn cael ei dynnu oddi ar y pentwr. Ac rydym yn dweud dro ar ôl diwethaf y cyn gynted ag y ffurflenni swyddogaeth, a ydych yn cymryd y hambwrdd, fel petai, oddi ar y simnai, pa gallwch gymryd yn ganiataol am weddillion bod y cof? Wyf yn fath ohonynt redrew fel marciau cwestiwn oherwydd eu bod yn dod yn effeithiol gwerthoedd anhysbys. Gellir eu hailddefnyddio pan fydd rhai Gelwir swyddogaeth nesaf. Mewn geiriau eraill, os ydym yn digwydd cael ei storio - 'N annhymerus' dynnu llun cyflym yma y pentwr. Os digwydd bod yn tynnu gwaelod o fy segment cof, a byddwn yn dweud bod hyn yn y lle y cof meddiannu gan brif ac efallai ARG c a ARG v ac unrhyw beth arall yn y rhaglen, pan getstring ei alw, yn ôl pob tebyg yn cael getstring darn o gof yma. Ac yna D-A-V-I-D rywsut yn dod i ben i fyny yn y swyddogaeth hon. Ac yr wyf i'n mynd i gorsymleiddio'r. Ond gadewch i ni dybio bod ei D-A-V-I-D slaes sero. Felly mae hyn yn llawer o bytes cael eu defnyddio yn y ffrâm am getstring. Ond cyn gynted ag ffurflenni getstring, rydym yn dywedais y tro diwethaf fod y cof dros yma i gyd yn dod - Woops! - i gyd yn dod yn dileu yn effeithiol. A gallwn feddwl am hyn nawr fel cwestiwn marciau oherwydd pwy a ŵyr beth sy'n mynd i ddod yn y cof. Yn wir, yr wyf yn aml iawn yn galw swyddogaethau heblaw getstring. A chyn gynted ag yr wyf yn galw rhai eraill swyddogaeth na getstring, efallai nad ydynt mewn y rhaglen benodol hon rydym yn unig yn edrych mewn ond mae rhai eraill, yn sicr mae rhai eraill Gallai swyddogaeth y pen draw yn cael ei roi y fan a'r lle nesaf yn y pentwr. Felly, ni all fod yn y siopau getstring D-A-V-I-D ar y pentwr oherwydd fy mod y byddai yn syth yn colli mynediad iddo. Ond rydym yn gwybod eu bod yn getstring dim ond dychwelyd beth? Dyw hi ddim yn dychwelyd i mi chwe gymeriadau. Beth y mae'n wirioneddol dychwelyd oedd deuwn i'r casgliad tro diwethaf? Cyfeiriad y cyntaf. Felly, rywsut, pan fyddwch yn galw getstring, mae'n dyrannu cyfran o cof ar gyfer y llinyn bod y math defnyddwyr a gyfeiriad, yna dychwelyd ohono. Ac mae'n ymddangos bod pan fyddwch am i gweithredu i ddyrannu cof yn y ffordd a dychwelyd i'r person a elwir yn swyddogaeth honno, y cyfeiriad y bod darn o gof, chi'n hollol Ni ellir ei roi yn y pentwr yn y gwaelod, oherwydd swyddogaethol dim ond mynd i beidio â dod yn eich un chi iawn yn gyflym, felly mae'n debyg y gallwch ddyfalu ble fwy na thebyg rydym yn mynd i daflu yn lle hynny, y domen fel y'u gelwir. Felly, rhwng gwaelod eich cof yn gosodiad a rhan uchaf eich cof yn cynllun yn criw cyfan o segmentau. Mae un yn y pentwr, ac i'r dde uchod, mae'n y domen. Ac domen yn unig yw darn gwahanol o cof nad yw ei defnyddio ar gyfer swyddogaethau pan fyddant yn galw. Mae'n cael ei ddefnyddio ar gyfer cof tymor hir, pan fydd chi am gael un swyddogaeth i afael rhai cof a gallu i ddal gafael ar ei heb golli rheolaeth drosto. Nawr gallech efallai unwaith weld nad yw hyn yn reidrwydd dyluniad perffaith. Wrth i'ch rhaglen dyrannu cof ar y simnai, neu wrth i chi alw mwy a mwy o swyddogaethau, neu wrth i chi ddyrannu cof ar y domen gyda malloc ffwrdd fel getstring yn ei wneud, beth yn glir ymddangos i fod yn broblem anochel? Iawn. Fel y ffaith bod saethau hyn yn pwyntio ar ei gilydd nid yw'n argoeli'n dda. Ac yn wir, gallem damwain gyflym iawn rhaglen mewn nifer o ffyrdd. Yn wir, yr wyf yn meddwl y gallai fod yn rhaid gwneud hyn yn ddamweiniol unwaith. Neu os nad ydych, gadewch i ni wneud hynny yn fwriadol yn awr. Gadewch i mi fynd yn ei flaen ac ysgrifennu super gyflym rhaglen o'r enw dontdothis.c. Ac yn awr byddaf yn mynd i mewn yma ac yn sydyn yn cynnwys stdio.h. Gadewch i ni ddatgan swyddogaeth foo yn cymryd unrhyw ddadleuon, sydd yn ddynodwyd yn dda gan ddi-rym. A'r unig beth foo yn mynd i wneud yw galwad foo, sydd nid yn ôl pob tebyg yn syniad smartest, ond dyna ni. Ent prif ddi-rym. Nawr yr unig beth prif yn mynd ei wneud yw ffonio foo hefyd. A dim ond ar gyfer cychwyn, yr wyf i'n mynd i fynd i ddod yma a dweud printf "Helo o foo. " OK. Felly, os nad oeddwn yn gwneud unrhyw gamgymeriadau, Gwnewch dontdothis dot slaes. A gadewch i ni wneud hynny mewn mwy o ffenestr - dot slaes, dontdothis. Dewch ar. Uh oh. Mae'n debyg, gallwch wneud hyn. Damia. OK. Aros. Sefyll yn ôl. A wnaethom ni - Ni ddim yn ei ddefnyddio gyda Gwneud. [Gynt] Rwy'n gwybod, ond rwy'n credu ein bod dim ond dileu hynny. Uh, ie. Damia. Ddatrys y Rob. Beth? Mae'n syml iawn. Yeah, rydym yn troi optimization i ffwrdd. OK, yn sefyll bye. Nawr rwy'n teimlo'n well. OK. Mae pob hawl. Felly, gadewch i ni ail-grynhoi hyn - Gwnewch eich dontdothis. Efallai y bydd rhaid i chi ail-enwi hwn i dothis.c mewn dim ond munud. Dyna ni. Diolch yn fawr. OK. Felly, mae'r ffaith fy mod yn argraffu rhywbeth oedd mewn gwirionedd yn unig arafu i lawr y broses a ddefnyddiwn i fyddai wedi cyrraedd y pwynt hwnnw. OK. PHEW! Felly, beth sy'n digwydd mewn gwirionedd? Y rheswm yno, dim ond wrth fynd heibio, yn gwneud unrhyw beth o ran mewnbwn a allbwn yn tueddu i fod yn arafach oherwydd eich rhaid i ysgrifennu cymeriadau at y sgrin, Mae wedi i sgrolio. Felly, stori hir yn fyr, roedd rhaid i mi mewn gwirionedd digwydd mor ddiamynedd, y byddai gennym gweld canlyniad hwn hefyd. Nawr fy mod wedi cael taith y print-ups, ydym yn ei weld ar unwaith. Felly pam mae hyn yn digwydd. Wel, yr esboniad syml, wrth gwrs, yw bod foo yn ôl pob tebyg ddylai yn galw ei hun. Nawr yn gyffredinol, mae hyn yn recursion. Ac rydym yn meddwl cwpl o wythnosau yn ôl recursive yn dda. Dychweliad yn y ffordd hudol mynegi eich hun super gryno. A 'i jyst yn gweithio. Ond mae yn nodwedd allweddol o'r holl y rhaglenni recursive rydym wedi siarad am ac yn edrych ar hyd yn hyn, a oedd eu bod yn cael beth? Mae achos sylfaenol, sef rhai caled codio achos a ddywedodd mewn rhai sefyllfaoedd peidiwch â galw foo, sy'n amlwg yn Nid yw yr achos yma. Felly, beth sy'n digwydd mewn gwirionedd o ran y llun? Wel, pan brif galwadau foo, mae'n yn cael sleisen o gof. Pan fydd yn galw foo foo, mae'n mynd sleisen o gof. Pan fydd yn galw foo foo, mae'n mynd yn dafell. Mae'n cael sleisen. Mae'n cael sleisen. Oherwydd foo byth yn dychwelyd. Nid ydym erioed yn dileu un o'r rhai a fframiau o'r pentwr. Felly, rydym yn chwythu drwy'r domen, nid sôn pwy a ŵyr beth arall, ac rydym yn rhy bell y ffiniau ein hyn a elwir yn segment o gof. Gamgymeriad mynd segmentu ffug. Felly, yr ateb mae amlwg nad ydynt yn gwneud hyn. Ond yr ymhlygiad fwy yw hynny, wrth gwrs, mae hollol beth terfyn, hyd yn oed os nad yw'n cael ei ddiffinio'n glir, o ran sut y llawer o swyddogaethau y gallwch chi alw mewn rhaglen, sawl gwaith y swyddogaeth yn gallu galw ei hun. Felly, er ein bod yn gwneud pregethu recursion gan fod hyn yn beth allai fod yn hudolus a cwpl o wythnosau yn ôl ar gyfer y sigma swyddogaeth, a phan fyddwn yn cael y data strwythurau a CS50, byddwch yn gweld eraill ceisiadau ar ei gyfer, nid yw'n reidrwydd y peth gorau. Oherwydd os yw swyddogaeth yn galw ei hun, galw ei hun, hyd yn oed os oes sylfaen achos, os nad ydych yn taro yr achos sylfaenol ar gyfer 1,000 o alwadau neu 10,000 o alwadau, gan yr adeg honno efallai eich bod wedi rhedeg allan o le ar eich corn hyn a elwir a tharo rhai rhannau eraill o gof. Felly, yn rhy yn ddyluniad cyfaddawd rhwng ceinder a rhwng cadernid eich benodol gweithredu. Felly mae anfantais arall neu gotcha arall ar yr hyn rydym wedi bod yn ei wneud hyd yn hyn. Pan fyddaf yn galw getstring - gadewch i mi fynd yn ôl i mewn i helo-2. Hysbysu fy mod i'n galw getstring, sydd yn dychwelyd cyfeiriad. Ac rydym yn honni heddiw sy'n mynd i'r afael yn dod o'r domen. Ac yn awr yr wyf yn argraffu allan y llinyn yn y cyfeiriad hwnnw. Ond nid ydym erioed wedi galw y gyferbyn getstring. Nid ydym erioed wedi gorfod calll swyddogaeth fel ungetstring, lle'r ydych yn llaw yn ôl bod y cof. Ond dweud y gwir mae'n debyg Dylai wedi bod. Oherwydd os ydym yn dal i ofyn y cyfrifiadur ar gyfer cof, drwy rywun fel getstring ond byth yn rhoi yn ôl, yn sicr hynny hefyd yn sicr o arwain at problemau lle rydym yn rhedeg allan o gof. Ac yn wir, gallwn edrych am y problemau gyda'r offeryn newydd y mae eu defnydd braidd yn cryptig i deipio. Ond gadewch i mi fynd yn ei flaen ac yn tasgu i fyny ar y sgrin mewn dim ond hyn o bryd. Rydw i'n mynd i fynd yn ei flaen a rhedeg Valgrind gyda paramedr mae eu meistrolaeth gyntaf ymresymiad llinell yw'r enw o'r rhaglen helo-2. Ac yn anffodus mae'n allbwn yn atrociously gymhleth heb reswm da. Felly, rydym yn gweld popeth a llanast. Mae David yn datgan fy enw i. Felly dyna y rhaglen mewn gwirionedd yn rhedeg. Ac yn awr rydym yn cael allbwn hwn. Felly Valgrind yn debyg mewn ysbryd i GDB. Nid yw'n debugger per se. Ond mae'n gwiriwr cof. Mae'n rhaglen a fydd yn rhedeg eich rhaglennu ac yn dweud wrthych os ydych yn gofyn i cyfrifiadur ar gyfer cof a pheidiwch byth â rhoi ei yn ôl, a thrwy hynny sy'n golygu eich bod wedi yn gollwng cof. A gollyngiadau cof yn tueddu i fod yn ddrwg. A ydych yn ddefnyddwyr cyfrifiaduron yn ôl pob tebyg yn teimlo hyn, p'un a oes gennych Mac neu PC. Ydych chi erioed wedi defnyddio eich cyfrifiadur ar gyfer tra ac nid hailgychwyn mewn sawl diwrnod, neu os ydych wedi jyst got a llawer o rhaglenni rhedeg, a'r peth damn arafu i stop malu, neu o leiaf 'i' super blino i'w ddefnyddio, oherwydd popeth jyst got super araf. Nawr gall fod yn unrhyw nifer o resymau. Gallai fod yn ddolen ddiddiwedd, nam yn Cod rhywun, neu, yn fwy syml, mae'n Gallai olygu eich bod yn defnyddio mwy o cof, neu'n ceisio, na'ch mewn gwirionedd wedi cyfrifiadur. Ac efallai mae 'na bug mewn rhai rhaglen sy'n cadw gofyn am cof. Porwyr ar gyfer y blynyddoedd oedd yn enwog am hyn, yn gofyn am fwy a mwy o gof ond byth yn dosbarthu yn ôl. Yn sicr, os mai dim ond yn gyfyngedig faint o gof, ni allwch ofyn anfeidrol o weithiau ar gyfer rhywfaint o'r cof. Ac felly yr hyn yr ydych yn gweld yma, er bod eto allbwn Valgrind yn ddiangen gymhleth i cipolwg ar gyntaf, mae hyn yn rhan ddiddorol. Heap - yn cael eu defnyddio wrth ymadael. Felly dyma faint o gof oedd yn cael eu defnyddio yn y domen yn y amser fy rhaglen wedi gadael - mae'n debyg chwe bytes mewn un bloc. Felly, yr wyf i'n mynd i chwifio fy nwylo ar yr hyn y mae bloc. Feddwl am y peth yn unig yw darn, a mwy gair technegol ar gyfer darn. Ond chwe bytes - beth yw'r chwe bytes sy'n yn dal yn cael eu defnyddio? Yn union. D-A-V-I-D slaes sero, pum llythyr enw yn ogystal â'r null terminator. Felly mae hyn yn rhaglen Valgrind sylwi fy mod Gofynnwyd am chwe bytes, mae'n debyg, gan ffordd o getstring, ond byth yn Rhoddodd yn ôl. Ac yn wir, efallai na fydd hyn fod mor amlwg os nad yw fy rhaglen yn dair llinellau, ond mae'n 300 o linellau. Er mwyn i ni mewn gwirionedd yn rhoi gorchymyn arall ymresymiad llinell i Valgrind i gwneud yn fwy verbose. Mae'n ychydig yn blino i'w gofio. Ond os wyf yn gwneud - gadewch i ni weld. Gollwng - A oedd yn gollwng - hyd yn oed Nid wyf yn cofio beth ydyw oddi ar law. - Gollwng-wiriad hafal llawn. Yep, diolch i chi. - Gollwng-wiriad hafal llawn. Enter. Un rhaglen yn rhedeg. Deipio David eto. Nawr rwy'n gweld ychydig mwy o fanylion. Ond yn is na'r crynodeb domen, sy'n yn union yr un fath i bedwar - AH, mae hyn yn fath o 'n glws. Nawr Valgrind yn edrych mewn gwirionedd ychydig yn galetach yn fy cod. Ac mae'n dweud, mae'n debyg, malloc at linell - rydym yn chwyddo allan. Ar-lein - Nid ydym yn gweld yr hyn y llinell ydyw. Ond malloc yw'r culprit cyntaf. Mae blog yn malloc. Mae pob hawl? OK, dim. Iawn? Gelwais getstring. getstring pob golwg yn galw malloc. Felly, pa linell o god yn ôl pob golwg ar fai am gael dyrannu cof hwn? Gadewch i ni dybio bod pwy bynnag ysgrifennodd malloc wedi bod o gwmpas yn ddigon hir ei fod yn Nid eu bai nhw. Felly, mae'n debyg fy. getstring yn cs50.c - fel bod 'na ffeilio yn rhywle ar y cyfrifiadur - yn unol 286 yn ymddangos i fod y tramgwyddwr. Nawr, gadewch i ni dybio bod CS50 wedi bod yn o gwmpas am swm gweddus o amser, felly rydym hefyd yn anffaeledig. Ac felly yn ôl pob tebyg yn nad ydynt mewn getstring bod y nam yn gorwedd, ond yn hytrach yn lein helo-2.c 18. Felly, gadewch i ni edrych ar beth yw'r llinell 18 oedd. Oh. Rhywsut nid y llinell hon o anghenraid bygi, fel y cyfryw, ond y rheswm y tu ôl i'r gollwng cof. Felly super syml, beth fyddai yn reddfol yw'r ateb yma? Os ydym yn gofyn am cof, roedd byth roi yn ôl, ac mae'n ymddangos i fod yn broblem oherwydd dros amser fy nghyfrifiadur gallai rhedeg allan o gof, efallai araf i lawr, gall pethau drwg yn digwydd, yn dda, beth yw'r ateb sythweledol syml? Jyst roi yn ôl. Sut yr ydych yn rhad ac am ddim i fyny y cof? Wel, diolch i'r drefn, mae'n eithaf syml i ddim ond dweud enw rhad ac am ddim. Ac nid ydym erioed wedi gwneud hyn o'r blaen. Ond gallwch hanfod feddwl am am ddim fel y gwrthwyneb i malloc. rhad ac am ddim yn y gwrthwyneb o dyrannu cof. Felly nawr gadewch i mi ail-grynhoi hyn. Gwneud helo-2. Gadewch i mi redeg eto. helo-2 David. Felly, mae'n ymddangos i weithio yn yn union yr un ffordd. Ond os byddaf yn mynd yn ôl i Valgrind ac ail-redeg yr un gorchymyn ar fy newydd rhaglen a luniwyd, teipio yn fy enw fel o'r blaen - 'n glws. Crynodeb Heap - yn cael eu defnyddio wrth ymadael - sero bytes mewn blociau sero. Ac mae hyn yn super 'n glws, pob blociau domen eu rhyddhau. Unrhyw ollyngiadau yn bosibl. Felly, yn dod i fyny, nid gyda Set Problem 4, ond gyda Set Problem 5, mae'r fforensig ac ymlaen, mae hyn hefyd yn dod yn mesur o gywirdeb eich rhaglen, p'un a oes gennych neu nid oes rhaid gollwng cof. Ond diolch byth, nid dim ond chi all resymu drwyddynt reddfol, sy'n , gellid dadlau, yn hawdd ar gyfer rhaglenni bach ond yn fwy anodd ar gyfer rhaglenni mwy, Valgrind, ar gyfer rhaglenni mwy hynny, eich helpu i nodi y broblem benodol. Ond mae un broblem arall a allai godi. Gadewch i mi agor y ffeil yma, sydd, unwaith eto, yn enghraifft braidd yn syml. Ond gadewch i ni ganolbwyntio ar yr hyn y rhaglen hon yn ei wneud. Gelwir hyn yn memory.c. Byddwn yn hyn yn nes ymlaen heddiw yn postio yn y zip o cod ffynhonnell heddiw. Ac yn sylwi bod gen i swyddogaeth o'r enw f sy'n cymryd unrhyw ddadleuon a dychwelyd dim. Yn unol 20, rwy'n debyg datgan pwyntydd i int a galw yn x. Rwy'n aseinio yw'r elw gwerth malloc. A dim ond i fod yn glir, faint o bytes yb Yn ôl pob tebyg i'n cael yn ôl o malloc yn y sefyllfa hon? Mae'n debyg 40. Ble yr ydych yn yr arian hwnnw? Wel, os ydych yn cofio i int yn aml yn 4 bytes, o leiaf mae yn y peiriant, 10 gwaith 4 yn amlwg 40. Felly malloc yn dychwelyd i gyfeiriad darn o gof a storio y mynd i'r afael yn y pen draw yn x. Felly, i fod yn glir, beth Yna yn digwydd? Wel, gadewch i mi newid yn ôl at ein darlun yma. Gadewch i mi nid yn unig yn tynnu waelod fy cof cyfrifiadur, gadewch i mi fynd yn ei flaen a tynnu y petryal gyfan sy'n cynrychioli pob un fy RAM. Byddwn yn dweud bod y pentwr ar y gwaelod. Ac mae 'na segment testun yn y data a uninitialized. Ond dw i'n jyst yn mynd i'r rhai haniaethol pethau eraill i ffwrdd â dot, dot dot. Im 'jyst yn mynd i gyfeirio at y gan fod y domen ar y brig. Ac yna ar waelod y llun, i gynrychioli'r prif, dw i'n mynd i roi cynnig cof sleisys ar y pentwr. Er f, dw i'n mynd i roi cynnig sleisen o gof ar y pentwr. Yn awr, yr wyf yn rhaid i ymgynghori fy cod ffynhonnell eto. Beth yw'r newidynnau lleol ar gyfer y prif? Mae'n debyg dim byd, fel y sleisen yn gwag yn effeithiol, neu hyd yn oed mor fawr fel yr wyf wedi tynnu ei. Ond yn f, mae gen i newidyn lleol, a elwir yn x. Felly, yr wyf i'n mynd i fynd yn ei flaen ac yn rhoi f darn o gof, yn galw yn x. Ac yn awr malloc o 10 gwaith 4, Felly malloc 40, ble y cof yn dod o? Nid ydym wedi tynnu llun fel hyn o'r blaen. Ond gadewch i ni dybio ei fod yn effeithiol dod oddi yma, felly un, dau, tri, pedwar, pump. Ac yn awr mae angen i mi 40 o'r rhain. Felly, 'n annhymerus' jyst yn gwneud dot, dot, dot i awgrymu y mae hyd yn oed mwy o gof dod yn ôl oddi wrth y domen. Nawr, beth yw'r cyfeiriad? Gadewch i ni ddewis ein mympwyol mynd i'r afael fel bob amser - Ox123, hyd yn oed er 'i' yn ôl pob tebyg yn mynd i fod yn rhywbeth hollol wahanol. Dyna'r cyfeiriad y beit cyntaf yn cof fy mod yn gofyn malloc amdano. Felly, yn fyr, ar ôl llinell 20 executes, hyn yn llythrennol storio y tu mewn o x yma? Ox123. Ox123. Ac mae'r Ychen yn anniddorol. Mae'n jyst yn golygu dyma rhif hecsadegol. Ond yr hyn sy'n allweddol yw bod yr hyn yr wyf i wedi storio yn x, sydd yn newidyn lleol. Ond mae ei fath ddata, unwaith eto, yn gyfeiriad o int. Wel, dw i'n mynd i storio Ox123. Ond unwaith eto, os yw hynny'n ychydig yn rhy gymhleth ddiangen, os wyf yn sgrolio yn ôl, gallwn dynnu hyn i ffwrdd yn eithaf rhesymol a dim ond dweud bod x yn pwyntydd i'r darn o gof. OK. Nawr bod y cwestiwn wrth law yw'r canlynol - llinell 21, mae'n troi allan, yn bygi. Pam? Mae'n ddrwg gennym? Nid oes ganddo - dweud bod unwaith eto. Wel, nid yw'n rhad ac am ddim. Felly, dyna'r ail ond. Felly, mae un arall ond yn benodol yn llinell 21. Yn union. Mae'r llinell hon yn syml o god yn unig yw gorlif byffer, a gor-redeg byffer. Mae byffer yn unig yn golygu darn o gof. Ond y darn o gof o faint 10, 10 cyfanrifau, sy'n golygu os ydym yn mynegai i mewn gan ddefnyddio'r siwgr cystrawennol o nodiant amrywiaeth, y sgwâr cromfachau, rydych yn cael mynediad at x braced braced 0 x 1 x, braced dot, dot, dot. x braced 9 yw'r un mwyaf. Felly, os wyf yn gwneud x braced 10, lle Rydw i'n wir yn mynd yn y cof? Wel, os wyf wedi 10 int - gadewch i ni mewn gwirionedd yn tynnu pob o'r rhain yma. Felly yr oedd y pum cyntaf. Dyma y pum ints eraill. Felly x braced 0 yma. x braced 1 yn yma. x braced 9 yma. x braced 10 yma, sy'n golygu yr wyf yn dweud, yn unol 21, y cyfrifiadur i roi'r nifer ble? Mae nifer 0 ble? Wel, mae'n 0, ie. Ond dim ond y ffaith bod ei 0 yn fath o gyd-ddigwyddiad. Gallai fod yn y nifer 50, ar gyfer yr holl ydym yn gofalu. Ond rydym yn ceisio sicrhau ei fod wrth x braced 10, a dyna lle mae hyn yn marc cwestiwn yn cael ei lunio, a nid yw'n beth da. Gallai hyn rhaglen yn dda iawn damwain o ganlyniad. Yn awr, gadewch i ni fynd yn ei flaen i weld os yw hyn yn yw, yn wir, beth sy'n digwydd. Gwneud cof, gan fod y ffeil Gelwir memory.c. Gadewch i ni fynd yn ei flaen ac yn rhedeg y cof rhaglen. Felly, rydym yn got 'n ffodus, mewn gwirionedd, mae'n ymddangos. Rydym yn cael lwcus. Ond gadewch i ni weld os ydym yn awr yn rhedeg Valgrind. Ar yr olwg gyntaf, efallai fy rhaglen yn ymddangos i fod yn hollol gywir. Ond gadewch i mi redeg Valgrind gyda'r - Gollwng-wiriad hafal llawn ar y cof. Ac yn awr pan fyddaf yn rhedeg hyn - diddorol. Annilys ysgrifennu o faint 4 yng llinell 21 memory.c. Llinell 21 o memory.c yw pa un? O, diddorol. Ond arhoswch. Maint 4, beth yw hynny yn cyfeirio? Dim ond yn un ysgrifennu, ond mae'n o faint 4. Pam ei fod yn 4? Mae'n oherwydd ei fod yn int, sy'n yw, unwaith eto, pedwar bytes. Felly Valgrind o hyd i chwilen yr wyf fi, glancing ar fy cod, nid oedd. Ac efallai y byddai eich TF neu na fyddai. Beth Ond Valgrind yn sicr fod rydym wedi gwneud camgymeriad yno, hyd yn oed er ein bod got 'n ffodus, a'r cyfrifiadur penderfynu, eh, dydw i ddim yn mynd i ddamwain dim ond oherwydd eich cyffwrdd un beit, un gwerth int o cof nad oeddech mewn gwirionedd ei hun. Wel, beth arall yn buggy yma. Cyfeiriad - yw'n un cyfeiriad yn edrych crazy yn hecsadegol. Mai dim ond yn golygu rhywle yn y domen yn sero bytes ar ôl bloc o faint 40 ei ddyrannu. Gadewch i mi chwyddo allan yma a gweld os mae hyn yn ychydig yn fwy defnyddiol. Diddorol. 40 bytes cael eu colli bendant yng nghofnod colli 1 o 1. Unwaith eto, mae mwy o eiriau nag yn ddefnyddiol yma. Ond yn seiliedig ar y llinellau a amlygwyd, lle y mae'n debyg y dylwn ganolbwyntio fy sylw ar gyfer bug arall? Edrych yn debyg i linell 20 o memory.c. Felly, os ydym yn mynd yn ôl i linell 20, dyna'r un a nodwyd gennych yn gynharach. Ac nid o reidrwydd bygi. Ond rydym wedi hyn wrthdroi ei effeithiau. Felly, sut ydw i'n cywiro o leiaf un o'r camgymeriadau hynny? Beth allwn i ei wneud ar ôl llinell 21? Gallwn i wneud yn rhad ac am x, felly mae i roi'r cof ôl. A sut ydw i'n atgyweiria bug hon? Ddylwn i bendant yn mynd dim farther na 0. Felly, gadewch i mi ceisio ail-redeg y. Mae'n ddrwg gennym, yn bendant yn mynd dim farther na 9. Gwneud cof. Gadewch i mi ailgynnal Valgrind mewn mwy ffenestr. Ac yn awr yn edrych. Nice. Mae'r holl blociau domen eu rhyddhau. Unrhyw ollyngiadau yn bosibl. Ac uwchben yma, does dim sôn unrhyw fwy o'r hawl annilys. Dim ond i gael barus, a gadewch i ni weld a oes enghraifft arall nid yw'n mynd fel y bwriadwyd - I ddim yn cael lwcus funud yn ôl. Ac mae'r ffaith bod hyn yn 0 efallai ddiangen gamarweiniol. Gadewch i ni dim ond gwneud 50, a braidd yn fympwyol nifer, yn gwneud cof dot slaes cof - yn dal i gael lwcus. Nid oes dim sy'n chwalu. Gadewch i ni dybio Fi jyst gwneud rhywbeth gwirioneddol ffôl, ac yr wyf yn 100. Gadewch i mi ail-wneud cof, dot slaes cof - got 'n ffodus eto. Beth am 1,000? ints y tu hwnt, yn fras, ble ddylwn i fod? Gwneud cof - damn iddo. [Chwerthin] OK. Gadewch i ni llanast o gwmpas anymore. Ailgynnal cof. Dyna ni. Mae pob hawl. Felly, mae'n debyg eich mynegai 100,000 ints y tu hwnt i ble y dylech fod wedi bod yn cof, pethau drwg yn digwydd. Felly, nid yw hyn yn amlwg yn, rheol cyflym caled. Roeddwn yn fath o ddefnyddio treial a chamgymeriadau i gyrraedd yno. Ond mae hyn yn oherwydd, stori hir yn fyr, cof eich cyfrifiadur hefyd yn cael ei rhannu i mewn i bethau hyn a elwir yn segmentau. Ac weithiau, y cyfrifiadur mewn gwirionedd wedi rhoi ychydig yn fwy cof i chi nag yr ydych yn gofyn amdano. Ond ar gyfer effeithlonrwydd, mae'n haws i cael mwy o cof, ond dim ond dweud wrthych eich bod yn cael cyfran ohono. Ac os ydych yn cael lwcus weithiau, Felly, efallai y byddwch yn gallu cyffwrdd Nid yw cof yw'n perthyn i chi. Nid oes gennych unrhyw sicrwydd bod yr hyn a gwerth byddwch yn rhoi y bydd yn aros yno, oherwydd y cyfrifiadur yn dal i feddwl nad yw'n eiddo i chi, ond nid yw'n anghenraid yn mynd i daro segment arall o gof yn y cyfrifiadur a chymell camgymeriad tebyg yr un yma yma. Mae pob hawl. Unrhyw gwestiynau, yna ar y cof? Mae pob hawl. Gadewch i ni edrych yma, yna, yn rhywbeth yr ydym wedi bod yn cymryd i a roddwyd ers peth amser, sydd sydd yn y ffeil o'r enw cs50.h. Felly, mae hyn yn ffeil. Dyma criw cyfan o sylwadau atodol. Ac efallai y byddwch wedi edrych ar hyn os chi poked o gwmpas ar yr offer. Ond mae'n troi allan bod yr holl amser, pan fyddwn yn ei ddefnyddio i ddefnyddio llinyn fel cyfystyr, y modd yr ydym yn datgan sy'n gyfystyr Gyda hyn keyword typedef, am ddiffiniad fath. Ac rydym yn ei hanfod yn dweud, yn gwneud llinyn yn gyfystyr ar gyfer seren torgoch. Bod y ffordd y mae pentwr creu olwynion hyfforddi hyn a elwir yn y llinyn. Nawr dyma dim ond prototeip ar gyfer getchar. Efallai y byddwn wedi ei weld o'r blaen, ond mae hynny'n yn wir yr hyn y mae'n ei wneud. getchar yn cymryd unrhyw ddadleuon, yn dychwelyd torgoch. getdouble yn cymryd unrhyw ddadleuon, dychwelyd dwbl. getfloat yn cymryd unrhyw ddadleuon, ffurflenni fflôt, ac yn y blaen. getint yn yma. getlonglong yn yma. Ac getstring yn yma. A dyna ni. Mae'r llinell borffor yn Preprocessor arall gyfarwyddeb oherwydd y hashtag ar ddechrau ohono. Mae pob hawl. Felly nawr gadewch i mi fynd i mewn i cs50.c. Ac ni fyddwn yn siarad yn rhy hir ar hyn. Ond i roi cipolwg o'r hyn sydd ar eich bod yn mynd ar hyn i gyd amser, gadewch i mi fynd i - gadewch i ni wneud getchar. Felly getchar yn bennaf sylwadau. Ond mae'n edrych fel hyn. Felly, mae hyn yw swyddogaeth wirioneddol getchar ein bod wedi cymryd yn ganiataol yn bodoli. A hyd yn oed er nad ydym wedi defnyddio'r un yn aml, os o gwbl, 'i' o leiaf gymharol syml. Felly mae'n werth cymryd edrych yn sydyn ar yma. Felly getchar Mae dolen ddiddiwedd, yn fwriadol felly mae'n debyg. Mae wedyn yn galw - ac mae hyn yn fath o ailddefnyddio 'n glws o god ydym ni ein hunain yn ysgrifennu. Mae'n galw getstring. Oherwydd yr hyn y mae'n ei yn ei olygu i gael golosg? Wel, efallai y byddwch yn ogystal ceisio cael llinell cyfan o destun gan y defnyddiwr a Yna, dim ond yn edrych ar un o gymeriadau hynny. Yn unol 60, dyma ychydig ychydig o wiriad sanity. Os getstring dychwelyd null, gadewch i ni symud ymlaen. Aeth rhywbeth o'i le. Nawr mae hyn braidd yn ddiflas, ond confensiynol yn C. cols max yn ôl pob tebyg cynrychioli'r hyn dim ond yn seiliedig ar ei enw? Mae'n gyson. Mae fel y gwerth rhifol y fwyaf torgoch gall ydych yn ei gynrychioli gyda un brathiad, ac mae'n debyg y nifer 255, sef y nifer mwyaf yr ydych cynrychioli wyth darnau, gan ddechrau o sero. Felly, yr wyf i wedi defnyddio hyn, yn y swyddogaeth hon, pan ysgrifennu'r cod hwn, dim ond am fod os oes rhywbeth yn mynd o'i le yn getchar ond ei bwrpas mewn bywyd yw i ddychwelyd torgoch, mae angen i chi rywsut yn gallu i ddangos i'r defnyddiwr y aeth rhywbeth o'i le. Ni allwn ddychwelyd null. Mae'n ymddangos bod null yn pwyntydd. Ac eto, getchar wedi i ddychwelyd torgoch. Felly y confensiwn, os bydd rhywbeth yn mynd anghywir, yw chi, y rhaglennydd, neu mewn yr achos hwn, i mi y llyfrgell, yr wyf wedi gyfiawn penderfynu fympwyol, os rhywbeth yn mynd o'i le, yr wyf i'n mynd i dychwelyd y rhif 255, sy'n wirioneddol yn golygu na allwn, y defnyddiwr ni all deipio cymeriad gynrychiolir gan y rhif 255 oherwydd ein bod wedi cael ei ddwyn fel gwerth sentinel hyn a elwir i yn cynrychioli problem. Nawr, mae'n ymddangos bod y cymeriad 255 nid yw'n rhywbeth y gallwch ei deipio ar eich bysellfwrdd, felly does dim llawer mawr. Nad yw'r defnyddiwr yn sylwi bod Rydw i wedi dwyn y cymeriad hwn. Ond os ydych chi erioed wedi gweld ar dudalennau ddyn ar system gyfrifiadurol rhai cyfeiriadau at yr holl gapiau cyson fel hyn sy'n dweud, mewn achosion o gamgymeriadau hwn nerth cyson yn cael ei ddychwelyd, dyna i gyd peth ddynol wnaeth blynedd yn ôl penderfynwyd fympwyol i dychwelyd y gwerth ac arbennig alw ei fod yn gyson yn achos rhywbeth yn mynd o'i le. Nawr bod y hud yn digwydd i lawr yma. Yn gyntaf, rwy'n datgan yn unol 67 ddau gymeriad, C1 a C2. Ac yna yn llinell 68, mae mewn gwirionedd llinell o god sy'n atgoffa rhywun o ein ffrind printf, gan ei fod yn oes gan y cant Cs mewn dyfynodau. Ond sylwi ar yr hyn sy'n digwydd yma. sscanf golygu sgan linyn - golygu sganio fformatio llinyn, sscanf ergo. Beth mae hynny'n ei olygu? Mae'n golygu eich bod yn pasio i sscanf llinyn. A llinell yw beth bynnag y mathau ddefnyddiwr i mewn Byddwch yn mynd heibio i sscanf llinyn fformat tebyg hon sy'n dweud scanf beth yw ydych yn gobeithio y bydd y defnyddiwr wedi teipio i mewn Yna byddwch yn pasio i mewn y chyfeiriad dau darnau o gof, yn yr achos hwn, oherwydd bod gen i ddau bachau. Felly, yr wyf i'n mynd i roi y cyfeiriad o C1 a chyfeiriad C2. A dwyn i gof eich bod yn rhoi swyddogaeth y gyfeiriad rhai amrywiol, beth yr awgrym? Beth all y swyddogaeth wneud o ganlyniad o roi ei gyfeiriad a amrywiol, yn hytrach na y newidyn ei hun? Gall newid, dde? Os ydych wedi cael rhywun map i nam corfforol gyfeiriad, gallant fynd yno ac yn gwneud beth bynnag y maent am ei gael ar y cyfeiriad hwnnw. Un syniad yma. Os byddwn yn trosglwyddo i sscanf, cyfeiriad ddau darnau o gof, hyd yn oed y rhain bach darnau bach o gof, C1 ac C2, ond yn dweud wrthynt y cyfeiriad ohonynt, Gall sscanf ei newid. Felly, pwrpas sscanf mewn bywyd, os ydym yn darllen y dudalen dyn, yw darllen yr hyn y mae'r defnyddiwr deipio i mewn, gobeithio am y defnyddiwr yn gorfod teipio mewn cymeriad ac efallai cymeriad arall, a beth bynnag y defnyddiwr teipio, cymeriad cyntaf yn mynd yma, yr ail gymeriad yn mynd yma. Yn awr, wrth fynd heibio, mae hyn, ac y byddech Dim ond yn gwybod hyn gan y dogfennau, y ffaith fy mod yn rhoi gofod gwag yno yn unig yn golygu nad wyf yn poeni os y defnyddiwr yn taro'r bar gofod ychydig gwaith cyn ef neu hi yn cymryd cymeriad, dw i'n mynd i anwybyddu unrhyw ofod gwyn. Felly hynny, yr wyf yn gwybod o y ddogfennaeth. Mae'r ffaith fod yna ail% c yna ofod gwyn mewn gwirionedd bwriadol. Yr wyf am fod yn gallu canfod os yw'r defnyddiwr sgriwio i fyny neu ddim yn cydweithredu. Felly, rwy'n gobeithio bod y defnyddiwr yn unig deipio mewn un cymeriad, felly rwy'n gobeithio y sscanf dim ond yn mynd i ddychwelyd y werth 1 oherwydd, unwaith eto, os wyf yn darllen y dogfennau, pwrpas sscanf yn bywyd yn dychwelyd at y nifer o newidynnau a gafodd eu llenwi gyda mewnbwn defnyddwyr. I basio mewn dau newidyn cyfeiriadau, C1 a C2. Rwy'n gobeithio, fodd bynnag, mai dim ond un o cael eu lladd oherwydd os sscanf dychwelyd 2, beth sydd yn ôl pob tebyg y goblygiadau rhesymegol? Nad oedd y defnyddiwr yn unig oedd yn rhoi un i mi gymeriad fel yr wyf yn dweud wrtho neu hi. Mae'n debyg eu bod deipio yn leiaf ddau gymeriad. Felly os wyf yn nid yn eu lle oedd yr ail % C, Fi jyst wedi cael un, a Byddai dweud y gwir yn fwy 'n athrylithgar dull, Cipolwg cyntaf i mi feddwl, nad ydych yn mynd i fod yn gallu canfod os yw'r defnyddiwr wedi bod yn rhoi mwy i chi mewnbwn na chi mewn gwirionedd eisiau. Felly, mae hyn yn ffurflen ymhlyg o gwirio camgymeriadau. Ond sylwi ar yr hyn yr wyf yn ei wneud yma. Unwaith rwy'n siŵr bod y defnyddiwr yn rhoi un i mi cymeriad, yr wyf yn rhad ac am ddim y llinell, yn gwneud y gwrthwyneb i getstring, sydd yn ei dro defnyddio malloc, ac yna byddaf yn dychwelyd C1, cymeriad fy mod yn gobeithio y defnyddiwr a ddarperir a dim ond darparu. Felly cipolwg cyflym yn unig, ond unrhyw gwestiynau ar getchar? Byddwn yn dod yn ôl at rai o'r lleill. Wel, gadewch i mi fynd yn ei flaen ac yn gwneud hyn - debyg nawr, dim ond er mwyn ysgogi ein trafodaeth mewn wythnos ac amser, mae hyn yn yn ffeil o'r enw structs.h. Ac eto, mae hyn yn unig yw blas o rywbeth sydd o'n blaenau. Ond rhybudd bod llawer o hyn yw sylwadau. Felly, gadewch i mi dynnu sylw at dim ond y rhan diddorol am y tro. typedef - mae yr un gair allweddol eto. typedef a ddefnyddiwn i ddatgan llinyn fel math data arbennig. Gallwch ddefnyddio typedef i greu newydd sbon mathau o ddata nad oedd yn bodoli pan Roedd C dyfeisio. Er enghraifft, int yn dod gyda C. torgoch yn dod gyda C. dwbl yn dod gyda C. Ond does dim syniad o fyfyriwr. Ac eto byddai'n eithaf ddefnyddiol i fod yn gallu ysgrifennu rhaglen sy'n storio mewn newidyn, rhif adnabod myfyriwr, eu henw, ac yn eu tŷ. Mewn geiriau eraill, tri darn o ddata, hoffi int a llinyn a llinyn arall. Gyda typedef, beth 'n bert pwerus am hyn a'r sturct gair allweddol ar gyfer strwythur, chi, y rhaglennydd yn 2013, Gall mewn gwirionedd yn diffinio eich hun mathau o ddata nad oedd yn bodoli flynyddoedd yn ôl ond yn addas ar gyfer eich dibenion. Ac felly dyma, yn y llinellau 13 drwy 19, rydym yn datgan math data newydd, fel yn int, ond yn galw ei myfyrwyr. A'r tu mewn newidyn hwn yn mynd i fod tri pheth - yn int, llinyn, a llinyn. Felly, gallwch chi feddwl am yr hyn sy'n wir ddigwyddodd yma, er bod hyn yn dipyn o symleiddio ar gyfer heddiw, myfyriwr yn mynd yn ei hanfod i edrych fel hyn. Mae ei mynd i fod yn ddarn o cof gyda adnabod, enw maes, a chae tŷ. A byddwn yn gallu defnyddio darnau hynny o cof a mynediad iddynt fel a ganlyn. Os byddaf yn mynd i mewn i struct0.c, dyma gymharol hir, ond yn dilyn patrwm, y cod sy'n yn defnyddio'r tric newydd. Felly, yn gyntaf, gadewch i mi dynnu eich sylw i rannau diddorol i fyny top. Sharp yn diffinio myfyrwyr 3, yn datgan myfyrwyr ac aseiniaid a elwir yn gyson yn fympwyol y rhif 3, dim ond felly mae gen i dri myfyriwr sy'n defnyddio rhaglen hon am y tro. Yma, yn dod Main. Ac rhybudd, sut ydw i'n datgan amrywiaeth o fyfyrwyr? Wel, Fi jyst yn defnyddio'r un gystrawen. Mae'r myfyriwr gair yn amlwg yn newydd. Ond myfyriwr, dosbarth, myfyrwyr braced. Felly, yn anffodus mae llawer o ailddefnyddio o dermau yma. Nifer hyn yn unig. Felly, mae hyn yn debyg i ddweud tri. Dosbarth yn union beth rwyf am i alw y newidyn. Y gallwn ei alw'n fyfyrwyr. Ond dosbarth, nid yw hyn yn ddosbarth mewn gwrthrych oriented Java fath tramwy. 'I' jyst dosbarth o fyfyrwyr. A'r math o ddata pob elfen yn yr amrywiaeth yn fyfyriwr. Felly, mae hyn yn ychydig yn wahanol ac o ddweud rhywbeth fel hyn, dim ond - I ddim yn dweud yn rhoi tri myfyriwr i mi a galw yn y dosbarth hwnnw arae. Mae pob hawl. Nawr dyma pedair dolen. Cyfarwydd y boi - ailadrodd o sero ar hyd at dri. A dyma y darn newydd o gystrawen. Mae'r rhaglen yn mynd i mi annog, y dynol, i roi cynnig myfyriwr ID, sy'n int. A dyma y gystrawen y gallwch ag ef storio rhywbeth yn y maes adnabod ar lleoliad dosbarth braced I. Felly, Nid chystrawen hyn yn newydd. Mae hyn yn unig yn golygu rhoi'r wythfed i mi myfyrwyr yn y dosbarth. Ond mae symbol hwn yn newydd. Hyd yn hyn, ni allwn wedi defnyddio dot, o leiaf mewn cod fel hyn. Mae hyn yn golygu mynd i'r strwythur a elwir yn myfyriwr a rhoi rhywbeth yno. Yn yr un modd, yn y llinell nesaf, 31, ewch ymlaen a rhowch beth bynnag fath y defnyddiwr am enw yma a beth maent yn ei wneud ar gyfer tŷ, yr un peth, mynd yn ei flaen a ei roi i mewn. tŷ. Felly, beth mae hyn yn rhaglen ei wneud yn y pen draw? Gallwch weld ychydig o teaser yno. Gadewch i mi fynd yn ei flaen ac yn gwneud structs 0 dot slaes strwythur 0, ID myfyriwr 1, dweud David Mather, myfyrwyr ID 2. Rob Kirkland, myfyrwyr ID 3. Lauren Leverit - a'r unig beth y rhaglen hon yn gwneud hynny, sydd ychydig yn gwbl fympwyol, yn cael ei Roeddwn i eisiau gwneud rhywbeth gyda data hwn, nawr fy mod i wedi dysgu i ni sut i defnyddio structs, yw wyf newydd gael y ddolen ychwanegol yma. I ailadrodd dros yr amrywiaeth o fyfyrwyr. Roeddwn i'n arfer ein, ffrind efallai bellach yn gyfarwydd, llinyn cymharu, stircomp i siec yn dŷ 8fed myfyriwr gyfartal i Mather? Ac os felly, dim ond argraffu rhywbeth fympwyol fel, ie, y mae. Ond unwaith eto, nid yw rhoi cyfleoedd i mi i ddefnyddio ac ailddefnyddio ac ailddefnyddio y nodiant dot newydd. Felly, sy'n gofalu, dde? Dod o hyd i raglen myfyriwr yn braidd yn fympwyol, ond mae'n troi allan y gallwn wneud pethau defnyddiol gyda hwn, er enghraifft, fel a ganlyn. Mae hwn yn strwythur llawer mwy cymhleth yn C. Mae'n cael dwsin neu fwy o feysydd, braidd yn gryptig enwir. Ond os ydych chi wedi clywed erioed o graffeg fformat ffeil o'r enw didfap, BMP, mae'n ymddangos bod y fformat ffeil bitmap 'n bert lawer yn edrych fel' na hyn. Mae'n dwp wyneb Smiley bach. Mae'n ddelwedd bach fy mod i wedi chwyddo i mewn ar eithaf mawr fel y gallwn i weld pob y dotiau neu picsel unigol. Yn awr, mae'n troi allan y gall ydym yn eu cynrychioli a dot du â, dyweder, y nifer 0. A dot gwyn gyda rhif 1. Felly, mewn geiriau eraill, os ydych am i dynnu Wyneb sy'n gwenu ac arbed y ddelwedd mewn cyfrifiadur, digon yw storio zeros a rhai sy'n edrych fel hyn, ble, unwaith eto, rhai yn wyn a seroau yn ddu. A chyda'i gilydd, os oes gennych effeithiol mae grid o rai a seroau, mae gennych grid o picsel, ac os ydych yn gosod nhw allan, mae gennych 'n giwt ychydig o wyneb Smiley. Yn awr, fformat ffeil didfap, BMP, yn effeithiol bod o dan y cwfl, ond gyda mwy o picsel sot eich bod mewn gwirionedd gall gynrychioli lliwiau. Ond pan fydd gennych fwy soffistigedig fformatau ffeil fel BMP a JPEG a GIF efallai y byddwch yn gyfarwydd â nhw, y rhai ffeiliau ar ddisg fel arfer nid yn unig yn â sero a rhai ar gyfer y picsel, ond ganddynt rywfaint o metadata hefyd - meta yn yr ystyr nad yw'n wir data ond mae'n ddefnyddiol cael. Felly y caeau yma yn awgrymu, a byddwn yn gweld hyn yn fwy manwl yn P-set 5, bod cyn y zeros a rhai sy'n cynrychioli'r picsel mewn delwedd, mae 'na griw o metadata fel maint y ddelwedd a'r lled y ddelwedd. Ac yn sylwi Rwy'n plicio oddi ar rhai bethau mympwyol yma - lled ac uchder. Bit cyfrif a rhai pethau eraill. Felly, mae rhywfaint o fetadata mewn ffeil. Ond drwy ddeall sut y ffeiliau yn cael eu gosod allan yn y ffordd hon, gallwch mewn gwirionedd Yna, trin delweddau, adennill delweddau o ddisg, newid maint delweddau. Ond ni allwch o reidrwydd gallant eu gwella. Angen i mi gael llun. Felly, yr wyf yn mynd yn ôl i RJ yma, a welsoch chi ar y sgrin yn eithaf beth amser yn ôl. Ac os byddaf yn agor Prif yma, mae hyn yn beth sy'n digwydd os ydych yn ceisio chwyddo i mewn ac gwella RJ. Dyw e ddim yn cael unrhyw well mewn gwirionedd. Nawr Keynote yn fath o pylu ei fod yn ychydig bach, dim ond i sglein dros y ffaith nad RJ yn mynd yn arbennig o gwell pan fyddwch yn chwyddo i mewn Ac os yn ei wneud y modd hwn, gweld y sgwariau? Yeah, gallwch bendant yn gweld y sgwariau ar daflunydd. Dyna beth gewch pan fyddwch yn gwella. Ond i ddeall sut mae ein RJ neu'r Wyneb sy'n gwenu yn cael ei weithredu fydd yn gadael i ni mewn gwirionedd yn ysgrifennu cod sy'n trin pethau hyn. Ac yr wyf yn meddwl y byddwn i'n dod i ben ar y nodyn hwn, gyda 55 eiliad o wella hynny yw, Yr wyf yn meiddio, yn dweud braidd yn gamarweiniol. [VIDEO Playback] -Mae'n gorwedd. Am yr hyn, nid wyf yn gwybod. -Felly, beth ydym yn gwybod? -Bod am 9:15 Ray Santoya oedd ar y ATM. -Felly, y cwestiwn yw beth oedd e'n ei wneud ar 09:16? -Saethu y naw milimetr ar rywbeth. Efallai ei fod yn gweld y sniper. -Neu oedd yn gweithio gydag ef. -Aros. Ewch yn ôl un. -Beth ydych chi'n ei weld? -Dewch ei wyneb i fyny, sgrin lawn. -Mae ei sbectol. -Mae adlewyrchiad. -Dyna'r tîm pêl fas Neuvitas. Dyna eu logo. -Ac efe yn siarad i bwy bynnag sy'n gwisgo y siaced. [VIDEO END Playback] DAVID J. Malan: Bydd hyn yn fod Set Problem 5. Byddwn yn gweld chi yr wythnos nesaf. SIARADWR GWRYW: Yn y CS50 nesaf. [Chriciaid drydar] [CHWARAE CERDDORIAETH]