[CHWARAE CERDDORIAETH] [VIDEO Playback] -He Gorwedd. -About Beth? Nid -I ddim yn gwybod. -So Beth ydym yn ei wybod? -bod Am 9:15, Ray Roedd Santoya yn y ATM. -Yeah. Felly, y cwestiwn yw, beth Roedd ef yn ei wneud ar 09:16? -Shooting Y 9 milimetr ar rywbeth. Efallai fe welodd y sniper. -neu Yn gweithio gydag ef. -Wait. Ewch yn ôl un. -Beth Ydych chi'n ei weld? -Bring Ei wyneb i fyny yr holl sgrin. Sbectol -His. -Mae 'Na adlewyrchiad. -Mae'n Yw'r tîm pêl fas Nuevitas. Mae hynny'n eu logo. -a Ei fod yn siarad â pwy bynnag sy'n gwisgo y siaced. [DIWEDD Playback] DAVID Malan: pob hawl. Mae hyn yn CS50 ac mae hyn yn ychydig yn fwy o [Anghlywadwy] ydych chi â nhw dabbling gyda phroblem gosod pedwar. Heddiw, rydym yn dechrau edrych ychydig yn fwy ddwfn yn y pethau hyn a elwir yn awgrymiadau, sydd hyd yn oed er 'i' pwnc 'n bert ddirgel, mae'n troi allan ei fod yn mynd i fod y ffordd y byddwn yn Gall ddechrau adeiladu a chydosod rhaglenni llawer mwy soffistigedig. Ond rydym yn gwneud hynny ar ddydd Mercher diwethaf drwy gyfrwng rhyw animeiddio clai yn gyntaf. Felly, mae hyn, galw i gof, yn Binky ac rydym yn ei ddefnyddio ef i fwrw golwg ar raglen sy'n Nid oedd yn wir yn gwneud unrhyw beth diddorol, ond yr oedd yn datgelu ychydig o broblemau. Felly, i ddechrau heddiw, pam nad ydym yn cerdded yn gyflym drwy ychydig o'r camau hyn, ceisio distill mewn i delerau dynol yn union beth sy'n mynd ymlaen fan hyn a pham mae hyn yn ddrwg, ac yna symud ymlaen ac mewn gwirionedd yn dechrau adeiladu rhywbeth gyda'r dechneg hon? Felly rhain oedd y cyntaf dwy linell yn y rhaglen hon ac mewn termau lleyg, beth yn y ddwy linell yn ei wneud? Rhywun sy'n weddol gyfforddus â'r hyn sy'n datgan ar y sgrin? Beth yw'r ddwy linell yn ei wneud? Dyw hi ddim yn bob un sy'n yn wahanol i wythnos un, ond mae peth symbol arbennig newydd. Yeah? Yn ôl yno. GYNULLEIDFA: Datgan awgrymiadau? DAVID Malan: Dweud eto? GYNULLEIDFA: Datgan awgrymiadau? DAVID Malan: awgrymiadau Datgan a gadewch i ni fireinio ychydig yn fwy. GYNULLEIDFA: [Anghlywadwy] cyfeiriad x ac yna y. DAVID Malan: Ac yna afael â hwy. Felly, yn benodol yr hyn rydym yn ei wneud yn ein bod yn datgan dau newidyn. Mae'r newidynnau, fodd bynnag, yn mynd i fod o seren int fath, a oedd yn yn golygu mwy penodol maent yn mynd i storio y cyfeiriad o int, yn y drefn honno, x ac y. Nawr a oes unrhyw werthoedd? A oes unrhyw gyfeiriadau gwirioneddol yn y rhain dau newidyn ar hyn o bryd? Na 'I' jyst hyn a elwir yn werthoedd garbage. Os nad ydych yn mewn gwirionedd yn aseinio i newidyn, beth bynnag oedd yn RAM yn flaenorol yn mynd i lenwi â sero a rhai y ddau newidynnau hynny. Ond nid ydym yn gwybod eto beth ydynt a dyna mynd i fod yn allweddol i pam Binky collodd ei ben yr wythnos diwethaf. Felly, dyma oedd y claymation ymgnawdoliad o hyn lle mae gennych dim ond dau newidyn, ychydig ddarnau crwn o glai, sy'n gallu storio newidynnau, ond fel y saethau lapio fyny yn awgrymu, nid ydynt yn pwyntio mewn gwirionedd i unrhyw le yn hysbys fel y cyfryw. Felly, yna cawsom y llinell hon, ac mae hyn Roedd yr wythnos diwethaf, malloc newydd ar gyfer cof dyrannu, sydd ychydig yn ffordd ffansi o ddweud wrth y system weithredu, Linux neu Mac OS neu Windows, hey, yn rhoi rhywfaint o gof i mi, ac mae pob rhaid i chi ddweud wrth y system weithredu yw'r hyn wrth ofyn iddo ar gyfer cof. Dyw hi ddim yn mynd i ofalu beth ydych chi'n mynd i'w wneud ag ef, ond mae angen i chi ddweud wrth y gweithredu system beth drwy gyfrwng malloc. Yeah? GYNULLEIDFA: Faint? DAVID Malan: Faint? Faint mewn bytes, ac yn y blaen, mae hyn, unwaith eto, enghraifft ddyfeisgar, yn cael ei dim ond dweud, rhoi maint o int mi. Yn awr, mae maint o int yw pedwar bytes neu 32 ddarnau. Felly, mae hyn yn unig yw ffordd o gan ddywedyd, hey, system weithredu, rhoi pedwar bytes o gof i mi y gallaf eu defnyddio ar gael imi, ac yn benodol, beth mae dychwelyd malloc gyda pharch i'r darn o bedwar bytes? GYNULLEIDFA: Cyfeiriad? DAVID Malan: Y gyfeiriad. Mae cyfeiriad y darn o bedwar bytes. Yn union. Ac felly dyna beth sy'n cael ei storio yn y pen draw yn x a dyna pam nad ydym yn ei wneud mewn gwirionedd gofal yr hyn y nifer o hynny cyfeiriad yw, boed yn OX1 neu ox2 neu ryw gyfeiriad hecsadegol cryptig. Rydym yn unig yn gofalu ddarluniadol bod y newidyn x yn awr gan dynnu sylw at y darn o gof. Felly y saeth yn cynrychioli pwyntydd, neu yn fwy penodol, yn, cyfeiriad cof. Ond unwaith eto, nid ydym fel arfer yn gofalu pa cyfeiriadau gwirioneddol y rhai yn cael eu. Yn awr, y llinell hon yn dweud beth yn nhermau lleygwr? Star x yn cael 42 hanner colon. Beth mae hyn yn ei olygu? Ydych am fynd? Peidiwch â crafu eich gwddf. GYNULLEIDFA: Y cyfeiriad x wrth 42. DAVID Malan: Cyfeiriad x ar 42. Ddim yn hollol. Mor agos, ond ddim yn hollol, oherwydd mae y seren sy'n prefixing x hwn. Felly mae angen i tweak ychydig. Yeah? GYNULLEIDFA: Y gwerth y mae'r pwyntydd x yn pwyntio i yw 42. DAVID Malan: Iawn. Mae'r gwerth y mae'r pwyntydd x yn pwyntio at, gadewch i ni ddweud, fod 42, neu mewn geiriau eraill, y seren x yn dweud, ewch i ba bynnag gyfeiriad mewn x, boed yn 1 Oxford Street neu 33 Oxford Street neu OX1 neu ox33, beth bynnag bod y cyfeiriad rhifol yn, seren x yw dereferencing o x. Felly ewch i'r cyfeiriad hwnnw a Yna, rhowch y rhif 42 yno. Felly byddai hynny'n ffordd sy'n cyfateb i ddweud hynny. Felly dyna i gyd iawn, ac yna byddem yn cynrychioli'r llun fel a ganlyn lle rydym wedi ychwanegu y 42 i fod darn o bedwar bytes ar yr ochr dde, ond y llinell hon yn lle'r aeth pethau o chwith a phen Binky yn popped oddi ar y pwynt hwn, gan fod pethau drwg yn digwydd pan fydd chi dereference gwerthoedd garbage neu os ydych dereference annilys awgrymiadau, ac yr wyf yn dweud annilys oherwydd ar y pwynt hwn yn y stori, beth yw tu mewn y? Beth yw gwerth y y sail ar yr ychydig gamau diwethaf? Yeah? Beth yw hwnna? GYNULLEIDFA: Mae gyfeiriad. DAVID Malan: Mae gyfeiriad. Dylai fod yn gyfeiriad ond yr wyf wedi ymgychwyn hi? Felly, nid wyf wedi eto. Felly, yr hyn a gwyddys eu bod mewn yno? 'I' jyst rhywfaint o werth garbage. Gallai fod yn unrhyw gyfeiriad o sero i 2000000000 os oes gennych ddau gigs o RAM, neu sero i 4 biliwn a os oes gennych got pedair gigabeit o RAM. Mae'n rhywfaint o werth garbage, ond y broblem yw bod y system yn gweithredu, os nad yw wedi ei roi i chi bod darn o gof yn benodol eich bod yn ceisio mynd i, Yn gyffredinol, mae'n mynd i achosi beth rydym wedi gweld fel nam segmentu. Felly, mewn gwirionedd, unrhyw un ohonoch sydd wedi trafferth ar broblemau yn y oriau swyddfa neu mewn problemau hynny'n fwy Yn gyffredinol, gyda ceisio at chyfrif i nam segmentu, mae hynny'n golygu yn gyffredinol eich bod yn cyffwrdd segment o cof na ddylech fod. Rydych yn cyffwrdd cof bod nid oedd y system yn gweithredu wedi caniatáu i chi i gyffwrdd, boed yn drwy fynd yn rhy bell yn eich array neu ddechrau nawr, p'un 'i' oherwydd eich bod cyffwrdd cof mai dim ond rhywfaint o werth garbage. Wneud hynny seren x yma yw math o ymddygiad anniffiniedig. Ni ddylech fyth ei wneud oherwydd groes yn cael eu, mae'r rhaglen 'jyst yn mynd i ddamwain, oherwydd eich bod yn ei ddweud, ewch i'r cyfeiriad yma ac nad oes gennych syniad ble y cyfeiriad hwnnw mewn gwirionedd. Felly mae'r system yn gweithredu yn debygol mynd i ddamwain eich rhaglen o ganlyniad, ac yn wir, dyna beth ddigwyddodd yno i Binky. Felly yn y pen draw, Binky sefydlog broblem hon gyda hyn. Er mwyn i rhaglen ei hun yn ddiffygiol. Ond os ydych yn fath o symud ymlaen a gweithredu llinell hon yn lle hynny, y yn hafal x unig yn golygu beth bynnag gyfeiriad yn x, hefyd roi mewn y. Ac felly ar ffurf lluniau, rydym wedi cynrychioli hyn gyda dau saethau ox ac o y pwyntio i'r un lle. Felly semantig, x yn hafal iy gan fod y ddau o'r rheiny yn storio yr un fath cyfeiriad, ergo pwyntio yn 42, ac yn awr, pan fyddwch yn dweud seren y, ewch i'r cyfeiriad yn y, mae hyn yn cael sgil-effaith diddorol. Felly mae'r cyfeiriad yn y yn y un peth ag y cyfeiriad yn x. Felly, os ydych yn dweud yn mynd i'r cyfeiriad yn y a newid y gwerth i 13, pwy arall sy'n effeithio? X yw, pwynt D, fel petai, Dylid eu heffeithio hefyd. Ac yn wir, sut Nick Tynnodd y llun yma mewn animeiddio clai yn union hynny. Hyd yn oed er ein bod yn dilyn y pwyntydd y, yr ydym yn dod i ben i fyny yn yr un lle, ac felly pe baem yn argraffu allan x neu y yn pointee, Yna byddem yn gweld y gwerth o 13. Yn awr, yr wyf yn dweud pointee i fod yn gyson â'r fideo. Rhaglenwyr, yn fy gwybodaeth, byth mewn gwirionedd dweud y gair pointee, yr hyn sydd yn pigfain ar, ond er mwyn cysondeb gyda'r fideo, yn sylweddoli dyna i gyd a oedd yn yn golygu yn y sefyllfa honno. Felly unrhyw gwestiynau ar claymation neu awgrymiadau neu malloc eto? Na? Iawn. Felly, heb bellach ado, gadewch i ni edrych yn y lle mae hyn wedi mewn gwirionedd cael ei ddefnyddio ers peth amser. Felly, rydym wedi cael y llyfrgell CS50 sy'n cael yr holl swyddogaethau hyn. Rydym wedi defnyddio GetInt llawer, GetString, yn ôl pob tebyg yn gynharach GetLongLong yn fy PSet un neu hynny, ond beth sy'n mewn gwirionedd wedi bod yn digwydd? Wel, gadewch i ni edrych yn sydyn o dan y cwfl yn rhaglen sy'n ysbrydoli pam ein bod yn rhoi i chi y CS50 llyfrgell, ac yn wir fel yr wythnos diwethaf, rydym yn dechrau cymryd rhai olwynion hyfforddiant i ffwrdd. Felly, mae hyn bellach yn cael ei sortio o post-mortem o'r hyn Mae bod yn mynd ymlaen y tu mewn i'r llyfrgell CS50, er ein bod yn awr yn dechrau symud ffwrdd oddi wrtho i'r rhan fwyaf o raglenni. Felly, mae hon yn rhaglen o'r enw scanf 0. Mae'n super byr. 'I jyst wedi llinellau hyn, ond mae'n yn cyflwyno swyddogaeth o'r enw scanf ein bod mewn gwirionedd yn ni'n mynd i weld mewn eiliad tu mewn y llyfrgell CS50, er mewn ffurf ychydig yn wahanol. Felly y rhaglen hon ar-lein 16 yn datgan newidyn x. Felly rhowch pedwar bytes gyfer int mi. Mae wedi bod yn dweud wrth y defnyddiwr, rhif os gwelwch yn dda, ac yna mae hwn yn llinell diddorol sy'n mewn gwirionedd yn clymu at ei gilydd yr wythnos diwethaf ac mae hyn. Scanf, ac yna yn sylwi mae'n cymryd Fformat llinyn, yn union fel printf, % Ff golygu int, ac yna mae'n cymryd ail ddadl sy'n edrych ychydig yn ffynci. Mae'n ampersand x, ac i gofio, byddwn ond yn gweld yr wythnos hon unwaith diwethaf. Beth mae ampersand x gynrychioli? Beth mae ampersand yn ei wneud yn C? Yeah? GYNULLEIDFA: Y cyfeiriad. DAVID Malan: Cyfeiriad. Felly mae'n y gwrthwyneb gweithredwr y seren, tra bod y gweithredwr seren yn dweud, ewch i y cyfeiriad hwn, y gweithredydd ampersand yn dweud, chyfrif i maes y cyfeiriad y newidyn hwn, ac felly mae hwn yn allweddol, oherwydd Diben scanf mewn bywyd yw i sganio y defnyddiwr mewnbwn gan y bysellfwrdd, gan ddibynnu ar beth bynnag mae ef neu hi math, ac yna darllenwch mewnbwn y defnyddiwr i mewn i amrywio, ond rydym yn Gwelodd yn y pythefnos diwethaf bod y swyddogaeth cyfnewid yr ydym Ceisiodd effortlessly i weithredu yn unig oedd wedi torri. Dwyn i gof bod gyda'r swyddogaeth cyfnewid, os ydym yn unig datgan A a B fel ints, wnaethom gyfnewid llwyddiannus dau newidyn tu mewn cyfnewid yn union fel gyda'r llaeth a OJ, ond cyn gynted ag cyfnewid a ddychwelwyd, beth oedd y canlyniad gyda pharch i x ac y, y gwerthoedd gwreiddiol? Dim byd. Yeah. Nid oes dim yn digwydd yr adeg honno, oherwydd cyfnewidiadau yn newid dim ond ei copďau lleol, sy'n cael ei ddweud, i gyd y tro hwn, pryd bynnag rydym wedi bod yn pasio mewn dadleuon i swyddogaethau, rydym yn dim ond pasio copïau o dadleuon hynny. Gallwch wneud â hynny beth bynnag y dymunwch gyda nhw, ond maent yn mynd i gael unrhyw effaith ar y gwerthoedd gwreiddiol. Felly, mae hyn yn broblem os ydych yn am gael swyddogaeth fel scanf mewn bywyd, a'i ddiben yw i sganio mewnbwn y defnyddiwr o'r bysellfwrdd ac yna llenwch y bylchau, felly i siarad, hynny yw, rhoi newidyn fel x gwerth, oherwydd pe bawn i ddim ond pasio x i scanf, os ydych yn ystyried y rhesymeg ddiwethaf wythnos, gall scanf wneud beth bynnag y mae am gyda chopi o x, ond na allai newid x barhaol oni bai ein bod yn rhoi scanf map trysor, fel petai, lle mae x yn nodi y fan a'r lle, lle rydym yn pasio yn y cyfeiriad o x fel bod scanf gallu mynd yno ac mewn gwirionedd yn newid werth x. Ac felly yn wir, i gyd bod y rhaglen hon yn ei wneud os byddaf yn gwneud scanf 0, yn fy ffynhonnell Cyfeiriadur 5m, yn gwneud scanf 0, dot slaes scanf, rhif os gwelwch yn dda 50, diolch am y 50. Felly nid yw'n bob un sy'n ddiddorol, ond yr hyn sy'n wir yn digwydd yw bod cyn gynted ag yr wyf yn galw scanf yma, mae'r gwerth x yn cael ei newid yn barhaol. Yn awr, mae hyn yn ymddangos 'n glws a da, ac mewn gwirionedd, mae'n ymddangos fel 'n sylweddol oes angen i ni y llyfrgell CS50 o gwbl anymore. Er enghraifft, gadewch i ni redeg mae hyn unwaith eto fan hyn. Gadewch i mi ail-agor y peth am eiliad. Gadewch i ni geisio rhif os gwelwch yn dda a yn lle dweud 50 fel o'r blaen, gadewch i ni jyst dweud na. OK, dyna ychydig yn od. IAWN. A dim ond ychydig lol yma. Felly nid yw'n ymddangos i ymdrin â sefyllfaoedd wallus. Felly mae angen i cyn lleied â phosibl cychwyn ychwanegu rhai wall-wirio i wneud yn siŵr bod y defnyddiwr teipio mewn nifer wirioneddol yn hoffi 50, oherwydd bod y geiriau sy'n ymddangos yn teipio Nid yn cael ei ganfod yn broblemus, ond mae'n debyg y dylai fod. Gadewch i ni edrych ar y fersiwn nawr dyna fy ymgais i reimplement GetString. Os scanf Mae hyn i gyd ymarferoldeb a adeiladwyd yn, pam yr ydym ni wedi bod yn dabbling â'r rhain olwynion hyfforddiant fel GetString? Wel, dyma efallai yw fy mhen fy hun Fersiwn syml o GetString lle wythnos yn ôl, efallai y byddwn wedi dweud, rhoi llinyn i mi ac yn ei alw'n byffer. Heddiw, yr wyf i'n mynd i ddechrau yn unig gan ddweud seren torgoch, sydd, galw i gof, 'i' jyst yn gyfystyr. Mae'n edrych yn scarier ond mae'n yr un peth yn union. Felly rhowch newidyn a elwir clustogi i mi sy'n mynd i storio llinyn, dweud wrth y llinyn defnyddiwr os gwelwch yn dda, ac yna, yn union fel o'r blaen, gadewch i ni geisio i fenthyca wers hon scanf % S yr amser hwn ac wedyn yn trosglwyddo'r yn clustogi. Yn awr, gwiriad pwyll gyflym. Pam nad ydw i'n dweud ampersand clustogi y tro hwn? Casglu oddi wrth yr enghraifft flaenorol. GYNULLEIDFA: seren Torgoch yn pwyntydd. DAVID Malan: Yn union, gan fod y cyfnod hwn, cols seren eisoes yn pwyntydd, cyfeiriad, yn ôl y diffiniad hwnnw seren fod yno. Ac os scanf disgwyl cyfeiriad, mae'n suffices dim ond i basio mewn clustogi. Nid oes angen i mi ddweud byffer ampersand. Ar gyfer y chwilfrydig, gallech gwneud rhywbeth fel hyn. Byddai ganddo gwahanol ystyr. Byddai hyn yn rhoi i chi pwyntydd at pwyntydd, sydd mewn gwirionedd yn beth dilys yn C, ond ar gyfer yn awr, gadewch i ni ei gadw'n syml a chadw y stori gyson. Im 'jyst yn mynd i basio mewn clustogi ac mae hynny'n gywir. Y broblem fodd bynnag, yw hyn. Gadewch i mi fynd yn ei flaen ac yn rhedeg hyn rhaglen ar ôl iddo lunio. Gwneud scanf 1. Damn iddo, fy compiler yn dal fy camgymeriad. Rhowch un eiliad i mi. Chlang. Lets 'ddeud scanf-1.c. IAWN. Dyna ni. Ei angen arnaf. ID CS50 Mae gan amryw o gosodiadau cyfluniad sy'n eich diogelu chi eich hun yn erbyn. Roedd angen i mi analluoga hynny drwy rhedeg chlang llaw y tro hwn. Felly, os gwelwch yn dda llinyn. Rydw i'n mynd i fynd yn ei flaen a theipiwch yn fy hoff byd helo. OK, null. Nid Dyna beth yr wyf yn ei deipio. Felly mae'n arwydd o rhywbeth yn anghywir. Gadewch i mi fynd yn ei flaen a theipiwch mewn llinyn hir iawn. Diolch am y null ac nid wyf yn gwybod os ydw i'n mynd i fod yn gallu chwalu hi. Gadewch i ni geisio ychydig gopi bastio i weld os mae hyn yn helpu. Dim ond past llawer o hyn. Mae'n bendant yn fwy llinyn nag arfer. Gadewch i 'jyst' n sylweddol ysgrifennu. Na Damn hi. Yn gorchymyn Nid yw dod o hyd. Felly dyna amherthnasol. Mae hynny oherwydd fy mod gludo rhai cymeriadau drwg, ond mae hyn yn troi allan nid yn mynd i weithio. Gadewch i ni roi cynnig ar hyn unwaith yn rhagor, oherwydd mae'n fwy o hwyl os ydym mewn gwirionedd yn chwalu hi. Gadewch i deipio hwn ac yn awr, rwy'n mynd i gopïo llinyn hir iawn ac yn awr gadewch i ni weld os byddwn yn chwalu y peth hyn. Hysbysiad i mi hepgor lleoedd a llinellau a hanner colon newydd a phob gymeriadau ffynci. Enter. Ac yn awr y rhwydwaith wedi dim ond bod yn araf. Cynhaliais lawr Command-V rhy hir, yn amlwg. Damn it! Yn gorchymyn Nid yw dod o hyd. IAWN. Wel, y pwynt yw serch hynny mae'r canlynol. Felly beth sy'n mynd mewn gwirionedd ymlaen gyda datganiad hwn o byffer seren torgoch ar-lein 16? Felly, beth ydw i'n cael pan wyf yn datgan pwyntydd? Mae pob Im 'yn cael yn werth pedair beit Gelwir byffer, ond beth sydd tu mewn iddo ar hyn o bryd? 'I' jyst rhywfaint o werth garbage. Oherwydd bod unrhyw tro y byddwch yn datgan newidyn yn C, dim ond rhywfaint o werth garbage, ac rydym yn dechrau daith dros y realiti hwn. Yn awr, pan fyddaf yn dweud wrth scanf, ewch i'r cyfeiriad yma a rhowch beth bynnag yw'r math o ddefnyddiwr i mewn. Os bydd y mathau defnyddiwr yn helo byd, yn dda, lle ydw i'n ei roi? Byffer yn werth garbage. Felly dyna fath o fel saeth sy'n pwyntio pwy a ŵyr lle. Efallai ei fod yn pwyntio yma yn fy nghof. Ac felly pan fydd y defnyddiwr mathau yn y byd helo, mae'r rhaglen yn ceisio rhoi'r llinyn helo slaes byd 0 yn y darn o gof. Ond gyda thebygolrwydd uchel, ond amlwg nad 100% tebygolrwydd, y cyfrifiadur yn mynd i yna ddamwain y rhaglen oherwydd nid yw hyn yn cof y dylwn i gael yr hawl i gyffwrdd. Felly, yn fyr, mae'r rhaglen hon yn ddiffygiol am yr union y rheswm hwnnw. Yn sylfaenol Dydw i ddim yn gwneud yr hyn? Pa gamau mae'n rhaid i mi adael allan, yn union fel rydym yn hepgor gyda enghraifft gyntaf Binky yn? Yeah? GYNULLEIDFA: Dyraniad Cof? DAVID Malan: Dyraniad Cof. Nid wyf wedi dyrannu mewn gwirionedd unrhyw cof am y llinyn. Fel y gallwn atgyweiria hon mewn cwpl o ffyrdd. Un, gallwn gadw pethau'n syml ac yn wir, yn awr eich bod yn mynd i ddechrau i weld amwysedd o'r llinellau rhwng yr hyn arae yw, beth llinyn yw, beth yw seren torgoch yw, yr hyn amrywiaeth o chars mae. Dyma ail enghraifft sy'n cynnwys llinynnau a rhybudd i gyd Rwyf wedi gwneud ar-lein 16 yw, yn hytrach na dweud y byffer yn mynd i fod yn torgoch seren, pwyntydd i darn o gof, Rydw i'n mynd i roi rhagweithiol iawn fy hun byffer am 16 cymeriadau, ac yn wir, os ydych yn gyfarwydd gyda'r term clustogi, yn ôl pob tebyg o fyd fideos, lle mae fideo ar clustogi, byffro, byffro. Wel, beth yw'r cysylltiad yma? Wel, Y tu mewn o YouTube ac y tu mewn o chwaraewyr fideo Yn gyffredinol, mae amrywiaeth mae hynny'n fwy na 16. Gallai fod yn amrywiaeth o faint un megabyte, efallai 10 megabeit, ac i mewn i'r amrywiaeth mae eich porwr lawrlwytho criw cyfan o bytes, criw cyfan o megabeit o fideo, ac mae'r chwaraewr fideo, YouTube neu bwy bynnag sydd, yn dechrau darllen y bytes o'r array, ac unrhyw tro y byddwch yn gweld y byffro gair, byffro, mae hynny'n golygu y chwaraewr wedi gotten hyd at ddiwedd y rhesi. Mae'r rhwydwaith mor araf nad oes ganddo ail-lenwi y casgliad gyda mwy o bytes ac felly ydych allan o ddarnau i arddangos i'r defnyddiwr. Felly byffer yn derm addas yma yn y 'i' jyst amrywiaeth, darn o gof. A bydd hyn yn atgyweiria ' am ei fod yn troi allan eich bod yn gallu trin araeau fel pe eu bod yn mynd i'r afael, er bod byffer yn unig yw symbol, mae'n dilyniant o gymeriadau, byffer, mae hynny'n ddefnyddiol i mi, y rhaglennydd, gallwch basio ei enw o gwmpas fel pe bai'n pwyntydd, fel pe bai'n Roedd y cyfeiriad darn o gof am 16 chars. Felly dyna i ddweud, gallaf basio y scanf union hynny gair ac felly nawr, os wyf yn gwneud y rhaglen hon, gwneud scanf 2, dot scanf slaes 2, a deipio i mewn helo byd, Mewnbynnu, hynny adeg-- Hmm, beth ddigwyddodd? Llinynnol os gwelwch yn dda. Beth wnes i ei wneud o'i le? Helo byd, byffer. Helo Byd. Ah, rwy'n gwybod beth mae'n ei wneud. IAWN. Felly, mae'n darllen i fyny nes bod y gofod gyntaf. Felly gadewch i ni twyllo am ddim ond ennyd a yn dweud oeddwn am deipio rhywbeth hir iawn fel hyn yn dedfryd hir dyna un, dau, tri, pedwar, pump, chwech, saith, wyth, naw, 10, 11, 12, 13, 14, 15, 16. IAWN. Mae'n wir dedfryd hir. Felly frawddeg hwn yn hwy na 16 nod ac felly pan fyddaf daro Chofnoda, beth sy'n mynd i ddigwydd? Wel, yn yr achos hwn y byffer stori, yr wyf wedi datgan i mewn gwirionedd yn cael amrywiaeth gyda 16 chars barod i fynd. Felly un, dau, tri, pedwar, pump, chwech, saith, wyth, naw, 10, 11, 12, 13, 14, 15, 16. Felly 16 cymeriadau, ac yn awr, pan fyddaf yn darllen yn rhywbeth fel hyn yn hir dedfryd, beth sy'n mynd i ddigwydd yn fy mod i'n mynd i ddarllen yn hyn yn hir S-E-N-T-E-N-C-E, y frawddeg. Felly mae hyn yn fwriadol yn beth drwg i mi cadw ysgrifennu y tu hwnt i'r ffiniau fy array, tu hwnt i ffiniau fy byffer. Y gallwn i gael lwcus ac yn y rhaglen Bydd cadw ar redeg a pheidio gofal, ond yn gyffredinol, mae hyn yn Bydd yn wir chwalu fy rhaglen, ac mae'n nam yn fy godio'r hyn o bryd yr wyf yn camu tu hwnt i ffiniau o hynny array, oherwydd yr wyf yn ddim yn gwybod os yw'n o reidrwydd yn mynd i ddamwain neu os Im 'jyst yn mynd i gael lwcus. Felly, mae hyn yn broblem oherwydd yn yr achos hwn, mae'n ymddangos i weithio a gadewch i ni temtio ffawd yma, er bod y DRhA yn ymddangos i oddef cryn dipyn o- Dyna ni. Yn olaf. Felly, fi yw'r unig un sy'n gallu gweld hyn. Felly, Fi jyst wedi cael llawer o hwyl yn teipio allan ymadrodd 'n sylweddol hir gwirioneddol ei fod yn sicr yn rhagori 16 bytes, gan fy mod deipio yn yr aml-linell hir crazy ymadrodd, ac yna sylwi ar yr hyn a ddigwyddodd. Mae'r rhaglen yn ceisio argraffu ac yna got nam segmentu a namau segmentu yw pan rhywbeth fel hyn yn digwydd ac mae'r system weithredu yn dweud na, ni all gyffwrdd y cof. Rydym yn mynd i ladd y rhaglen yn gyfan gwbl. Felly, mae hyn yn ymddangos yn broblemus. Rydw i wedi gwella'r rhaglen lle o leiaf yn cael rhywfaint o gof, ond byddai hyn yn ymddangos i gyfyngu y GetString swyddogaeth i gael llinynnau o ryw hyd cyfyngedig 16. Felly os ydych am i gefnogi mwy o amser brawddegau na 16 cymeriadau, beth ydych chi'n ei wneud? Wel, gallwch gynyddu maint y byffer hwn i 32 neu sy'n ymddangos yn fath o fyr. Pam nad ydym yn unig yn gwneud mae'n 1,000 ond gwthio yn ôl. Beth yw ymateb yn reddfol o dim ond osgoi'r broblem hon drwy wneud fy clustogi mwy, fel 1,000 o chars? Trwy weithredu'r GetString y ffordd hon. Beth sy'n dda neu'n ddrwg yma? Yeah? GYNULLEIDFA: Os ydych yn rhwymo i fyny choelbren o le ac nad ydych yn ei ddefnyddio, yna ni allwch ailddyrannu y gofod. DAVID Malan: Yn hollol. Mae'n wastraffus i'r graddau os nad ydych yn ei wneud mewn gwirionedd yn rhaid i 900 o bytes rhai ac eto yr ydych yn gofyn am 1,000 i gyd beth bynnag, ydych ond yn cymryd llawer mwy o gof ar cyfrifiadur y defnyddiwr nag angen i chi wneud, ac wedi'r cyfan, mae rhai o'r ydych eisoes wedi dod ar eu traws mewn bywyd, pan fyddwch yn rhedeg llawer o raglenni ac maent yn bwyta i fyny llawer o gof, Gall hyn mewn gwirionedd yn effeithio perfformiad a phrofiad y defnyddiwr ar y cyfrifiadur. Felly dyna fath o ateb diog, yn sicr, ac i'r gwrthwyneb, 'i' nid yn unig yn wastraffus, pa broblem yn dal i fod, hyd yn oed os wyf yn gwneud fy byffer 1,000? Yeah? GYNULLEIDFA: Y llinyn yn hyd 1,001. DAVID Malan: Yn union. Os yw eich llinyn yn hyd 1,001, mae gennych yr un broblem yn union, a chan fy nadl, fyddwn i dim ond wedyn yn ei gwneud yn 2000, ond nad ydych yn gwybod mewn ymlaen llaw pa mor fawr y dylai fod, ac eto, oes rhaid i mi lunio fy rhaglen cyn gadael i bobl eu defnyddio a llwytho i lawr iddo. Felly mae hyn yn union y math o pethau fod y ceisiau llyfrgell CS50 er mwyn ein helpu gyda, ac rydym annhymerus 'yn unig yr olwg ar rai o'r gweithrediad sylfaenol yma, ond mae hyn yn CS50 dot C. hwn yw y ffeil sydd wedi bod ar CS50 IDE yr holl wythnosau hyn yr ydych wedi bod yn defnyddio. Mae'n cyn-llunio ac nad ydych wedi bod yn ei ddefnyddio yn awtomatig yn ôl natur y gael y dash L baner CS50 gyda chlang, ond os wyf sgroliwch i lawr drwy bob un swyddogaethau hyn, dyma GetString, a dim ond i roi i chi yn blas o'r hyn sy'n digwydd, gadewch i ni edrych yn sydyn ar cymhlethdod cymharol. Nid yw'n super hir swyddogaeth, ond nid ydym yn gwneud rhaid i ni feddwl yn galed am gyd sut i fynd ati i gael llinynnau. Felly dyma fy byffer ac yr wyf yn yn ôl pob golwg ymgychwyn iddo null. Mae hyn, wrth gwrs, yw'r un peth â seren torgoch, ond penderfynais mewn gweithredu'r llyfrgell CS50 os ydym yn mynd i fod yn gwbl ddeinamig, Nid wyf yn gwybod o flaen llaw pa mor fawr o defnyddwyr llinyn yn mynd i eisiau i gael. Felly, yr wyf i'n mynd i ddechrau gyda dim ond llinyn gwag ac yr wyf i'n mynd i adeiladu cymaint cof gan fod angen i mi i osod y llinyn defnyddiwr ac os nad oes gennyf ddigon, dw i'n mynd i ofyn y system weithredu am fwy o gof. Rydw i'n mynd i symud eu llinyn i mewn darn mwy o gof ac rwy'n mynd i ollwng neu ddim y darn ddigon mawr o gof ac rydym yn jyst yn mynd i wneud hyn yn ailadroddol. Felly Cipolwg cyflym, dyma unig newidyn Rydw i'n mynd â hwy i gadw golwg o gynhwysedd fy byffer. Faint o bytes alla i ffitio? Dyma newidyn n â yr wyf i'n mynd i gadw golwg ar faint o bytes mewn gwirionedd yn y byffer neu fod y defnyddiwr wedi teipio. Os nad ydych chi wedi gweld hyn o'r blaen, i chi Gall bennu bod newidyn fel int heb ei lofnodi, sydd, fel yr awgryma'r enw, yn golygu ei fod yn heb fod yn negyddol, a pham y byddai Rwyf erioed wedi eisiau trafferthu pennu nad yw int yn unig yw int, ond ei fod yn int heb eu llofnodi? Mae'n int heb fod yn negyddol. Beth mae'r [Anghlywadwy] yn ei olygu? GYNULLEIDFA: Mae'n disgrifio swm o gof a all fod yn [Anghlywadwy]. DAVID Malan: Yeah. Felly os wyf yn dweud heb eu harwyddo, mae hyn mewn gwirionedd gan roi un ychydig o gof ychwanegol i chi ac mae'n ymddangos yn fath o wirion, ond os ydych rhaid i un ychydig o gof ychwanegol, bod yn golygu bod gennych ddwywaith cymaint o gwerthoedd y gallwch gynrychioli, oherwydd gall fod yn 0 neu 1. Felly yn ddiofyn, gall fod yn int fras negyddol 2000000000 holl ffordd hyd at bositif 2000000000. Mae'r rheini'n amrywio mawr, ond mae'n dal i fod y math o wastraffus os ydych ond yn poeni am maint, a dim ond yn reddfol Dylai fod yn ddi-negyddol neu cadarnhaol neu 0, yn dda yna, pam yr ydych yn gwastraffu 2000000000 Gwerthoedd posib ar gyfer rhifau negatif os nad ydych yn mynd i eu defnyddio? Felly, drwy ddweud heb eu harwyddo, yn awr fy int gall fod rhwng 0 a thua 4 biliwn a. Felly dyma dim ond int C am resymau ni fyddwn yn mynd i mewn yn unig nawr fel pam ei fod yn int yn lle hynny o torgoch, ond dyma hanfod yr hyn sy'n digwydd ar, a rhai ohonoch allai fod yn ddefnyddio, er enghraifft, y swyddogaeth fgetc hyd yn oed mewn PSet pedwar neu ar ôl hynny, byddwn yn gweld ei eto yn broblem a osodwyd pump, fgetc yn braf oherwydd wrth yr enw math o, math o arcanely yn awgrymu, ei fod yn swyddogaeth sy'n yn cael cymeriad ac felly, beth sy'n sylfaenol wahanol am yr hyn rydym yn ei wneud yn GetString yw nad ydym yn defnyddio scanf yn yr un modd. Rydym yn unig ymlusgol ar hyd cam-wrth-gam dros beth bynnag yw'r defnyddiwr wedi teipio i mewn, oherwydd gallwn bob amser yn dyrannu un torgoch, ac felly y gallwn bob amser yn ddiogel edrych ar un torgoch ar y tro, a y hud yn dechrau digwydd yma. Rydw i'n mynd i sgrolio i lawr i canol y swyddogaeth hon dim ond er mwyn fyr gyflwyno swyddogaeth hon. Yn debyg iawn mae 'na swyddogaeth malloc, mae ' swyddogaeth realloc lle realloc yn gadael i chi ailddyrannu darn o gof a'i wneud yn fwy neu'n llai. Stori Felly byr a hir gyda ton o fy llaw ar gyfer heddiw, gwybod bod yr hyn GetString yn ei wneud yw ei fod yn fath o dyfu hudol neu crebachu y byffer fel y defnyddiwr mathau yn ei linyn. Felly, os y mathau defnyddiwr llinyn byr, cod hwn Dim ond yn dyrannu digon cof i gyd-fynd y llinyn. Os yw'r defnyddiwr yn cadw teipio fel y gwneuthum ei dro ar ôl tro ac unwaith eto, yn dda, os bydd y byffer yn hyn mawr yn y lle cyntaf ac mae'r rhaglen yn sylweddoli, i arhoswch funud, rwy'n allan o le, mae'n mynd i ddyblu maint y byffer ac yna dyblu maint y byffer a'r cod sy'n gwneud yr dyblu, os edrychwn ar ei fan hyn, 'i' dim ond hyn glyfar un-leinin. Efallai nad ydych wedi gweld cystrawen hwn o'r blaen, ond os byddwch yn dweud seren hafal, mae hyn yn yr un peth â gan ddweud amseroedd capasiti 2. Felly 'i jyst yn cadw dyblu cynhwysedd y byffer ac yna dweud wrth realloc i roi ei hun bod llawer mwy o gof. Yn awr, wrth fynd heibio, yno yn swyddogaethau eraill i mewn yma na fyddwn yn edrych i mewn i unrhyw fanylder heblaw i ddangos yn GetInt, rydym yn defnyddio GetString yn GetInt. Rydym yn gwirio nad yw'n null, sydd, galw i gof, yw gwerth arbennig sydd golygu aeth rhywbeth o'i le. Rydym yn allan o gof. Gwell wirio am hynny. Ac rydym yn dychwelyd gwerth sentinel. Ond byddaf yn gohirio i'r sylwadau ynghylch pam ac yna rydym yn defnyddio cefnder hwn o scanf Gelwir sscanf ac mae'n troi allan hynny scanf sscanf, neu linyn, yn gadael i chi gymryd golwg ar y llinell sy'n yw'r defnyddiwr wedi teipio i mewn ac yn gadael i chi dadansoddi ei hanfod, a beth rwy'n wneud yma yw fy mod yn dweud sscanf, dadansoddi beth bynnag fo'r defnyddiwr deipio i mewn a gwneud yn siwr% i, mae yn gyfanrif ynddo, ac ni wnawn mynd i mewn heddiw yn union pam mae hefyd % y c yma, ond yn gryno yn caniatáu ni i ganfod a yw'r defnyddiwr wedi teipio yn rhywbeth ffug ar ôl y rhif. Felly, y rheswm y GetInt a GetString yn dweud wrthych i ailgeisio, ailgeisio, ailgeisio oherwydd yr holl cod hwnnw rydym wedi ysgrifennu, Mae'n fath o edrych ar fewnbwn y defnyddiwr wrth wneud yn siŵr ei fod yn gyfan gwbl rhifol neu ei fod yn fel y bo'r angen gwirioneddol Gwerth pwynt neu debyg, yn dibynnu ar ba werth swyddogaeth rydych yn ei ddefnyddio. Whew. IAWN. Dyna oedd lond ceg ond y pwynt yma yw mai'r rheswm oedd gennym y rhai olwynion hyfforddiant oherwydd ar y lefel isaf, mae dim ond cymaint o bethau sy'n gallu mynd o'i le ein bod eisiau i ymdrin preemptively y pethau hynny yn sicr yn y wythnosau cynharaf y dosbarth, ond yn awr gyda PSet pedwar a PSet bump a y tu hwnt fe welwch ei fod yn fwy hyd chi, ond hefyd yn eich bod yn fwy abl o ddatrys mathau hynny o broblemau eich hun. Unrhyw gwestiynau am GetString neu GetInt? Yeah? GYNULLEIDFA: Pam y byddech yn dyblu cynhwysedd y byffer yn hytrach na dim ond cynyddu iddo gan yr union swm? DAVID Malan: Cwestiwn da. Pam y byddai yn dyblu'r capasiti y byffer yn hytrach na i ddim ond cynyddu ei gan rai gwerth gyson? Roedd yn benderfyniad dylunio. Rydym yn unig yn penderfynu y oherwydd ei fod yn tueddu i fod ychydig yn ddrud amser-ddoeth yn eu gofyn y system weithredu ar gyfer cof, nid wnaethom eisiau i roi diwedd ar i fyny mynd i sefyllfa i linynnau mawr ein bod yn gofyn yr AO eto ac eto ac eto ac eto mewn olyniaeth gyflym ar gyfer cof. Felly, rydym yn unig wedi penderfynu, braidd fympwyol ond gobeithiwn yn rhesymol, hynny, eich bod yn gwybod beth, gadewch i ni ceisio cael y blaen i ni ein hunain a jyst cadw dyblu fel bod rydym yn lleihau faint o weithiau mae'n rhaid i ni alw malloc neu realloc, ond mae cyfanswm barn galwch yn absenoldeb o wybod beth y gallai defnyddwyr eisiau ei deipio. Gallai'r ddau fod ffyrdd gellir dadlau. Gellir dadlau dda. Felly, gadewch i ni edrych ar un neu ddau o sgîl-effeithiau eraill o gof, pethau sy'n gallu mynd o'i le ac offer eich bod yn gallu defnyddio i ddal y mathau hyn o gamgymeriadau. Mae'n troi allan bob un ohonoch, hyd yn oed er Nid yw check50 wedi dweud wrthych gymaint, wedi bod yn ysgrifennu buggy Cod ers wythnos un, hyd yn oed os bydd yr holl brofion check50 yn pasio, a hyd yn oed os ydych chi a'ch TF yn super hyderus bod eich cod gweithio fel y bwriadwyd. Eich cod wedi bod yn bygi neu ddiffygiol yn hynny o bob un ohonoch, wrth ddefnyddio'r llyfrgell CS50, wedi bod yn gollwng cof. Rydych chi wedi bod yn gofyn y system weithredu ar gyfer cof yn y rhan fwyaf o'r rhaglenni eich bod wedi ysgrifennu, ond ydych chi wedi byth yn ei roi yn ôl. Rydych chi wedi Gelwir GetString a GetInt a GetFloat, ond gyda GetString, eich bod wedi byth a elwir yn unGetString neu Rhoi Llinynnol Back neu debyg, ond yr ydym wedi gweld bod GetString yn dyrannu cof trwy gyfrwng malloc neu hyn realloc swyddogaeth, sydd ychydig debyg iawn o ran ysbryd, ac eto, rydym wedi bod gofyn i'r system weithredu ar gyfer cof a chof eto ac eto ond byth yn rhoi yn ôl. Yn awr, wrth fynd heibio, mae'n ymddangos fod pan rhaglen ymddiswyddo, pob un o'r cof yn cael ei rhyddhau yn awtomatig. Felly nid yw'n wedi bod yn fargen enfawr. Nid yw'n mynd i dorri'r IDE neu bethau yn araf i lawr, ond pan rhaglenni yn ei wneud Yn gyffredinol, yn gollwng cof ac maent yn rhedeg am amser hir. Os ydych chi wedi gweld y ychydig yn dwp erioed pêl traeth yn Mac OS neu'r hourglass ar Windows ble mae'n fath o arafu neu feddwl neu feddwl neu dim ond mewn gwirionedd yn dechrau i arafu i gropian, mae'n bosib iawn fod y canlyniad yn gollwng cof. Mae'r rhaglenwyr a ysgrifennodd y feddalwedd rydych yn ei ddefnyddio gofyn y system weithredu ar gyfer cof bob ychydig funudau, bob awr. Ond os ydych yn rhedeg y meddalwedd, hyd yn oed os yw'n lleihau yn eich cyfrifiadur am oriau neu ddyddiau bwygilydd, efallai y byddwch yn gofyn am fwy a mwy o cof a pheidiwch byth mewn gwirionedd yn ei ddefnyddio ac felly gallai eich cod fod, neu Gallai rhaglenni fod yn gollwng cof, ac os byddwch yn dechrau gollwng cof, mae llai o gof ar gyfer rhaglenni eraill, a'r effaith yw arafu popeth lawr. Yn awr, mae hyn yn bell un o y rhaglenni mwyaf erchyll byddwch yn cael cyfleoedd i redeg mewn CS50 i'r graddau fel ei allbwn yn oed yn fwy esoterig na chlang neu wneud neu unrhyw un o'r gorchymyn rhaglenni lein rydym wedi rhedeg o'r blaen ond diolch byth, wreiddio yn ei allbwn rhywfaint o awgrymiadau defnyddiol super sy'n Bydd yn ddefnyddiol naill ai ar gyfer PSet pedwar neu'n sicr PSet bump. Felly valgrind yn offeryn y gellir eu defnyddio i edrych am ollyngiadau cof yn eich rhaglen. Mae'n gymharol syml i'w rhedeg. Rydych yn rhedeg valgrind ac yna, hyd yn oed er ei fod yn ychydig yn amleiriog, dash gwirio gollwng dash hafal llawn, ac yna dot slaes ac enw eich rhaglen. Felly bydd valgrind yna rhedeg eich rhaglen ac ar ddiwedd eich rhaglen rhedeg cyn iddo ymddiswyddo a yn rhoi i chi yn brydlon arall, mae'n mynd i ddadansoddi eich rhaglen tra ei fod yn bod yn rhedeg ac yn dweud wrthych wnaethoch chi yn gollwng unrhyw gof ac yn well hyd yn hyn, wnaethoch chi gyffwrdd cof bod nad oedd yn perthyn i chi? Ni all ddal popeth, ond mae'n 'n bert da yn dal y rhan fwyaf o bethau. Felly dyma enghraifft o fy cael ei redeg rhaglen hon, ar ôl valgrind rhedeg, ar raglen o'r enw cof, ac rwy'n mynd i dynnu sylw at y llinellau sy'n cael eu yn y pen draw o ddiddordeb i ni. Felly mae hyd yn oed mwy o wrthdyniadau fy mod wedi dileu o'r sleidiau. Ond gadewch i ni dim ond yn gweld beth mae hyn yn rhaglen yn gallu ei ddweud wrthym. Mae'n gallu dweud pethau wrthym fel ysgrifennu annilys o faint 4. Mewn geiriau eraill, os ydych yn cyffwrdd cof, yn benodol 4 bytes o gof na ddylai fod gennych, Gall valgrind ddweud wrthych fod. Ysgrifennu annilys o faint 4. Rydych yn cyffwrdd pedwar bytes na ddylai fod gennych. Ble wnaethoch chi hynny? Mae hyn yn harddwch. Cof dot llinell c 21 yw lle rydych yn sgriwio i fyny a dyna pam ei bod yn ddefnyddiol. Mae llawer yn hoffi GDB, gall helpu eich cyfeirio at y gwall gwirioneddol. Yn awr, mae hyn yn un yn ychydig yn fwy amleiriog, os nad yn ddryslyd. 40 bytes mewn 1 bloc yn bendant ar goll yn colli record 1 o 1. Beth yw ystyr hynny? Wel, 'i jyst yn golygu eich gofyn am 40 bytes ac yr ydych byth yn rhoi yn ôl. Rydych elwir malloc neu os ydych o'r enw GetString a'r system weithredu Rhoddodd chi'n 40 bytes, ond dydych chi byth rhyddhau neu eu rhyddhau y cof, ac i fod yn deg, rydym wedi byth yn dangos chi sut i roi cof yn ôl. Troi allan yna super swyddogaeth syml o'r enw rhad ac am ddim. Yn cymryd un ddadl, y peth ydych chi eisiau i ryddhau neu roi yn ôl, ond 40 bytes, mae'n debyg, yn y rhaglen hon wedi cael eu colli yn y llinell 20 o gof dot c. Felly, gadewch i ni weld y rhaglen hon. Mae'n super ddiwerth. Mae'n dangos yn unig gwall penodol hwn. Felly, gadewch i ni edrych. Dyma brif a phrif, rhybudd, galwadau swyddogaeth o'r enw ffurflenni f a'r lle. Felly nid bob un sy'n ddiddorol. Beth mae f yn ei wneud? Hysbysiad Doeddwn i ddim yn trafferthu gyda prototeip. Roeddwn i eisiau cadw'r cod mor minimal ag y bo modd. Felly, yr wyf yn rhoi f uwchben brif a mae hynny'n iawn, yn sicr, ar gyfer rhaglenni byr fel hyn. Felly nid f yn dychwelyd unrhyw beth ac yn gwneud Nid yw cymryd unrhyw beth, ond mae'n gwneud hyn. Mae'n datgan, yn debyg iawn yn yr enghraifft Binky, pwyntydd enw x sy'n mynd i storio y cyfeiriad o int. Felly dyna yr ochr chwith. Yn Saesneg, beth yw'r ochr dde yn ei wneud? Dylai unrhyw un? Beth yw hyn yn ei wneud i ni? Yeah? GYNULLEIDFA: [Anghlywadwy] gwaith maint o int sydd 10 gwaith yn fwy na [Anghlywadwy] DAVID Malan: Da a gadewch i mi crynhoi. Felly dyrannu digon o le ar gyfer 10 o gyfanrifau neu 10, beth yw'r maint o int, 'i' pedwar bytes, felly 10 gwaith 4 40, fel bod ochr dde fy mod i wedi a amlygwyd yn rhoi 40 bytes mi ac storio cyfeiriad y beit cyntaf i mewn i x. Ac yn awr yn olaf, ac dyma lle rhaglen hon yw buggy, beth sydd o'i le ar linell 21 yn seiliedig ar y rhesymeg? Beth sydd o'i le ar llinell 21? Yeah? GYNULLEIDFA: Nid ydych yn gallu mynegai i mewn i x [Anghlywadwy]. DAVID Malan: Yeah. Nid wyf ddylai mynegai i mewn i x fel 'na. Felly syntactically, mae hynny'n iawn. Beth sy'n braf yw, yn debyg iawn i chi Gall trin yr enw amrywiaeth fel pe ei fod yn pwyntydd, yn yr un modd gallwch drin pwyntydd fel pe ei fod yn amrywiaeth, ac felly gallaf syntactically dweud x braced rhywbeth, x braced i, ond mae'r 10 yn broblemus. Pam? GYNULLEIDFA: Oherwydd nad yw'n y tu mewn. DAVID Malan: Nid yw'n tu mewn y darn o gof. Beth yw gwerth mwyaf y dylwn yn rhoi mewn cromfachau sgwâr hynny? 9, 0 drwy 9. Oherwydd sero mynegeio. Felly byddai 0 drwy 9 yn iawn. Nid yw braced 10 yn dda ac ond, yn cofio fodd bynnag, bob tro Yr wyf yn ymddangos i geisio gwneud CS50 IDE damwain trwy deipio mewn gwerthoedd ffug, Nid yw bob amser yn cydweithredu, ac yn wir, yr ydych yn aml cael lwcus dim ond oherwydd y Nid yw system weithredu yn sylwi bod chi erioed mor ychydig yn pasio rhywfaint talp o gof, oherwydd eich bod yn aros o fewn dechnegol eich segment, ond yn fwy ar hynny mewn dosbarth systemau gweithredu, ac felly rhywbeth fel hyn Gallai yn hawdd iawn mynd heb eu canfod. Byth yn eich rhaglen yn mynd i ddamwain yn gyson ond efallai unwaith mewn dro. Ac felly gadewch i ni geisio valgrind ar hyn, ac dyma lle y byddwn yn cael llethu gan y cynnyrch am ennyd. Felly gwnewch cof gwirio gollwng valgrind yn hafal i gof dot slaes llawn. A dyma pam yr wyf yn addo byddai hyn yn llethu. Dyma beth valgrind, dyma beth rhaglennydd, rai blynyddoedd yn ago- penderfynodd y byddai'n syniad da ar gyfer allbwn i edrych fel. Felly, gadewch i ni wneud synnwyr o hyn. Felly yr holl ffordd ar y llaw chwith ochr heb reswm da yw'r broses ID y rhaglen rydym yn unig yn rhedeg, y dynodwr unigryw ar gyfer y rhaglen rydym yn unig yn rhedeg. Rydym yn dileu hynny o y sleid, ond mae rhywfaint o wybodaeth ddefnyddiol yn y fan hyn. Gadewch i sgrolio i fyny at y brig. Dyma lle rydym yn dechrau. Felly nid yw'n gyd bod llawer allbwn. Dyma bod ysgrifennu annilys o faint 4 ar-lein 21. Wel, beth oedd llinell 21? Llinell 21 yn union hyn ac mae'n gwneud synnwyr fy mod yn ddilys ysgrifennu 4 bytes oherwydd fy mod i'n ceisio rhoi cyfanrif hwn, a allai fod yn unrhyw beth, 'i jyst yn digwydd bod yn sero, ond Im 'yn ceisio i'w roi mewn lleoliad nad yw'n perthyn i mi. Ar ben hynny, i lawr yma, 40 bytes mewn un blociau yn cael eu colli yn bendant yng nghofnod 1. Mae hyn oherwydd pan fyddaf yn galw malloc yma, Dwi byth mewn gwirionedd yn rhad ac am ddim y cof. Felly, sut y gallwn atgyweiria hon? Gadewch i mi fynd yn ei flaen a bod yn ychydig yn fwy diogel ac yn gwneud 9 yno a gadewch i mi yma am ddim x. Mae hyn yn y swyddogaeth newydd ar gyfer heddiw. Os byddaf yn awr yn ailgynnal gwneud cof dot slaes, gadewch i ni redeg valgrind arno eto, gwneud y mwyaf fy ffenestri a daro Chofnoda. Yn awr, mae'n dda. Maent yn claddu y newyddion da ym mhob un o'r allbwn hwn. Mae'r holl blociau domen yn rhad ac am ddim. Byddwn yn dod yn ôl at yr hyn y domen yw, ond nid oes unrhyw ollyngiadau yn bosibl. Felly, mae hyn yn unig yw arall arf ar gyfer eich pecyn cymorth gallwch ddechrau ag ef dod o hyd yn awr wallau fel 'na. Ond gadewch i ni weld beth gall mwy o fynd o'i le yma. Gadewch i ni yn awr i bontio mewn gwirionedd yn datrys problem. Fel o'r neilltu, os bydd hyn yn lleddfu yn ychydig o ddryswch neu densiwn, mae hyn yn awr yn ddoniol. Yeah. Dyna 'n bert da. Oherwydd bod awgrymiadau yn cael eu cyfeiriadau a chyfeiriadau yn gyffredinol gan gonfensiwn ysgrifennu gyda hecsadegol. Ha, ha, mae hyn yn ddoniol yn awr. Anyhow, felly gadewch i ni nawr mewn gwirionedd yn datrys problem. Mae hyn wedi bod super, super lefel isel hyd yn hyn, a gallwn ei wneud mewn gwirionedd yn ddefnyddiol pethau gyda manylion lefel isel hyn. Felly, rydym yn cyflwyno ychydig wythnosau yn ôl y syniad o amrywiaeth. Amrywiaeth oedd yn braf oherwydd mae'n anodd i lanhau ein cod oherwydd os ydym yn awyddus i ysgrifennu rhaglen gyda myfyrwyr lluosog neu enwau a thai lluosog a dorms a cholegau a hynny i gyd, gallem storio popeth mwy lân y tu mewn o amrywiaeth. Ond yn cynnig un anfantais o amrywiaeth hyd yn hyn. Hyd yn oed os nad ydych wedi dioddef eich hun mewn rhaglen, dim ond yn reddfol, beth yn beth drwg am amrywiaeth, efallai? Yr wyf yn clywed rhai murmurs. GYNULLEIDFA: Mae'n anodd i newid maint. DAVID Malan: Mae'n anodd i newid maint. Ni allwch newid maint o amrywiaeth, mewn gwirionedd, fel y cyfryw yn C. Gallwch ddyrannu array arall, symud popeth o'r hen un i mewn i'r newydd, ac yn awr cael rhywfaint o le ychwanegol, ond nid yw'n debyg o iaith fel Java neu Python neu unrhyw nifer o eraill ieithoedd y bydd rhai ohonoch allai fod yn gyfarwydd lle rydych yn Gall jyst cadw ychwanegu pethau ad nauseam at ddiwedd arae. Pan fydd gennych amrywiaeth o maint 6, hynny yw ei faint, ac felly yn debyg iawn i'r syniad yn gynharach cael clustogi o faint penodol, rhaid i chi ddyfalu allan o borth pa faint yr ydych am iddo fod? Os byddwch yn dyfalu rhy fawr, rydych yn gwastraffu gofod. Os byddwch yn dyfalu yn rhy fach, yr ydych Ni all storio data hwnnw, o leiaf heb llawer mwy o waith. Felly heddiw, diolch i awgrymiadau, ein gallu dechrau pwytho ynghyd ein hun arfer strwythurau data, ac yn wir, dyma rhywbeth sy'n edrych ychydig yn fwy cryptig ar yr olwg gyntaf, ond mae hyn yn yr hyn y byddwn yn ei alw'n cysylltiedig rhestr, ac mae ei enw math o yn crynhoi iddo. Mae'n rhestr o rifau, neu mewn yr achos hwn, rhestr o rifau, ond gallai fod yn rhestr o unrhyw beth, ond mae'n cysylltu â'i gilydd drwy gyfrwng saethau, a dim ond yn cymryd dyfalu â'r hyn thechneg ydym yn mynd i fod yn gallu i bwytho at ei gilydd, fath o fel popcorn ag edau, yn cysylltu rhestri petryalau yma? Mae ei niferoedd? Beth yw'r nodwedd ieithyddol sylfaenol? GYNULLEIDFA: A pwyntydd. DAVID Malan: A pwyntydd. Felly phob un o'r saethau hyn yma yn cynrychioli pwyntydd neu dim ond gyfeiriad. Felly, mewn geiriau eraill, os ydw i eisiau i storio rhestr o rifau, Ni all Fi jyst ei storio os ydw i eisiau y gallu i dyfu ac yn crebachu fy strwythur data mewn amrywiaeth. Felly mae angen i mi gael ychydig mwy soffistigedig, ond yn sylwi bod hwn darlun fath o awgrymu os ydych wedi jyst got edafedd bach cysylltu popeth gyda'i gilydd, Mae'n debyg nad yw hynny'n anodd i wneud lle mewn rhwng dau petryalau rhai neu ddau o nodau hynny, fel byddwn yn dechrau eu ffonio, rhoi mewn nod newydd, ac yna gyda rhywfaint o edau newydd, dim ond ffos y tri nodau at ei gilydd, yr un cyntaf, yr un diwethaf, ac mae'r un eich bod jyst roi yn y canol. Ac yn wir rhestr cysylltiedig, yn wahanol i amrywiaeth, yn ddeinamig. Gall dyfu ac y gall crebachu ac nid ydych yn ei wneud rhaid i ni wybod neu ofal ymlaen llaw sut llawer o ddata rydych yn mynd i gael ei storio, ond mae'n troi allan mae'n rhaid i ni fod ychydig yn ofalus ynghylch sut i weithredu hyn. Felly, yn gyntaf gadewch i ni ystyried sut yr ydym yn gweithredu un o'r petryalau bychain hyn. Mae'n hawdd i weithredu int. Rydych yn unig yn dweud int n ac yna byddwch yn cael 4 bytes gyfer int, ond sut ydw i'n cael int, ei alw n, ac yna pwyntydd, gadewch i ni ei alw yn nesaf. Gallem yn galw'r rhain pethau unrhyw beth yr ydym am ond mae angen strwythur data arferiad i mi. Yeah? GYNULLEIDFA: ampersand [Anghlywadwy]. DAVID Malan: Felly ampersand byddwn yn eu defnyddio i yn cael y cyfeiriad yn nôd o bosibl. Ond mae angen un arall nodwedd o C er mwyn i roi'r gallu i greu mi petryal arferiad hwn, arfer hon newidyn os mynnwch, yn y cof. GYNULLEIDFA: A struct. DAVID Malan: A struct. Dwyn i gof o wythnos diwethaf, cyflwynwyd struct, mae hyn yn gair allweddol cymharol syml sy'n gadael i ni i wneud pethau fel hyn. Nid oedd C dod gyda data strwythur a elwir myfyrwyr. Mae'n dod â int a arnofio a torgoch a o'r fath, ond nid yw'n dod â myfyrwyr, ond gallwn greu math data myfyrwyr, strwythur myfyrwyr, gyda chystrawen hwn yma. A byddwch yn gweld hyn dro ar ôl tro. Felly peidiwch â phoeni am cofio y geiriau allweddol, ond yr allweddair sy'n bwysig yw dim ond y ffaith ein bod yn dweud struct ac yna byddem ni'n ei alw i fyfyrwyr ac y tu mewn y myfyriwr yn enw a thŷ neu dorm neu debyg. Ac felly yn awr heddiw, gadewch i gynnig hyn. Rydw i wedi ychwanegu ychydig o eiriau, ond os ydw i eisiau i weithredu'r petryal hwn sy'n got y ddau yn int a pwyntydd, eich bod yn gwybod beth, rwy'n mynd i ddatgan struct o'r enw nod. Rwyf hefyd, tu mewn iddo, mynd i ddweud bod nod, petryal hwn, mae gan int a byddwn yn galw ei n ac mae ganddo pwyntydd nesaf. Ac mae hyn yn ychydig yn amleiriog, ond os ydych yn meddwl am y peth, y saethau a oedd yn y llun funud yn ôl o pa fath data? Lle pob un o'r saethau rhai yn pwyntio i ba fath o strwythur data? Dyw hi ddim yn pwyntio yn unig i int fel y cyfryw. Mae'n pwyntio at y beth hirsgwar cyfan a bod y peth petryal, Dywedodd yr ydym, a elwir yn nod. Ac felly rydym yn fath o rhaid i ni recursively diffinio'r hyn y fath bod nod, byddwn yn dweud, Bydd cynnwys int a elwir n ac pwyntydd elwir nesaf ac y math o strwythur data y mae bod pwyntiau pwyntydd yn ôl pob golwg mynd i fod yn nod struct. Felly mae hyn yn annoyingly verbose a dim ond i fod yn bedantig, y rheswm pam na allwn dim ond dweud hyn, a oedd yn dweud y gwir edrych yn llawer mwy darllenadwy, oherwydd dwyn i gof sy'n C darllen pethau top i'r gwaelod, chwith i'r dde. Nid yw'n hyd nes y byddwn yn cael y hanner colon bod y nod gair allweddol mewn gwirionedd yn bodoli. Felly os ydym am gael y math hwn o cyfeirio cylchol tu mewn i'r data strwythur, mae'n rhaid i ni wneud hyn, lle dywedwn nod struct ar y brig, a oedd yn rhoi ffordd hwy o ddisgrifio hyn yn ein beth, yna y tu mewn dywedwn nod struct, ac yna ar y llinell olaf un dywedwn, iawn, C, gyda llaw, dim ond galw hyn damn cyfan beth mae nôd a rhoi'r gorau i gan ddefnyddio'r struct gair allweddol yn gyfan gwbl. Felly mae hyn yn unig fath o cystrawennol tric yn y pen draw yn gadael i ni i greu rhywbeth sy'n edrych yn union fel hyn. Felly, os ydym yn tybio yn awr y gallwn gweithredu'r peth hyn yn C, sut yr ydym yn mewn gwirionedd dechrau croesi hyn? Wel, mewn gwirionedd, i gyd mae'n rhaid i ni ei wneud yw ailadrodd o'r chwith i'r dde, a dim ond math o mewnosod nodau neu ddileu nodau neu chwilio am bethau ble bynnag yr ydym am, ond i wneud hyn, gadewch i ni fynd yn ei flaen ac yn gwneud pethau ychydig yn fwy real gan fod hyn wedi bod lefel isel super hyd yn hyn. A fyddai unrhyw un yn llythrennol hoffi bod yn gyntaf? IAWN. Dewch ar i fyny. Beth yw dy enw? DAVID: David. DAVID Malan: David. Neis i gwrdd â chi. Fi hefyd. Iawn. Ac mae angen nifer 9. Nid cystal â cyntaf, efallai. OK, rhif 9. Mae rhif 17, os gwelwch yn dda. Gadewch i mi fynd yn ôl ychydig ymhellach. Rhif 22, os gwelwch yn dda, a beth am farther yn ôl os gallaf weld unrhyw dwylo gyda'r holl golau neu ddim. Rhywun sy'n cael ei gwirfoddoli iawn yno. Ydych chi eisiau dod i fyny? Mae eich elin yn rymus mynd i fyny. OK, 17. 22. 26 yn dod i lawr. A fyddai unrhyw un arall yn hoffi forcefully-- Dewch i fyny. Mae gwirfoddolwr gwirioneddol. Felly yn gyflym iawn, os chi guys Gallai drefnu eich hunain yn union fel y nodau ar y sgrîn. Diolch. A byddwch yn 26. Mae pob cyflwyniadau iawn ac yn gyflym. Felly, rwy'n David ac rydych hefyd? DAVID: David. DAVID Malan: A ydych chi? JAKE: Jake. SUE: Sue. ALEX: Alex. RAPHAEL: Raphael. TAYLOR: Taylor. DAVID Malan: Taylor. Ardderchog. Felly mae'r rhain yn ein gwirfoddolwyr ar gyfer heddiw ac yn mynd yn ei flaen a symud ychydig y ffordd honno, a dim ond mynd yn ei flaen a chadw dal eich rhifau ag y byddwch yn neu'ch arwydd cyntaf a defnyddio eich llaw chwith, mynd yn ei flaen a dim ond gweithredu saethau hyn, dim ond fel bod eich llaw chwith yn llythrennol pwyntio at ba bynnag dylech dynnu ar, ac yn rhoi rhywfaint o le er mwyn i chi eich hun gallwn weld eich breichiau yn weledol mewn gwirionedd pwyntio, a gallwch dynnu sylw fath o yn y ddaear yn iawn. Felly dyma gennym restr cysylltiedig o un, dau, tri, pedwar, pump nodau i ddechrau, ac yn sylwi ein bod wedi hyn arbennig pwyntydd ar y dechrau pwy yw allweddol oherwydd rhaid inni gadw golwg y rhestr hyd cyfan rhywsut. Mae'r rhain yn guys, hyd yn oed er eu bod yn gadael i'r dde, cefn wrth gefn yn y cof, gallant fod yn unrhyw le mewn gwirionedd er cof y cyfrifiadur. Felly gallai guys rhain fod yn sefyll yn unrhyw le ar y llwyfan ac mae hynny'n iawn, ar yr amod eu bod yn mewn gwirionedd yn pwyntio at ei gilydd, ond i gadw pethau lân ac yn syml, yr ydym chi helpu dim ond eu tynnu o'r chwith i'r dde fel hwn, ond gall fod bylchau enfawr rhwng nodau hynny. Yn awr, os wyf am i fewnosod rhai mewn gwirionedd gwerth newydd, gadewch i ni fynd yn ei flaen ac yn gwneud hyn. Mae gennym gyfle yn awr i ddewis nôd arall. Dweud gadewch i ni ddechrau i ffwrdd gyda mallocing 55. A fyddai rhywun yn meddwl bod malloc? OK, yn dod ar i fyny. Beth yw dy enw? ENFYS: Rainbow. DAVID Malan: Rainbow? Iawn. Malloc Rainbow. Dewch ar i fyny. Felly, yn awr mae'n rhaid i ni ofyn i ni'n hunain algorithmically lle gallwn roi 55. Felly, mae pob un ohonom yn gwybod, yn amlwg, lle mae hi yn ôl pob tebyg yn perthyn os ydym yn ceisio i gadw hyn didoli ac os gallech chi guys gymryd un camu yn ôl, felly nid ydym yn disgyn i ffwrdd y llwyfan, byddai hynny'n wych. Felly mewn gwirionedd, Rainbow, dechrau dros yma gyda mi, oherwydd ein bod fel y cyfrifiadur yn gallu nawr ond yn gweld un newidyn ar y tro. Felly, os yw hyn yn y nod cyntaf. Sylwch nad oedd 'na nod, ei fod dim ond yn pwyntydd, a dyna pam ei fod yn tynnu i fod yn dim ond yr un maint â pwyntydd, nid un o'r petryalau llawn hynny. Felly rydym yn mynd i wirio ym mhob iteriad yn 55 yn llai na 9? Na A yw 55 yn llai na 17? Na Llai na 22? Llai na 26? Llai na 34? Ac felly yn awr, yn amlwg Enfys yn perthyn ar y diwedd. Felly, i fod yn glir, a pha oedd eich enw, Taylor? TAYLOR: Taylor. DAVID Malan: Felly ymysg Taylor llaw chwith a dwylo Rainbow yma, Mae angen y mae ei law i bwyntio ar yr hyn yn orchymyn i fewnosod i mewn i 55 y rhestr hon? Yr hyn sydd angen i ni ei wneud? Yeah? GYNULLEIDFA: llaw Taylor Mae angen i bwynt chwith. DAVID Malan: Yn union. Felly mewnosod nod i mewn i ddiwedd y rhestr yn eithaf syml gan fod Taylor yn unig Mae i bwynt, yn hytrach nag ar y maes neu byddwn yn ei alw'n null, null yn fath o absenoldeb o pwyntydd neu arbennig sero pwyntydd, rydych yn mynd i bwyntio gyda chwith llaw yn Rainbow ac yna Rainbow, lle y dylai y chwith yn ôl pob tebyg llaw bwyntio? Down. Dyw hi ddim yn dda os ei llaw yn didoli o bwyntio oddi yma neu fath o unrhyw pa ffordd. Fyddai'n cael ei ystyried mae gwerth garbage, ond os bydd hi'n cyfeirio at rhywfaint o werth hysbys, rydym chi helpu alw yn sero neu null, mae hynny'n iawn gan fod gennym dymor yn hyn ac rydym yn gwybod y rhestr yn awr yn gyflawn. Felly beth arall achos cymharol syml? A allem malloc 5? Dewch ar i fyny. Beth yw dy enw? Tiffany: Tiffany. DAVID Malan: Mae'n ddrwg gen i? Tiffany: Tiffany. DAVID Malan: Tiffany. Iawn. Tiffany wedi cael ei malloced â'r gwerth 5. Dewch ar i fyny. Mae hyn yn un yn gymharol hawdd hefyd, ond gadewch i ni ystyried trefn y gweithrediadau yn awr. Yr oedd yn eithaf hawdd gyda Taylor ar y diwedd. Rhif 5, wrth gwrs, yn llai na 9, ac felly rydym wedi David, yr ydym wedi Tiffany, a beth oedd eich enw? JAKE: Jake. DAVID Malan: Jake. Tiffany, Jake, a David. Dylid ei law yn cael ei ddiweddaru yn gyntaf? Beth ydych chi eisiau ei wneud yma? Mae cwpl o ffyrdd posibl, ond mae hefyd yn un neu ffyrdd mwy anghywir. GYNULLEIDFA: Dechrau gyda leftmost. DAVID Malan: Dechreuwch gyda'r leftmost. Pwy yw y leftmost yma felly? GYNULLEIDFA: Yn gyntaf. DAVID Malan: Iawn. Felly, yn dechrau gyda cyntaf a ble ydych chi'n am ddiweddaru dwylo Sant i fod? GYNULLEIDFA: Tua 5. DAVID Malan: Iawn. Felly Dafydd, pwynt ar bum neu Tiffany yma, ac yn awr? GYNULLEIDFA: Tiffany yn tynnu sylw at y 9? DAVID Malan: Perffaith, ac eithrio Binky yn pen yn unig fath o syrthio oddi ar, dde? Oherwydd yr hyn sydd o'i le ar y darlun hwn yn llythrennol? GYNULLEIDFA: Nid oes dim yn pwyntio. DAVID Malan: Nid oes dim yn pwyntio at Jake nawr. Rydym wedi amddifad llythrennol 9 a 17, ac rydym wedi llythrennol gollwng i gyd o gof hwn, oherwydd drwy diweddaru llaw Dafydd yn gyntaf, dyna dirwy i'r graddau y mae'n gywir pwyntio at Tiffany yn awr, ond os nad oes neb oedd gan y yn ddigon craff i bwyntio at Jake, hynny rydym wedi colli'r gyfanrwydd y rhestr honno. Felly gadewch i ni ddadwneud. Felly yr oedd yn beth da i baglu drosodd ond gadewch i ni gywiro yn awr. Beth ddylem ei wneud yn gyntaf yn lle hynny? Yeah? GYNULLEIDFA: Dylai Tiffany pwyntio at y 9? DAVID Malan: Nid wyf yn gallu cael y yn agos atoch chi. Pwy ddylai pwyntio at y 9? GYNULLEIDFA: Tiffany. DAVID Malan: pob hawl. Felly dylai Tiffany pwynt cyntaf yn y 9. Felly dylai Tiffany cymryd ar werth union yr un fath i David, sy'n ymddangos yn ddi-waith am eiliad, ond mae hynny'n iawn oherwydd erbyn hyn, yn ail cam, gallwn ddiweddaru llaw Dewi i bwyntio at Tiffany, ac yna os rydym yn unig fath o glanhau pethau i fyny fel er bod hyn yn fath o gwanwyn-fel, Erbyn hyn mae hynny'n gosod yn gywir. Felly ardderchog. Felly nawr rydym yn bron yno. Gadewch i fewnosod un olaf Gwerth fel y gwerth 20. Pe gallem malloc un gwirfoddolwr terfynol? Dewch ar i fyny. Felly, mae hyn yn un ychydig yn fwy anodd. Ond mewn gwirionedd, mae'r cod rydym yn ysgrifennu, er ar lafar, yn unig fel cael criw o os yw amodau yn awr, dde? Cawsom cyflwr gwirio os yw'n perthyn ar y diwedd, efallai y dechrau. Mae angen rhyw fath o ddolen i dod o hyd y fan a'r lle yn y canol. Felly, gadewch i ni wneud hynny gyda beth yw eich enw? ERIC: Eric. DAVID Malan: Eric? Eric. Neis i gwrdd â chi. Felly mae gennym 20. Llai na phump? Na Llai na naw? Na Llai na 17? Na IAWN. Mae'n perthyn yma ac unwaith eto eich enwau yn cael eu? SUE: Sue. DAVID Malan: Sue. ALEX: Alex. DAVID Malan: Sue, Alex, a? ERIC: Eric. DAVID Malan: Eric. Mae angen i gael eu diweddaru yn gyntaf eu dwylo? GYNULLEIDFA: Eric. IAWN. Felly dylai Eric yn pwyntio at ble? Ar 22. Da. Ac yn awr beth nesaf? Yna gall Sue pwyntio at Eric ac yn awr, os ydych yn guys yn unig gwneud rhywfaint o le, sy'n iawn yn weledol, yn awr rydym wedi gwneud gosod. Felly, gadewch i ni yn awr yn ystyried cwestiwn ond diolch yn fawr am ein gwirfoddolwyr. Gwneud yn dda iawn. Gallwch gadw y rhai, os mynnwch. Ac mae gennym anrheg hyfryd rhaniad os byddech yn hoffi pob un gymryd pêl straen. Gadewch imi basio hyn i lawr. Felly beth yw bwyd parod o hyn? Mae hyn yn ymddangos i fod yn anhygoel i'r graddau y gennym yn awr cyflwyno dewis amgen i arae nad yw wedi ei gyfyngu felly i amrywiaeth o ryw faint sefydlog. Maent yn gallu tyfu yn ddeinamig. Ond mae llawer fel yr ydym wedi gweld yn ystod yr wythnosau diwethaf, rydym byth yn cael unrhyw beth am ddim, fel yn sicr mae 'cyfaddawd yma. Felly, gyda upside o cysylltiedig rhestr, yn egni hwn? Mae'r gallu hwn i dyfu a dweud y gwir, gallem fod wedi gwneud dileu a gallem crebachu yn ôl yr angen. Pa bris ydym ni'n talu? Dwywaith cymaint o le, yn gyntaf oll. Os ydych yn edrych ar y darlun, mwyach ydw i storio rhestr o gyfanrifau. Im 'yn storio rhestr o cyfanrifau yn ogystal awgrymiadau. Felly rwy'n dyblu faint o le. Nawr, nid efallai yw hynny'n fath yn beth mawr 4 bytes, 8 bytes, ond gallai fod yn sicr ychwanegu ar gyfer setiau data mawr. Beth yw anfantais arall? Yeah? GYNULLEIDFA: Mae'n rhaid i ni croesi nhw un-wrth-un. DAVID Malan: Yeah. Mae'n rhaid i ni dramwy iddynt un-wrth-un. Rydych yn gwybod beth, rydym yn rhoi'r gorau super hon nodwedd cyfleus o braced sgwâr nodiant, yn fwy priodol a elwir yn hapgyrch, lle y gallwn jyst neidio i elfen unigol ond erbyn hyn os wyf yn dal i gael fy gwirfoddolwyr yma, os oeddwn i eisiau dod o hyd i'r rhif 22, nid wyf yn gallu jyst neidio i'r braced rhywbeth rhywbeth. Rhaid imi edrych dros y rhestr, llawer fel ein enghreifftiau chwilio llinol, i ddod o hyd i'r rhif 22. Felly, rydym yn ymddangos i fod wedi talu pris yno. Ond allwn er hynny datrys problemau eraill. Yn wir, gadewch i mi gyflwyno dim ond cwpl o delweddau. Felly, os ydych wedi bod i lawr i Neuadd Fwyta Mather yn ddiweddar, byddwch yn cofio bod eu pentyrrau o hambyrddau fel hyn, rydym yn benthyg y rhain o Annenberg cyn y dosbarth. Felly pentwr hwn o hambyrddau, fodd bynnag, yn cynrychioli mewn gwirionedd o strwythur data gwyddoniaeth gyfrifiadurol. Mae strwythur data mewn gwyddoniaeth gyfrifiadurol a elwir yn bentwr sy'n iawn 'n glws cynnig ei hun i union hyn gweledol. Felly, os nad pob un o'r hambyrddau hyn yn hambwrdd ond fel nifer ac roeddwn i eisiau i storio rhifau, yr wyf yn Gallai rhoi un i lawr yma, a gallwn i roi un arall i lawr yma, ac yn parhau pentyrru rhifau ar ben ei gilydd, a beth sy'n a allai fod yn ddefnyddiol am hyn yw bod beth yw'r goblygiadau o hyn strwythur data? Pa rif y gallaf tynnu allan cyntaf y rhan fwyaf cyfleus? Y mwyaf diweddar un Rhowch ar yno. Felly, mae hyn yn beth y byddem yn galw i mewn gwyddoniaeth gyfrifiadurol strwythur data LIFO. Olaf i mewn, cyntaf allan. A byddwn yn gweld cyn bo hir pam allai fod yn ddefnyddiol ond am y tro, dim ond yn ystyried yr eiddo. Ac mae'n fath o dwp os ydych yn meddwl am sut y mae'r neuadd fwyta ei wneud. Bob tro y byddant hambyrddau glân a rhowch y rhai mwyaf ffres ar ei ben, gallech gael glân o'r blaen ond yn y diwedd yn fudr ac yn llychlyd iawn hambwrdd ar yr union gwaelod os ydych chi byth mewn gwirionedd fynd at wraidd y stac, oherwydd eich bod newydd cadw rhoi'r newydd ac y rhai glân ar ei ben. Gallai'r un peth yn digwydd mewn archfarchnad hefyd. Os oes gennych achos arddangos o laeth a phob CVS amser neu bwy bynnag yn cael mwy o laeth, 'ch jyst gwthio y llaeth rhaid i gefn yr ydych yn barod ac rydych yn rhoi'r rhai newydd o flaen llaw, rydych yn mynd i gael rhywfaint o 'n bert cas llaeth ar ddiwedd y strwythur data, am ei fod bob amser ar y gwaelod neu cyfwerth ei mae bob amser yn y cefn. Ond mae ffordd arall i feddwl am leinin i fyny data ac er enghraifft, mae hyn yn. Os ydych chi'n un o'r bobl hynny sy'n hoffi i linell i fyny y tu allan i siopau Afal pan fydd cynnyrch newydd allan, mae'n debyg eich bod Nid yw defnyddio data pentwr Strwythur oherwydd eich bod Byddai dieithrio pawb arall sydd leinin i fyny i brynu rhywfaint o degan newydd. Yn hytrach, mae'n debyg eich bod yn defnyddio pa fath o strwythur data neu pa fath o system yn y byd go iawn? Gobeithio ei fod yn llinell, neu'n fwy yn iawn neu fwy Prydeinig-fel, ciw. Ac mae'n troi allan ciw hefyd yn strwythur data mewn gwyddoniaeth gyfrifiadurol, ond ciw Mae iawn eiddo gwahanol. Nid yw'n LIFO. Olaf i mewn, cyntaf allan. Duw yn gwahardd. Mae'n lle hynny FIFO. Cyntaf i mewn, cyntaf allan. A dyna beth da er mwyn tegwch ' yn sicr pan fyddwch chi'n leinin i fyny super gynnar yn y bore. Os byddwch yn cyrraedd yno yn gyntaf, byddwch yn eisiau mynd allan yn gyntaf hefyd. Ac felly yr holl ddata hyn strwythurau, ciwiau a staciau a sypiau o bobl eraill, yn troi allan chi gallu meddwl am hyn fel dim ond arae. Mae hwn yn array, efallai maint penodedig 4, ond mae'n Byddai'n well fod yn fath o braf pe gallem dim ond pentwr hambyrddau bron anfeidrol dal os ydym rhaid bod llawer o hambyrddau neu rifau. Felly efallai rydym am defnyddio rhestr cysylltiedig yma, ond y fasnach-off yn mynd i fod o bosibl bod angen mwy o gof, yn cymryd ychydig mwy o amser, ond rydym yn Nid oes cyfyngu ar uchder y pentwr, yn debyg iawn achos arddangos Mather yn Gallai cyfyngu maint y pentwr, ac felly mae'r rhain yn benderfyniadau dylunio neu opsiynau sydd ar gael i ni yn y pen draw. Felly, gyda data hwn strwythurau, rydym wedi dechrau gweld arffiniau uchaf newydd o bosibl ar yr hyn a oedd yn gyflym super blaen a lle byddwn yn gadael heddiw i ffwrdd a lle byddwn yn gobeithio ei gael i ar ddydd Mercher, yr ydym chi helpu dechrau edrych ar y data strwythur sy'n gadael i ni chwilio trwy ddata mewn log amser gorffen eto. A gwelsom hynny, yn galw i gof, yn wythnos sero ac un gyda chwiliad deuaidd neu rannu a gorchfygu. Mae'n dod yn ôl ac yn well hyd yn hyn, y greal sanctaidd ar gyfer dydd Mercher hwn fydd i feddwl am y strwythur data sy'n rhedeg wirioneddol neu ddamcaniaethol mewn amser yn gyson, lle does dim ots faint o miliynau neu biliynau o bethau gennym yn y strwythur data, bydd yn mynd a ni o amser yn gyson, efallai un cam neu ddau gam neu 10 cam, ond mae niferoedd cyson o gamau i chwilio drwy y strwythur data. Y bydd yn wir yn y greal sanctaidd ond yn fwy ar hynny ar ddydd Mercher. Gweler ya bryd hynny. [CHWARAE CERDDORIAETH]