[CHWARAE CERDDORIAETH]
>> DAVID J. Malan: pob hawl.
Mae hyn yn CS50.
Ac mae hyn yn ddechrau wythnos 5.
Ac fel y efallai y byddwch wedi sylwi, peth o'r deunydd
yn cael ychydig yn fwy cymhleth, mae'r fwy dwys bach.
>> Ac mae'n hawdd iawn, yn enwedig os ydych wedi bod yn yr arfer ers peth amser,
i fod yn ceisio sgriblo i lawr y rhan fwyaf o unrhyw beth ydym yn ei wneud, rydym yn dweud yn y dosbarth.
Ond yn sylweddoli, nid yw hynny o bosibl yr ymagwedd addysgol delfrydol
i ddysgu math hwn o ddeunydd, a deunydd yn fwy cyffredinol.
Ac felly rydym yn falch o cyhoeddi Gheng bod CS50 ei hun
Gong wedi dechrau i baratoi set canonaidd o nodiadau
ar gyfer y cwrs, y gobaith o sef, un, mae'r rhain
nid yn unig yn gweithredu fel cyfeirio ac yn adnodd
gyfer adolygu deunydd a mynd yn ôl drwy ddeunydd a allai gael
dianc i chi y tro cyntaf o gwmpas, ond Hefyd, fel y gall eich pennau fod yn fwy
i fyny nag i lawr, pan fydd yn ddaw amser i ddarlithio,
fel y gallech ymgysylltu fwy feddylgar, fel
hytrach na fwy scribbly.
>> Gyda hynny ddywedodd, beth fe welwch ar y wefan yn dogfennau fel hyn.
A rhybudd, ar top chwith, mae nid yn unig tabl cynnwys,
ond hefyd godau amser y Bydd neidio i chi ar unwaith
i'r rhan briodol yn y fideo ar-lein.
A beth Chang yma wedi'i wneud yw, yn y bôn, dogfennu
hyn a ddigwyddodd yn y darlith arbennig.
Ac mae llawer o'r darlithoedd yn eisoes ar-lein yn awr gyda URL hwn.
A byddwn yn parhau i bostio gweddill o'r rhai hynny erbyn diwedd yr wythnos hon,
felly peidiwch manteisio ar adnodd hwnnw.
>> Felly, heb ado pellach, rydym yn dechrau plicio yn ôl
yr haen sydd wedi bod llinyn ers peth amser.
A beth wnaeth a ddywedwn llinyn mewn gwirionedd yw yr wythnos diwethaf?
Seren Felly torgoch.
A seren torgoch, yn dda, yr hyn oedd hynny'n ei olygu mewn gwirionedd?
Wel, yr holl amser hwn, os byddwn i wedi bod yn galw swyddogaeth,
fel getString, a storio yr elw hyn a elwir yn
gwerth getString mewn variable-- fe'i gelwir
s math string-- rydym wedi bod yn ysgrifennu y llinell o cod i fyny yno uchod.
A dim ond pan fyddaf yn gweld fy llawysgrifen chwyddo yma
ydw i'n sylweddoli pa mor erchyll hyn yn.
>> Fodd bynnag, gadewch i ni gymryd yn ganiataol y, ar yr ochr dde
yw, er hynny, a rhesymol portread o'r hyn sydd
bod yn mynd ar hyn i gyd amser gyda getString.
getString, wrth gwrs, yn cael llinyn.
Ond beth mae hynny'n ei olygu mewn gwirionedd?
Mae'n golygu ei fod yn cael darn o cof gan y system weithredu
drwy ffonio swyddogaeth, a elwir yn malloc.
Ond yn fwy ar hynny yn nes ymlaen.
Ac yna mae'n poblogi'r bod darn o gof
gyda'r llythrennau y defnyddiwr wedi deipio i mewn, ac yna, wrth gwrs,
cymeriad null, neu slaes sero ar y diwedd un.
>> Yn y cyfamser, ar yr ochr chwith o'r stori hon, i gyd y tro hwn,
rydym wedi bod yn datgan newidyn, fel s.
A dyna newidyn yw'r hyn bellach Bydd yn dechrau galw pwyntydd.
Nid yw'n blwch tu mewn lle rydym yn rhoi y llinyn, Daven, fel y cyfryw,
ond yn hytrach yr ydym yn eu rhoi ar y sgwâr blwch ar y chwith beth yn union?
Yeah?
>> CYNULLEIDFA: Gall y cyfeiriad o lle mae'n cael ei leoli yn y cof.
>> DAVID J. Malan: Yn union.
Gall y cyfeiriad o ble Daven wedi ei leoli yn y cof.
Ac nid lle i gyd Daven wedi ei leoli, fel y cyfryw, ond yn benodol y cyfeiriad
o beth?
Yeah?
>> CYNULLEIDFA: cymeriad cyntaf.
>> DAVID J. Malan: Y cymeriad cyntaf yn Daven, sydd, yn yr achos hwn,
Rwy'n arfaethedig yn fympwyol ac yn afrealistig o 1, OX1,
a dim ond yn golygu y rhif hecsadegol o 1.
Ond mae'n fwy na thebyg yn mynd i fod yn nifer llawer mwy
y gallem dynnu gyda 0x o flaen yr enw,
cynrychioli gymeriad hecsadegol.
Ac oherwydd nad oes angen i ni wybod ble gweddill y cymeriadau o Daven
yw, oherwydd yr hyn ddyluniad syml penderfyniad a wnaethpwyd nifer o flynyddoedd yn ôl?
Yeah?
>> CYNULLEIDFA: slaes 0.
DAVID J. Malan: Yeah, yn union.
Mae'r slaes 0 yn caniatáu i chi, er bod hynny mewn amser llinol, eu tramwyo y llinyn,
cerdded o'r chwith i'r dde, gyda gyfer dolen, neu beth amser
dolen, neu rywbeth tebyg hynny, a phenderfynu, oh, dyma
yw diwedd y llinyn penodol.
Felly, gyda dim ond y cyfeiriad yn ddechrau llinyn,
gallwn ni gael gafael ar y cyfan o'r iddo, gan fod yr holl tra yma,
dim ond llinyn wedi bod yn seren torgoch.
>> Felly mae'n sicr yn iawn i barhau i ddefnyddio y llyfrgell CS50 a thynnu dŵr hwn,
fel petai, ond rydym annhymerus dechrau gweld yn union
beth sydd wedi bod yn mynd ymlaen o dan yr holl amser.
Felly efallai y byddwch yn cofio yr enghraifft hon, hefyd, o dro diwethaf, cymharu 0,
sydd nid oedd yn cymharu mewn gwirionedd.
Ond rydym yn dechrau i ddatrys hyn.
>> Ond, fel efallai gloywi, Efallai fy mod ddiddordeb i rywun
mewn eliffant pinc heddiw, hefyd gan Chang?
Beth am i chi o flaen? [Anghlywadwy].
Dewch ar i fyny.
>> Ac yn y cyfamser, wrth i chi ddod i fyny, gadewch i ni
ystyried am ychydig funudau'n beth cod hwn yn ei wneud mewn gwirionedd.
Mae'n datgan dau newidyn i fyny top, s a t, ac yn galw getString.
Nid yw hon yn rhaglen hynod hawdd eu defnyddio, oherwydd nid yw'n dweud wrthych beth i'w wneud.
Ond gadewch i ni gymryd yn ganiataol ein bod yn gan ganolbwyntio ar y rhan llawn sudd.
Ac yna rydym yn ei wneud, os yw ef yn dychwelyd hafal t, dylai ddweud printf,
chi deipio yr un peth.
Helo.
Beth yw eich enw?
>> Janelle: Janelle.
DAVID J. Malan: Janelle, neis i gwrdd â chi.
Felly, eich her yn llaw ar gyfer eliffant hwn
yw tynnu llun o beth sydd i ni yn gyntaf yn cael eu cynrychioli yn y ddau gyntaf
llinellau.
Felly efallai s a t yn cynrychioli sut ar y sgrin?
A allwch chi jyst dynnu 'i ag eich bys ar y sgrin fawr.
>> Felly mae dau hanner i bob ochr yr hafaliad.
Felly does s ar y chwith, a'r Yna getString ar y dde.
Ac yna mae t ar y chwith, ac yna getString ar y dde.
Felly, sut y gallem ddechrau tynnu llun sy'n
cynrychioli'r hyn sy'n digwydd yma mewn cof, fyddech chi'n ei ddweud?
A gadewch i mi adael i chi egluro yr hyn yr ydych chi'n ei wneud wrth i chi fynd.
>> Janelle: OK.
Wel, yn gyntaf, byddai'n cael ei holi i chi i gael y llinyn mewnbwn.
A byddai'n store-- oh, sori.
DAVID J. Malan: Iawn.
Da.
A gelwir hyn yn beth?
O, OK.
Dal i fynd.
Doeddwn i ddim yn ei olygu i dorri ar draws.
Janelle: Mae'n ddrwg gennyf.
Felly byddai'n mewnbwn i mewn Ni o- y cyfeiriad siwr.
Ni allaf gofio'r union nifer, ond yr wyf yn credu ei fod yn dechrau gyda 0.
>> DAVID J. Malan: Dyna i gyd yn iawn, oherwydd fy mod yn gwneud y rhifau i fyny,
felly does dim ateb cywir.
>> Janelle: Gan ddechrau gyda'r 0 arc.
>> DAVID J. Malan: Iawn, felly elfen 0.
Cadarn.
>> Janelle: Ac yna os oedd fel dim ond dwy-letter--
>> DAVID J. Malan: Iawn, yn ôl i chi.
>> Janelle: Felly elfen 0, ac Yna Elfen 1 neu elfen 2.
DAVID J. Malan: A pha ddarn o y darlun yr ydych yn tynnu ar hyn o bryd?
Mae'r alwad i getString?
Neu datgan s?
>> Janelle: Y datganiad o s, yr wyf yn credu.
O, mae'r getString, oherwydd byddai'n cael ei fewnbynnu i mewn i bob [? ardal. ?]
>> DAVID J. Malan: Da.
Yn union.
Er bod hyn yn effeithiol dychwelyd arae, galw i gof,
pan fyddwn yn mynd yn ôl llinyn, gallwn mynegai i mewn i'r llinyn gan ddefnyddio 01 a 2.
Yn dechnegol, mae'r rhain yn ôl pob tebyg cynrychioli gan cyfeiriadau unigol,
ond mae hynny'n iawn.
>> Felly mae'n debyg, os gallaf jyst gyflym ymlaen i lle rydym yn gadael i ffwrdd
tro diwethaf, os bydd un o y tannau oedd e yn b e,
slaes 0, a thrwy hynny yn cynrychioli Gabe yn mewnbwn, sut y gallem gynrychioli s nawr?
Os mai dyma'r cof dyna cael eu dychwelyd gan getString?
>> Janelle: A fyddai'n cynrychioli gan arc?
>> DAVID J. Malan: Gan arc?
Wel, dim.
Gadewch i 'jyst dweud, ar ffurf lluniau, gadewch i mi jyst yn mynd yn ei flaen
ac yn cynnig bod, os yw hyn yn s, mae hyn yw gwerth dychwelyd getString.
A ydych chi wedi tynnu hyn fel 0, 1, 2, a oedd yn yn gwbl resymol, oherwydd ein
gall mynegai i mewn i'r llinyn, fel y cyfryw.
Ond dim ond i fod yn gyson â tro diwethaf, gadewch i mi fynd yn ei flaen
ac yn fympwyol cynnig bod hwn yn gyfeiriad 1, mae hyn yn gyfeiriad 2,
mae hyn yn gyfeiriad 3, ac yn y blaen.
Ac felly, dim ond i fod yn super glir, beth sy'n mynd
i fynd i mewn s o ganlyniad i hynny llinell gyntaf o god, fyddech chi'n ei ddweud?
>> Janelle: Cyfeiriad 1?
>> DAVID J. Malan: Yn union.
Felly, yn mynd i'r afael 0x1.
Ac yn y cyfamser, gadewch i mi fynd yn ei flaen a dyblygu llawer o'r hyn rydych chi wedi'i wneud
ac yn ychwanegu fy t hunain yma.
Pe bawn yn deipio i mewn Gabe unwaith eto, yr ail waith,
wrth gael eu hannog gyda getString, lle, wrth gwrs, yn cael ei Gabe mynd i fynd?
Wel, presumably--
>> Janelle: Fel ar yma?
DAVID J. Malan: Yeah.
Janelle: Neu 'i' hefyd yn yr un blychau?
DAVID J. Malan: Gadewch i mi gynnig, ie, yn union, felly yn y blychau ychwanegol hyn.
Ond yr hyn sy'n allweddol yn awr yw bod, hyd yn oed er fy mod i wedi tynnu hyn yn eithaf agos
together-- 0x1, mae hyn yn 0x2-- mewn gwirionedd,
gallai hyn bellach fod cyfeiriad 0x10, er enghraifft, a 0x11, a 0x12,
ac yn y blaen.
Ac felly, os yw hynny'n wir, beth sy'n mynd i roi diwedd ar i fyny yma yn t?
>> Janelle: 0x10?
DAVID J. Malan: Yn union.
Felly 0x10.
Ac felly yn awr, cwestiwn olaf.
Yr ydych wedi, o bell ffordd, roedd yn rhaid i weithio i'r anoddaf am eliffant hyd yma.
Erbyn hyn, os byddaf yn tynnu i fyny y cod eto, pan wyf yn ei wneud, yn unol tri,
os s hafal hafal t, beth ydw i mewn gwirionedd chymharu yr ydym wedi tynnu yma?
>> Janelle: Y ddau yn mynd i'r afael?
DAVID J. Malan: Yn union.
Felly i ddim yn dweud ei s hafal hafal i t?
Mewn geiriau eraill, yw 1 hafal hafal i 10?
Ac wrth gwrs, mae'r ateb amlwg yn awr yw, dim.
Ac felly y rhaglen hon yn y pen draw yn mynd i argraffu beth, yn eich barn chi?
>> Janelle: A fyddai'n, chi deipio yr un peth?
>> DAVID J. Malan: Felly, os s yw 1 ac t yn 10?
>> Janelle: Rydych yn teipio pethau gwahanol.
>> DAVID J. Malan: Yn union.
Rydych yn teipio pethau gwahanol.
Mae pob hawl.
Felly rownd o gymeradwyaeth, pe gallem, yma.
[Cymeradwyaeth]
Yr oedd hynny'n boenus.
Rwy'n gwybod.
Wneud 'n glws.
Felly nawr gadewch i ni weld os na allwn canfod beth ar wahân y atgyweiria oedd.
Ac wrth gwrs, pan fyddwn yn sefydlog this-- sy'n annhymerus 'nawr yn cynrychioli mewn green--
gwnaethom ychydig o welliannau yma.
Yn gyntaf, yn union fel pwyll gwirio, rwy'n gwirio yn gyntaf
os s hafal i ddi-t hafal null.
A dim ond i fod yn glir, pryd y gallai s neu t fod yn nwl yn y cod fel hyn?
Pryd y gallai ef neu t fod yn nwl.
Yeah?
>> CYNULLEIDFA: [Anghlywadwy].
>> DAVID J. Malan: Yn union.
Os bydd y llinyn bod y defnyddiwr teipio mewn yn ffordd rhy hir
i ffitio i mewn cof, neu ryw achos cornel rhyfedd fel 'na,
getString, fel y byddwn yn gweld, yn llythrennol heddiw, yn ei dogfennaeth,
yn dweud y bydd yn dychwelyd null fel gwerth sentinel arbennig,
neu dim ond fath o symbol arbennig mae hynny'n golygu aeth rhywbeth o'i le.
Felly, rydym am i wirio am hynny, gan ei fod yn troi allan
hynny null yn werth beryglus iawn.
>> Yn aml, os ydych yn ceisio gwneud rhywbeth gyda null cynnwys function-- basio
fel mewnbwn, am instance-- y swyddogaeth honno Efallai y bydd yn iawn yn chwalu ac, ag ef,
cymryd i lawr eich rhaglen gyfan.
Felly, mae hyn drydedd linell yn awr yn unig yw pwyll gwirio, gwirio gwall, os mynnwch.
Dyna arfer da yn awr ar gyfer i ni fynd i mewn unrhyw bryd i ni
ceisiwch ddefnyddio gwerth y mae gallai, o bosibl, fod yn nwl.
>> Yn awr, yn y bedwaredd linell yma, "Os strcmp (s, t)," yn dda,
beth sy'n bod cyfeirio?
Wel, rydym yn dweud hyn yn gryno iawn swyddogaeth a enwir ar gyfer cymharu llinyn.
A'i bwrpas mewn bywyd yw cymharu ei ddadl gyntaf yn ei erbyn yn ail,
ond nid o ran eu cyfeiriadau, fel y gwnaethom yn anfwriadol eiliad
yn ôl â'r cod coch, ond hytrach i gymharu dau rheiny
llinynnau yn y ddynol sythweledol ffordd trwy gymharu'r hyn, erbyn hyn,
yn erbyn hyn, yn erbyn hyn, ac Yna stopio os a pan fydd un
neu'r ddau o fy mysedd taro slaes 0.
Strcmp Felly flynyddoedd rhywun yn ôl ei weithredu i weithredu i ni y swyddogaethau
ein bod yn gobeithio y byddai ein bod wedi gotten at jyst yn cymharu dau werthoedd syml.
>> Nawr dweud y gwir, yr wyf yn cadw gan dynnu pob o wahanol rhifau hyn.
Ond y gwir amdani yw, dwi wedi bod gan wneud y rhain i fyny yr holl amser.
Ac felly gadewch i mi jyst yn mynd yn ei flaen a sgriblo y rhain allan
i wneud pwynt bod, ar y diwedd y dydd ac yn symud ymlaen,
nid ydym yn wir yn mynd i ofalu am beth yn mynd i'r afael pethau mewn gwirionedd
mewn cof.
Felly dydw i ddim yn mynd i dynnu rhain mathau o rifau gymaint anymore,
Im 'jyst yn haniaethol hyn i ffwrdd yn ychydig yn fwy cyfeillgar gyda dim ond saethau.
>> Mewn geiriau eraill, os yw ef yn pwyntydd, yn dda, gadewch i ni dim ond tynnu iddo, yn llythrennol,
fel pwyntydd, saeth yn pwyntio o ei hun i rywbeth arall,
ac â phoeni gormod llawer mwy am y minutia y cyfeiriadau hyn
sydd, unwaith eto, yr wyf yn gwneud i fyny beth bynnag.
Ond byddwn yn gweld cyfeiriadau hynny, weithiau, wrth debugging cod.
>> Yn awr yn y cyfamser, mae'r rhaglen hon atebion i fyny yma, wrth gwrs,
y broblem honno drwy gymharu y ddau llinynnau.
Ond rydym yn rhedeg i mewn i broblem arall.
Roedd hyn oddi wrth y copi rhaglennu tro diwethaf,
lle, yr oeddwn yn ceisio i fanteisio dim ond y nod cyntaf mewn llinyn.
Ond beth oedd y symptom gwelsom tro diwethaf pan
defnyddiwr deipio mewn gwerth, fel Gabe mewn llythrennau bach, ar gyfer s,
Yna, rydym yn neilltuo s i mewn t, fel yn y drydedd linell yno,
ac yna yr wyf yn ceisio i manteisio t braced 0?
Beth oedd effaith y newid t braced 0 yma?
>> CYNULLEIDFA: Newidiodd s.
>> DAVID J. Malan: Yeah, Newidiais s, yn ogystal.
Oherwydd hyn a oedd yn digwydd mewn gwirionedd?
Wel, gadewch i mi weld os gallaf lanhau fyny y darlun hwn, fel a ganlyn.
>> Os yw s yw, unwaith eto, y gair g, a, b, d, slaes, 0, a s
byddwn yn parhau darlunio fel blwch yma, ond dim mwy o gyfeiriadau.
Gadewch i ni roi'r gorau i wneud pethau i fyny.
Gadewch i jyst dynnu llun i symleiddio'r byd.
>> Pan wyf yn datgan t gyda t llinyn, sy'n creu y darn o gof.
Sgwâr yn digwydd bod yn 32 darnau yn y rhan fwyaf o gyfrifiaduron.
Yn wir, os ydych chi wedi clywed erioed am cyfrifiadur yn cael 32-bit pensaernïaeth,
wirioneddol ffansi-siarad, mai dim ond golygu ei fod yn defnyddio cyfeiriadau 32-bit.
Ac fel technegol o'r neilltu, os ydych chi wedi meddwl erioed
pam cyfrifiaduron hŷn, os ydych mewn gwirionedd yn ceisio gawl nhw i fyny gyda llawer o RAM,
Gallai dim ond uchafswm o bedwar gigabeit o RAM,
dda y mae hynny oherwydd, yn llythrennol, Gallai eich hen gyfrifiadur yn unig
cyfrif mor uchel â 4 biliwn, 4000000000 bytes,
oherwydd ei fod yn defnyddio 32-bit niferoedd ar gyfer cyfeiriadau.
>> Ond mewn unrhyw achos, yn hyn o enghraifft, mae stori yn llawer symlach.
t yn unig pwyntydd arall, neu 'n sylweddol yn seren torgoch, aka llinyn.
A sut ydw i am ddiweddaru y llun yn awr gyda hynny ail linell o god,
ar ôl y dot, dot, dot?
Pan fyddaf yn gwneud t s llinyn hafal hanner colon, sut mae hyn darlun yn newid?
Yeah?
>> CYNULLEIDFA: [Anghlywadwy].
>> DAVID J. Malan: Yeah.
Yn union.
Fi jyst rhoi saeth oddi wrth y blwch t i'r un cyfeiriad,
yr un llythyr cyntaf yn rhoi.
Neu yn dechnegol, os yw hyn yn guy yn dal yn y 0x1,
'i' fel pe bawn wedi cael 0x1 0x1 yma ac yma.
Ond unwaith eto, sy'n gofalu am y cyfeiriadau?
Dim ond y syniad bod bellach yn bwysig.
Felly, mae hyn yn beth sy'n digwydd yma.
Felly, wrth gwrs, os ydych yn gwneud t braced 0, sydd yn nodiant array,
o course-- ac yn dweud y gwir, mae'n edrych fel mae 'na amrywiaeth dros yma,
ond yn awr mae hyn yn beth rhyfedd.
Gwybod bod yr iaith raglennu, C, yn cynnig nodwedd hon i chi,
lle, hyd yn oed os t yn pwyntydd, neu s yn pwyntydd,
gallwch barhau i ddefnyddio'r cyfarwydd, braced sgwâr gyfforddus
nodiant i fynd at yr elfen gyntaf, neu yr ail elfen, neu unrhyw elfen
bod y pwyntydd yn pwyntio i, oherwydd, yn ôl pob tebyg, mae'n
yw, fel yn yr achos hwn, bwyntio ar ryw arae.
>> Felly sut rydym yn atgyweiria hon?
A dweud y gwir, dyma lle y mae'n cael ychydig yn llethol ar yr olwg gyntaf.
Ond yma yn fersiwn newydd a gwell.
>> Felly yn gyntaf, fy mod yn cael gwared ar y llyfrgell CS50,
dim ond i ddatgelu ei fod ef yn wir seren torgoch, dim ond cyfystyr.
Ac t yn seren torgoch hefyd.
Ond beth sy'n digwydd ar y ochr dde o'r llinell honno
lle t cael ei neilltuo gwerth?
>> Beth yw malloc?
Yr hyn mae'n strlen?
Beth yw sizeof (torgoch)?
Pam mae'r Heck yn gwneud hyn Llinell edrych mor gymhleth?
Beth sy'n ei wneud ar lefel uchel?
Beth sy'n ei storio mewn t?
Yeah?
CYNULLEIDFA: Mae'n dyrannu rywfaint o le cof.
Mae'n i storio, mae'n debyg, llythyrau [Anghlywadwy].
>> DAVID J. Malan: Perffaith.
Perffaith.
Mae'n dyrannu penodol faint o le cof
i storio, yn ôl pob tebyg, llythyrau yn y dyfodol.
Ac yn benodol, malloc Felly, yn dychwelyd yr hyn?
>> CYNULLEIDFA: Dychwelyd y [Anghlywadwy]?
DAVID J. Malan: Yn union.
Dychwelyd y cyfeiriad y cof, sy'n ffordd ffansi o ddweud,
dychwelyd y cyfeiriad y beit cyntaf y cof.
Mae'r cyfrifoldeb ar mi gofio faint o gof Fi 'n weithredol
ddyrannu neu gofynnwyd malloc am.
>> Nawr, faint yw hynny?
Wel, er bod yna llawer o cromfachau yma,
malloc cymryd ychydig dadl sengl.
A dwi'n sy'n pennu strlen o s, felly rhowch mi cymaint o bytes gan fod yn s,
ond yn ychwanegu un.
Pam?
Yeah?
>> CYNULLEIDFA: Y slaes 0.
DAVID J. Malan: Yn union.
Mae'n rhaid i ni wneud ychydig o cadw tŷ.
Felly, oherwydd mae 'na slaes 0, byddem yn well gofio hynny.
Fel arall, rydym yn mynd i greu llinyn sy'n
Nid oes gan y terminator arbennig.
>> Yn y cyfamser, dim ond i fod yn super rhefrol, yr wyf wedi sizeof (torgoch),
rhag ofn i rywun yn rhedeg fy cod nad ydynt ar y peiriant CS50,
ond efallai cyfrifiadur gwahanol yn gyfan gwbl lle chars
yn un beit, yn ôl confensiwn, ond bod dau bytes, neu rhywbeth mwy na hynny.
Mae'n dim ond i fod yn super, super amharod i wallau.
Hyd yn oed er, mewn gwirionedd, mae'n fwyaf tebygol mynd i fod yn 1.
>> Yn awr, yn y cyfamser, yr wyf yn mynd yn ei flaen a chopi y llinyn, t braced hafal i t braced s.
A byddaf yn gohirio i wythnos ddiwethaf cod ffynhonnell i weld beth sy'n mynd ymlaen.
Ond mae'r prydau parod allweddol, ac mae'r rheswm yr wyf yn rhoi y cod yn awr mewn gwyrdd,
oherwydd bod y llinell olaf un, t braced 0 yn dychwelyd toupper,
cael yr effaith o cyfalafu sy'n llinyn?
t a / neu s?
Bod llinell olaf o god.
>> Dim ond t, oherwydd mae'r hyn sy'n ddigwyddodd y tro hwn,
os byddaf yn ychydig yn dadwneud y cam olaf, hyn sydd wedi digwydd yw, pan fyddaf yn galw malloc,
Rwyf yn y bôn yn cael darn o gof hynny yw yr un maint â'r gwreiddiol,
oherwydd dyna y rhifyddeg i ddim.
Im 'yn storio mewn t y cyfeiriad o'r darn o gof.
Er bod hyn yn edrych yn neis a 'n bert,' n glws ac yn wag,
y realiti yw mae, yr hyn yr ydym annhymerus cadw galw, gwerthoedd garbage i mewn yma.
Gallai fod darn o gof iawn yn dda wedi cael ei ddefnyddio o'r blaen,
ychydig eiliadau, ychydig funudau'n ôl.
Felly, gallai fod yn hollol niferoedd neu lythyrau yno, dim ond drwy ddamwain.
Ond nid ydynt yn ddilys, nes i mi fy hun boblogi darn hwn o gof
gyda chars gwirioneddol, gan fy mod yn ei wneud yn hynny ar gyfer ddolen yno.
Mae pob hawl?
>> Felly nawr, uchafbwynt y tair enghraifft
a oedd yn ôl pob golwg yn torri tro diwethaf, Swap yr enghraifft hon, y swyddogaeth hon
gweithio yn yr ystyr ei fod yn cyfnewid a a b.
Ond nid oedd yn gweithio yn yr hyn ystyr arall?
Yeah?
>> CYNULLEIDFA: [Anghlywadwy].
>> DAVID J. Malan: Yn union.
Pe bawn i alw swyddogaeth hon rhag another-- er enghraifft,
o swyddogaeth fel prif, lle Mae gen i newidyn, x ac y, gan fy mod yn
wnaeth yr wythnos diwethaf, un cod, ac yr wyf yn pasio yn x ac y
i Cyfnewid, ac yna galw Swap-- hwn, wrth gwrs, yw'r fersiwn cywir
hyn yr ydym chi ar fin i see-- nid oedd yn gweithio.
Felly beth yw'r ateb?
>> Wel, felly dim ond i fod glir, gadewch i mi fynd yn ei flaen
ac-- rhoi un i mi ail fan hyn, a gweld os gallaf ddangos yr un olaf, i chi pa
fydd in-- gadewch i ni weld os gallaf ddod o hyd i OK hwn fast-- go iawn, [Anghlywadwy].
OK, yno y mae.
Felly anwybyddu'r gorchmynion Im 'jyst yn teipio.
Yr wyf am iddo i adfer yn y funud olaf yn enghraifft
ers y tro diwethaf, a oedd yn elwir bellach yn dim Swap.
>> Felly nid oes Swap yw lle rydym yn chwith oddi ar y tro diwethaf,
lle, yr wyf yn ymgychwyn x i 1 ac y i 2.
Yna, yr wyf yn galw Swap, pasio mewn 1 a 2.
Ac yna swyddogaeth hon gweithio mewn rhyw ystyr,
ond nid oedd ganddo barhaol effaith ar x ac y.
Felly, y cwestiwn dan sylw yw, pa mor bellach ydym mewn gwirionedd yn atgyweiria hon broblem?
Beth yw'r ateb wrth law?
>> Wel, mewn swap.c, sydd yn newydd heddiw, sylwi ar ychydig o wahaniaethau.
x ac y yn yr un fath.
Ond yr hyn sy'n amlwg yn wahanol am llinell 25?
Beth sy'n newydd yno, os ydych yn cofio hyn y mae'n edrych fel ail yn ôl?
>> CYNULLEIDFA: [Anghlywadwy].
>> DAVID J. Malan: Yeah.
Felly mae'r ampersands yw'r darn newydd cystrawen, nid yn unig yn y rhaglen hon,
ond hefyd yn fwy cyffredinol yn CS50.
Hyd yn hyn, nid wyf yn credu rydym wedi gweld unrhyw enghreifftiau
neu'n wir yn siarad amdanynt mewn unrhyw manylder, ac eithrio, efallai, preemptively
yn adran, mae ampersand fel hyn.
Wel, mae'n troi allan ampersand yn un o'r darnau olaf o gystrawen newydd
rydyn ni'n mynd i ddysgu.
Y cyfan y mae'n ei olygu yw y cyfeiriad o ryw newidyn.
Ar ba gyfeiriad mae x yn byw?
Ond beth gyfeiriad yn y byw?
Oherwydd os yw'r broblem sylfaenol cyn
bod x ac y yn cael eu pasio fel copïau, yr hyn yr ydym wir eisiau ei wneud
yn rhoi Swap gyda fel trysor map sy'n arwain at ble x ac y mewn gwirionedd
mewn RAM, fel bod Gall cyfnewid ddilyn y map
ac yn mynd i ble bynnag x neu y yn nodi'r fan a newid y gwerthoedd gwirioneddol 1 a 2
yno.
>> Felly mae angen Swap i newid ychydig hefyd.
Ac ar yr olwg gyntaf, gallai hyn ymddangos ychydig yn debyg i seren torgoch.
Ac yn wir y mae.
Felly mae rhoi syniad inni am pa fath o ddata, yn seiliedig ar y gyfran a amlygwyd?
Felly, ei fod yn int.
>> Felly, bellach yn yn int, 'i' y cyfeiriad o int.
Ac yn yr un modd, b yn awr yn mynd i fod yn y cyfeiriad o int.
Felly pan wyf yn awr yn galw Swap o Main, Dydw i ddim yn mynd i roi Cyfnewid 1 a 2.
Rydw i'n mynd i roi ei fod fel Ych-rhywbeth ac ych-rhywbeth,
ddau gyfeiriad a fydd yn arwain Swap at eu lleoliadau gwirioneddol
er cof am fy cyfrifiadur.
>> Felly nawr, mae fy rhoi ar waith ar ôl angen ei newid braidd.
Beth sy'n amlwg yn wahanol yn awr yn y tair llinell o god?
Mae sêr damn hyn i gyd dros y lle, i gyd yn iawn?
Felly beth sy'n mynd ymlaen fan hyn?
Yeah?
>> CYNULLEIDFA: Mae'n amlwg [Anghlywadwy].
>> DAVID J. Malan: Yn union.
Felly, yn context-- hwn ac nad oedd hyn yn y penderfyniad dyluniad gorau, rhaid cyfaddef,
flynyddoedd yn ôl.
Yn y cyd-destun hwn, lle os oes gen ti seren,
ac nad oes gennych fath ddata, fel int, yn union i'r chwith,
yn lle hynny gennych arwydd cyfartal, yn amlwg, yn y cyd-destun hwn, pan ddywedwch seren a,
mae hynny'n golygu mynd i'r cyfeiriad sy'n sy 'mewn.
Dilynwch y map trysor, fel petai.
>> Ac yn y cyfamser, yn unol 37, mae'n golygu yr un peth.
Ewch at y cyfeiriad a, ac yn rhoi beth yno?
Beth bynnag sydd yn y lleoliad sy'n b pennu.
Mewn geiriau eraill, ewch i b.
Cael y gwerth.
Ewch i ac, fesul y gyfartal llofnodi, mae'r gweithredwr aseiniad,
rhoi gwerth hwnnw yno.
>> Yn yr un modd, int dro yn unig yw int.
Mae angen dim i newid am dro.
Mae'n dim ond gwydr sbâr o Annenberg am ychydig o laeth neu sudd oren.
Ond mae angen i mi ddweud, ewch i b.
Ewch at y gyrchfan a rhoi'r gwerth mewn tymheredd yno.
Felly beth sy'n digwydd wedyn?
Pan Fi 'n weithredol yn galw Cyfnewid y tro hwn, os hwn hambwrdd cyntaf yma yn cynrychioli Main,
yr ail hambwrdd yn cynrychioli Swap, pan Rwy'n pasio ampersand x a ampersand y
o Main i Cyfnewid, dim ond i fod yn glir, beth yw pentwr hwn yn derbyn ffrâm?
Yeah?
>> CYNULLEIDFA: [Anghlywadwy].
DAVID J. Malan: Yn union.
Gall y cyfeiriad o x a chyfeiriad y.
A allwch chi feddwl am hyn fel cyfeiriadau post.
33 Oxford Street a 35 Stryd Rhydychen, ac rydych
eisiau symud y ddau adeilad sydd yn y mannau hynny.
>> Mae'n fath o syniad chwerthinllyd, ond dyna i gyd yr ydym yn ei olygu wrth gyfeiriad.
Ble yn y byd y gall chi ddod o hyd y ddau ints?
Ble yn y byd y gallwch chi dod o hyd rhai ddau adeilad?
Felly, os yn olaf, ar ôl hyn i gyd tro rwy'n mynd i mewn i cod ffynhonnell heddiw ac yn llunio
Swap a rhedeg ./swap, yn olaf, ar gyfer y tro cyntaf yr ydym mewn gwirionedd yn gweld bod
fy gwerthoedd yn cael wir wedi cyfnewid yn llwyddiannus.
Ac yn awr, gallwn hyd yn oed gymryd nodi hyn yn, dyweder, gdb.
>> Felly, gadewch i mi fynd i mewn i'r un ffeil.
Gadewch i mi fynd yn ei flaen ac yn rhedeg gdb o ./swap.
Ac yn awr, yn Swap, dw i'n mynd i fynd ymlaen a gosod pwynt torri yn y Prif.
Ac yn awr yr wyf i'n mynd i fynd yn ei flaen ac yn rhedeg y rhaglen.
Ac yn awr rydym yn gweld fy cod seibio ar y llinell.
>> Os byddaf yn mynd yn ei flaen ac argraffu x, beth ddylwn i ei weld yma?
Mae'n gwestiwn.
Dweud eto?
>> CYNULLEIDFA: [Anghlywadwy].
>> DAVID J. Malan: Felly rhifau ar hap, efallai.
Efallai i mi gael lwcus, ac mae'n 'n glws a syml, fel 0.
Ond efallai ei fod yn rhywfaint rhif ar hap.
Yn yr achos hwn, yr wyf yn got 'n ffodus.
'I jyst yn digwydd bod yn 0.
Ond mae'n wir lwc, oherwydd nid nes i mi
teipiwch nesaf ac yna argraffu x wedi bod llinell o god, llinell 19, ei ddienyddio.
>> Yn y cyfamser, os wyf deipio nesaf eto, ac Bellach argraffu y, yr wyf i'n mynd i weld 2.
Yn awr, os wyf deipio nesaf, mae'n mynd i cael ychydig yn ddryslyd, oherwydd erbyn hyn,
mae'r printf yn mynd i ymddangos ar y sgrin, fel y gwnaeth. x yw 1.
>> Gadewch i ni wneud hyn eto.
Ac yn awr, dyma lle pethau'n mynd yn ddiddorol.
Cyn imi alw Swap neu hyd yn oed cam i mewn iddo, gadewch i ni gymryd ychydig o peek.
x yw, unwaith eto, 1.
Y mae, wrth gwrs, bwyll cyflym gwirio, 2, felly nid galed yno.
Ond beth yw ampersand x?
Ateb, mae'n edrych yn fath o ffynci.
Ond mae'r seren int mewn cromfachau yn unig CMC ffordd o ddweud hyn yn gyfeiriad.
Mae'n nid yn int, mae'n pwyntydd i int, neu a elwir fel arall fel cyfeiriad.
>> Beth yw y peth crazy?
Nid ydym erioed wedi gweld rhywbeth eithaf fel 'na o'r blaen.
Felly mae hwn yn y cyfeiriad yn fy cyfrifiadur cof am lle mae x yn digwydd i fyw.
Mae'n Ox-rhywbeth.
Ac mae hyn yw, dweud y gwir, pam Rydw i wedi dechrau tynnu saethau,
yn hytrach na rhifau, oherwydd pwy yn poeni amdanynt
bod eich int ar manylyn cyfeiriad dyna bod fawr.
Ond bffff0c4, mae'r rhain i gyd yn yn wir digid hecsadegol,
sydd yn 0 trwy f.
>> Felly, nid ydym yn mynd i drigo yn rhy hir ar yr hyn y pethau hynny.
Ond os wyf yn argraffu allan y, wrth gwrs, yr wyf yn gweld 2.
Ond ampersand y, yr wyf yn gweld y cyfeiriad hwn.
A rhybudd, ar gyfer y chwilfrydig, pa mor bell ar wahân yn x ac y?
Gallwch anwybyddu y rhan fwyaf o'r cyfeiriad.
Pedwar bytes.
Ac mae hynny'n gyson â'n gynharach honni bod pa mor fawr yw int?
Pedwar bytes.
Felly mae'n edrych fel popeth yn leinin i fyny 'n glws, fel y byddech yn gobeithio, yn y cof.
>> Felly nawr, gadewch i ni dim ond yn gyflym ymlaen at ddiwedd y stori hon.
Gadewch i ni fynd yn ei flaen a theipiwch gam, i blymio i mewn i'r swyddogaeth Swap.
Yn awr yn sylwi, os wyf deipio, mae'n union yr un fath y cyfeiriad o x.
Os byddaf deipio b, mae'n union yr un fath i gyfeiriad y.
Felly, beth ddylwn i weld os wyf dweud, ewch i'r cyfeiriad a?
Felly argraffu seren a.
Felly mae seren yn golygu mynd yno, yn y cyd-destun hwn.
Ampersand yn golygu beth yw'r cyfeiriad.
Felly seren ffordd 1.
A seren print b yn rhoi i mi 2.
>> A gadewch i mi gymryd yn ganiataol, am y tro, bod o leiaf y cod sy'n
mynd yn ei flaen i weithredu nawr yn gallu bod yn rhesymegol drwy'r yn y ffordd honno.
Ond byddwn yn edrych eto ar y syniad hwn cyn bo hir.
Felly, y fersiwn hwn o'r Swap yn awr yn gywir ac yn caniatáu
ni i gyfnewid y math data penodol.
>> Felly unrhyw gwestiynau yna ar Swap?
Ar seren?
Ar gyfeiriad o?
A byddwch yn gweld, gyda problem yn gosod 4, math o,
ond mae problem yn gosod 5, yn bendant, sut mae'r rhain yn pethau yn ddefnyddiol ac yn cael llawer mwy
gyfforddus gyda nhw, o ganlyniad.
Unrhyw beth o gwbl?
Mae pob hawl.
Felly malloc yw, unwaith eto, y swyddogaeth hon mai dim ond yn dyrannu cof, cof
dyraniad.
A pham mae hyn yn ddefnyddiol?
Wel, i gyd y tro hwn, ydych wedi bod yn defnyddio malloc.
Os ydych yn ystyried yn awr sut y getString gwaith, yn ôl pob tebyg, mae'n
bod yn gofyn i rywun ar gyfer darn o cof, unrhyw bryd y mathau ddefnyddiwr llinyn
mewn, gan ein bod yn sicr Nid oedd yn gwybod, gan fod staff CS50,
sut y llinynnau y rhai mawr sy'n bodau dynol yn mynd i deipio y gallai fod.
>> Felly gadewch i ni, am y tro cyntaf, yn dechrau croen yn ôl sut mae'r llyfrgell CS50,
drwy un neu ddau o enghreifftiau fydd yn ein arwain yno.
Felly os wyf yn agor i fyny gedit ac agor scanf 0,
rydyn ni'n mynd i weld y cod canlynol.
Scanf 0, sydd ar gael ar y wefan ar gyfer heddiw, mae gan nifer gymharol fach o linellau o god
yma, 14 drwy 20.
A gadewch i ni weld beth y mae'n ei wneud.
Mae'n datgan yn int, a elwir yn x.
Mae'n dweud rhywbeth fel, rhif os gwelwch yn dda.
Ac yn awr mae'n dweud, scanf% i, & x.
Felly mae 'na griw o bethau newydd yno.
>> Ond scanf, gallwch fath o feddwl o fel y gwrthwyneb i printf.
printf, wrth gwrs, printiau i'r sgrin.
math scanf o sganiau gan y defnyddiwr bysellfwrdd rhywbeth y mae ef neu hi wedi teipio.
>> % Fi yn union fel printf.
Mae hyn yn golygu bod disgwyl i'r defnyddiwr i deipio yn int.
Ac yn awr, pam yr ydych yn credu fy mod allai fod yn pasio scanf & x?
Os bydd y pwrpas mewn bywyd o scanf yw cael rhywbeth gan y defnyddiwr,
beth yw ystyr drosglwyddo, ac x, nawr?
Yeah?
>> CYNULLEIDFA: [Anghlywadwy].
DAVID J. Malan: Yn union.
Beth bynnag yr wyf, y dynol, deipio i mewn, fy mewnbwn yn mynd i gael eu hachub yn y lleoliad hwnnw.
Dyw hi ddim yn ddigon, yn galw i gof, i ddim ond pasio yn x, oherwydd ein bod wedi gweld yn barod,
unrhyw tro y byddwch yn pasio yn unig newidyn amrwd, fel int, i ryw swyddogaeth arall,
yn sicr, gall newid y amrywiol, ond nid yn barhaol.
Ni all effeithio ar Main.
Gall Dim ond newid ei gopi lleol eu hunain.
Ond os, yn lle hynny, i chi beidio ei wneud rhoi'r int gwirioneddol i mi,
ond byddwch yn rhoi cyfarwyddiadau i mi hynny int, yr wyf yn awr, sef scanf,
sicr, gallaf ddilyn y mynd i'r afael a rhoi nifer yno
er mwyn i chi cael mynediad ato hefyd.
>> Felly, pan fyddaf yn rhedeg y rhaglen hon, gadewch i ni weld.
Gwneud scanf 0 dot slaes, scanf 0.
Ac os wyf yn awr teipiwch nifer fel 50, diolch am y 50.
Os wyf yn awr teipiwch nifer tebyg negyddol 1, ar gyfer y negyddol 1.
Yr wyf yn awr teipio nifer fel 1.5, hm.
Pam oedd fy rhaglen yn anwybyddu fi?
Wel, oherwydd yn syml, yr wyf yn dweud iddo i ddisgwyl int yn unig.
Mae pob hawl.
Felly dyna un fersiwn o hyn.
Gadewch i ni gymryd pethau i fyny hollt a Cynigiwn na hyn yn dda.
Ac yma yn gorwedd enghraifft syml iawn o sut y gallwn ddechrau ysgrifennu cod
y gall pobl eraill fanteisio neu cyfaddawdu trwy wneud pethau drwg.
Felly llinell 16, mor debyg mewn ysbryd i o'r blaen,
ond dydw i ddim yn datgan ei fod int y tro hwn.
Im 'yn datgan ei seren torgoch, aka llinyn.
>> Ond beth mae hynny'n ei olygu mewn gwirionedd?
Felly, os na fyddaf yn pennu address-- a Im 'yn galw ei fod fympwyol, byffer,
ond gallwn i alw mae'n s, i fod yn simple-- ac yna yr wyf yn gwneud hyn, yn esbonio i mi,
os gallech, yn seiliedig ar y flaenorol rhesymeg, yr hyn sy'n ei wneud scanf yn unol 18,
os pasio% s a byffer, sydd yn gyfeiriad?
Beth yw scanf, os byddwch yn gwneud cais i'r un rhesymeg union fel fersiwn 0,
mynd i geisio wneud yma, pan y mathau o ddefnyddwyr rhywbeth yn?
Yeah?
>> CYNULLEIDFA: [Anghlywadwy].
>> DAVID J. Malan: Yn union.
Scanf, gan y rhesymeg yn gynharach, yn mynd i gymryd y llinyn
bod y teipio dynol in-- ei fod bellach yn llinyn,
nid yw'n rhif, yn ôl pob tebyg, os yw ef neu hi cooperates--
ac mae'n mynd i geisio rhoi hynny llinyn mewn cof ar ba bynnag gyfeiriad
byffer yn nodi.
Ac mae hyn yn wych, oherwydd byffer yn wir yn golygu i fod yn gyfeiriad.
>> Ond yr wyf yn honni y rhaglen hon yn bygi mewn ffordd ddifrifol iawn, oherwydd yr hyn werth yn
byffer yn ddiofyn?
Yr hyn yr wyf wedi ymgychwyn i mewn?
Pa darn o gof?
Nid gen i, iawn?
>> Felly hyd yn oed er fy mod i wedi dyrannu seren torgoch bellach sy'n cael ei alw s,
yn lle hynny fe'i gelwir, buffer-- felly gadewch i ni tynnu enw'r newidyn yn
nawr fel buffer-- os nad wyf wedi Gelwir getString neu malloc yma,
mae hynny'n golygu bod yn effeithiol byffer yn unig rhywfaint o werth garbage.
>> Nawr beth mae hynny'n ei olygu?
Mae'n golygu fy mod wedi dweud wrth scanf i ddisgwyl llinyn gan y defnyddiwr.
A ydych yn gwybod beth?
Beth bynnag y peth hyn yn pwyntio canlynol-- ac yr wyf yn tynnu marc cwestiwn,
ond mewn gwirionedd, mae'n mynd i fod yn rhywbeth fel OX1, 2, 3, dde?
Mae'n rhywfaint o werth ffug mai dim ond digwydd bod yno o'r blaen.
Felly, mewn geiriau eraill, mae'n fel pe byffer yn unig
pwyntio at rywbeth yn y cof.
Nid oes gennyf unrhyw syniad beth.
>> Felly, os wyf yn teipio Gabe nawr, mae'n mynd i geisio rhoi g-a-b-e / 0 yno.
Ond pwy a ŵyr beth yw hynny?
Ac yn y gorffennol, unrhyw amser rydym wedi ceisio cyffwrdd
cof nad yw'n perthyn i ni, beth sydd wedi digwydd?
Neu bron bob tro.
Fai segmentu, dde?
>> Mae'r saeth, nid oes gennyf syniad lle mae'n pwyntio. dim ond rhywfaint o werth ar hap.
Ac wrth gwrs, os ydych yn dehongli gwerth ar hap fel cyfeiriad,
ydych yn mynd i fynd i rhywfaint cyrchfan hap.
Felly gallai Gabe yn wir damwain fy rhaglen yn yr achos yma.
>> Felly, beth allwn ni wneud hynny bron mor ddrwg?
Ystyriwch hyn drydedd a'r Enghraifft terfynol o scanf.
Mae'r fersiwn hwn yn well yn mha ystyr?
Os ydych yn gyfforddus gyda'r broblem blaenorol, mae hyn yn well.
Pam?
>> CYNULLEIDFA: [Anghlywadwy].
DAVID J. Malan: Da.
Felly yr achos o llinell 16 yn well, yn yr ystyr
ein bod yn benodol dyrannu rhywfaint o cof.
Nid ydym yn defnyddio malloc, rydym yn defnyddio'r wythnos 2
ymagwedd o ddim ond datgan arae.
Ac rydym wedi dweud o'r blaen llinyn yn unig yw amrywiaeth o gymeriadau,
felly mae hyn yn gwbl gyfreithlon.
Ond mae'n, wrth gwrs, fel y yr ydych yn nodi, maint sefydlog, 16.
>> Felly, mae'r rhaglen hon yn gwbl ddiogel, os wyf yn fath
mewn llinynnau un cymeriad, dau gymeriad llinynnau, 15 llinynnau cymeriad.
Ond cyn gynted ag yr wyf yn dechrau teipio 16, 17, 18, 1,000 llinynnau cymeriad,
os yw y llinyn yn mynd i roi diwedd ar i fyny?
Mae'n mynd i roi diwedd ar i fyny yn rhannol yma.
Ond yna pwy a ŵyr beth arall y tu hwnt i ffiniau
o'r amrywiaeth penodol?
>> Mae'n fel pe bawn i wedi Datganodd 16 o flychau yma.
Felly, yn hytrach na tynnu allan yr holl 16, rydym annhymerus dim ond esgus fy mod wedi tynnu 16.
Ond os byddaf wedyn yn ceisio darllen llinyn mae hynny'n llawer mwy o amser, fel 50 cymeriadau,
Dwi'n mynd i ddechrau rhoi a, b, c, d, x, y, z.
Ac mae hyn yn ôl pob tebyg rhyw segment cof eraill
hynny, unwaith eto, a allai achosi fy rhaglen i ddamwain,
oherwydd nid wyf wedi gofyn am unrhyw beth yn fwy na dim ond 16 o bytes.
>> Felly, sy'n gofalu?
Wel, dyma y llyfrgell CS50.
Ac yn y rhan fwyaf o hyn yn unig yw fel cyfarwyddiadau i fyny top.
Mae'r llyfrgell CS50, i gyd y tro hwn, wedi cael y llinell hon yn llinell 52.
Rydym wedi gweld typedef, neu byddwch yn gweld typedef
yn pset 4, a dim ond yn creu synonym lle gall seren torgoch fod yn fwy
y cyfeirir atynt yn syml fel llinyn.
Felly, mae hyn yn un o'r ychydig o olwynion hyfforddiant
rydym wedi defnyddio gyfrinachol o dan y cwfl.
>> Yn y cyfamser, dyma y swyddogaeth, getchar.
Yn awr mae'n debyg, does dim corff iddo.
Ac yn wir, os wyf yn cadw sgrolio, nid wyf yn ei wneud mewn gwirionedd
gweld unrhyw gweithrediadau o'r swyddogaethau hyn.
Fel gwiriad pwyll, pam hynny?
>> CYNULLEIDFA: [Anghlywadwy].
DAVID J. Malan: Yeah.
Felly mae hwn yn y ffeil flaen.
A ffeiliau header cynnwys prototeipiau, yn ogystal â rhai pethau eraill, mae'n ymddangos,
fel typedefs.
Ond yn CS50.c, lle rydym wedi byth yn rhoi i chi yn llwyr,
ond mae wedi bod yn y peiriant CS50 gyd y tro hwn, yn ddwfn y tu mewn ei ffolderi,
sylwi fod yna cyfan criw o swyddogaethau i mewn yma.
>> Yn wir, gadewch i sgrolio i lawr.
Gadewch i anwybyddu y rhan fwyaf ohonyn nhw, am y tro.
Ond sgroliwch i lawr i getInt a gweld sut mae getInt gweithio.
Felly dyma yw getInt.
Ac os ydych chi erioed mewn gwirionedd yn gofalu sut gael int yn gweithio, dyma yw ei ddogfennaeth.
Ac ymhlith y pethau mae'n dweud ei fod yn dweud wrthych
yr hyn y mae'r ystodau o werthoedd y gall ddychwelyd.
Mae'n hanfodol negyddol 2000000000 i cadarnhaol 2 biliwn, rhoi neu gymryd.
>> Ac mae'n troi allan, mae hyn i gyd amser, er ein bod erioed wedi
Roedd chi wirio ar ei gyfer, os bydd rhywbeth yn mynd o'i le,
mae'n troi allan bod yr holl y tro hwn, getInt wedi
bod yn dychwelyd arbennig gyson, nid yn null,
ond yn hytrach int_max, sydd yn confensiwn yn unig rhaglennydd yn.
Mae'n golygu dyma werth arbennig.
Gwnewch yn siwr i wirio ar gyfer hyn, dim ond rhag ofn i rywbeth fynd o'i le.
Ond nid ydym erioed wedi trafferthu â hynny hyd yn hyn,
oherwydd eto, mae hyn yn i fod i symleiddio.
>> Ond sut mae getInt cael eu gweithredu?
Wel, un, mae'n cymryd unrhyw ddadleuon.
Rydym yn gwybod hynny.
Mae'n dychwelyd yn int.
Rydym yn gwybod hynny.
Felly, sut mae hyn yn gweithio o dan y cwfl?
>> Felly mae pob golwg yn ddiddiwedd dolen, o leiaf ymddangosiad un.
Sylwch ein bod yn defnyddio getString.
Felly dyna ddiddorol. getInt yn galw ein swyddogaeth hunain, getString.
Ac yn awr pam y gallai hyn fod yn wir?
Pam ydw i'n bod yn amddiffynnol yma yn unol 165?
Beth allai ddigwydd yn unol 164, dim ond i fod yn glir?
Mae'n yr un ateb ag o'r blaen.
Bosibl y bydd yn fod allan o gof.
Rhywbeth yn mynd o'i le gyda getString, mae'n rhaid i ni fedru trafod hynny.
A'r rheswm nad wyf yn dychwelyd null yn hynny, yn dechnegol, yn null pwyntydd.
getInt yn gorfod dychwelyd int.
Felly, yr wyf i wedi fympwyol benderfynu, yn y bôn,
bod 2 biliwn, rhoi neu gymryd, yn mynd i fod yn werth arbennig yr wyf byth yn gallu
mewn gwirionedd yn ei gael gan y defnyddiwr.
Dim ond yr un gwerth Rydw i'n mynd i wastraff i gynrychioli cod gwall.
>> Felly nawr, pethau'n mynd ychydig o ffansi.
Ac nid mae'n eithaf yr un swyddogaeth fel o'r blaen, ond mae'n debyg iawn.
Felly sylwi, yr wyf yn datgan yma, yn unol 172, y ddau yn int n ac torgoch a c.
Ac yna yr wyf yn defnyddio hyn llinell ffynci, sscanf, y mae'n troi allan
nid yw'n sganio llinyn o'r bysellfwrdd.
Mae'n sefyll yn llinyn presennol sy'n y defnyddiwr eisoes wedi teipio i mewn.
Felly, yr wyf yn barod o'r enw getString, sy'n golygu Mae gen i llinyn mewn cof.
sscanf yw'r hyn y byddech yn yn galw swyddogaeth dosrannu.
Mae'n edrych ar y llinyn rwyf wedi deipio i mewn, cymeriad gan cymeriad,
ac yn gwneud rhywbeth defnyddiol.
Bod llinyn yn cael ei storio yn unol.
Ac yr wyf yn gwybod mai dim ond drwy fynd yn ôl i fyny yma ac yn dweud, oh, OK,
Gelwais s nid y tro hwn, ond mae llinell.
>> Ac yn awr mae hyn yn ychydig yn wahanol.
Ond mae hyn yn golygu yn effeithiol, am resymau byddwn yn braidd yn chwifio ein dwylo yn y heddiw,
ein bod yn gwirio i weld a yw'r defnyddiwr yn teipio mewn
ac int ac efallai cymeriad arall.
Os bydd y defnyddiwr deipio mewn int, 'i' mynd i gael eu storio mewn n, oherwydd fy mod i'n
heibio hyn drwy gyfeiriad, mae'r tric newydd rydym wedi gweld heddiw.
Os bydd y defnyddiwr hefyd deipio mewn 123x tebyg, bod x
yn mynd i roi diwedd ar i fyny llythyr o ran cymeriad c.
>> Nawr mae'n troi allan y sscanf Bydd yn dweud wrthyf, yn ddeallus,
faint o newidynnau yn sscanf gallu llwyddo i'w llenwi.
Felly, gan y rhesymeg, os yw'r swyddogaeth Im 'yn gweithredu yn getInt,
ond rwy'n gwirio, o bosibl, ar gyfer y defnyddiwr
i fod wedi ei deipio mewn int ddilyn gan rywbeth arall,
beth ddylwn i ei eisiau sscanf yn gwerth dychwelyd wir i fod?
Os yw'r diben yw cael unig int gan y defnyddiwr?
>> Felly os sscanf ffurflenni 2, beth mae hynny'n ei olygu?
Mae'r defnyddiwr deipio mewn rhywbeth fel, yn llythrennol,
123x, sydd ychydig nonsens.
Mae'n amod gwall, a Rwyf am i wirio am hynny.
>> Felly, os bydd y mathau defnyddiwr yma i mewn, gan rhesymeg hwn, beth mae sscanf ddychwelyd,
fyddech chi'n ei ddweud?
Felly, mae'n mynd i ddychwelyd 2, oherwydd y 123 yn mynd i fynd i mewn yma,
ac mae'r x yn mynd i roi diwedd ar i fyny yn y fan hyn.
Ond dydw i ddim am i'r x i gael eu llenwi.
Yr wyf am sscanf i lwyddo mewn yn unig llenwi y cyntaf o'i newidynnau.
Ac felly dyna pam yr wyf yn eisiau sscanf i ddychwelyd 1.
>> Ac os yw hyn yn ychydig dros y pen gyfer hyn o bryd, mae hynny'n hollol iawn.
Yn sylweddoli fodd bynnag, mai un o'r gwerthoedd getInt a getString
yw ein bod yn gwneud andros o llawer o gwall gwirio fel hyn felly
hynny, hyd yn hyn, gallwch 'n bert lawer teipiwch unrhyw beth ar eich bysellfwrdd,
a byddwn yn ei ddal.
Ac yn sicr, mae'r staff, fydd yn bendant ddim
fod yn ffynhonnell nam yn eich rhaglen, oherwydd ein bod yn amddiffynnol
gwirio ar gyfer pob un o'r dwp pethau y gallai defnyddiwr yn ei wneud,
fel deipio llinyn, pan chi wir eisiau int.
Felly, ar gyfer now-- byddwn yn dod yn ôl i'r hyn cyn long--
ond mae pob un y tro hwn, getString a getInt wedi
wedi bod o dan y cwfl yn arfer hon syniad sylfaenol o gyfeiriadau o gof.
>> Felly nawr, gadewch i ni wneud pethau yn fawr ddim hawdd ei defnyddio mwy.
Fel y byddwch yn cofio, o Binky diwethaf adeg-- os bydd fy llygoden cooperate-- hynny
yr ydym wedi cael y cod hwn, sy'n dweud y gwir, yn eithaf hurt.
Mae'r cod hwn yn cyflawni dim defnyddiol, ond yr oedd yr enghraifft
bod athro Parlante defnyddio er mwyn cynrychioli
beth oedd yn digwydd mewn rhaglen sy'n cynnwys cof.
>> Felly gadewch i ni ailadrodd hyn stori yn fyr super.
Mae'r ddwy linell gyntaf, yn Saesneg, peidiwch beth, yn eich barn chi?
Dim ond yn weddol ddynol, ond ychydig dermau technegol, gymryd drywanu.
CYNULLEIDFA: [Anghlywadwy].
>> DAVID J. Malan: Iawn, rydych yn sefydlu cyfeiriadau ar gyfer eich x ac y newidynnau.
Ddim yn eithaf, gan nad yw x ac y yn newidynnau yn yr ystyr draddodiadol.
x ac y yn gyfeiriadau neu a fydd yn storio gyfeiriad.
Felly gadewch i ni roi cynnig ar hyn unwaith eto.
Ddim yn cychwyn gwael, er.
Yeah?
>> CYNULLEIDFA: [Anghlywadwy].
DAVID J. Malan: Da.
Rwy'n credu bod hynny'n ychydig glanach.
Datgan dau awgrymiadau, dau rif cyfan.
Ac rydym yn galw x ac y yn eu.
Neu pe baem yn tynnu hyn fel llun, unwaith eto,
cofio yn eithaf syml fod yr holl rydym yn ei wneud gyda y llinell gyntaf
yn tynnu blwch fel hyn, gyda rhywfaint o werth garbage ynddo,
ac yn galw ei fod x, ac yna blwch arall fel hyn,
gyda rhywfaint o werth garbage ynddo, yn galw yn y.
Rydym wedi datgan dau awgrymiadau yn y pen draw
Bydd storio y cyfeiriad o int.
Felly dyna i gyd yno.
>> Felly, pan wnaeth Binky hwn, mae'r clai newydd edrych fel hyn.
A Nick unig fath o lapio fyny y saethau,
fel pe nad ydynt yn pwyntio yn unrhyw le yn benodol, gan eu bod yn unig
gwerthoedd garbage.
Dydyn nhw ddim yn ymgychwyn benodol yn unrhyw le yn arbennig.
>> Nawr bod y llinell nesaf o cod, galw i gof, oedd hyn.
Felly, yn rhesymol hawdd ei defnyddio, ond Saesneg braidd dechnegol,
beth yw y llinell hon o god yn ei wneud?
Yeah?
>> CYNULLEIDFA: [Anghlywadwy].
>> DAVID J. Malan: Perffaith.
Mae'n dyrannu'r darn y cof dyna maint o int.
A dyna hanner yr ateb.
Yr ydych wedi ateb yr hawl hanner y mynegiant.
Hyn sy'n digwydd ar y ochr chwith yr arwydd cyfartal?
Yeah?
CYNULLEIDFA: A haseineion i'r newidyn x?
>> DAVID J. Malan: A haseineion i'r newidyn x.
Felly, i ailadrodd, yn dyrannu ochr dde digon o gof i storio yn int.
Ond malloc yn benodol yn dychwelyd y cyfeiriad
o y talp o gof, a oedd eich bod wedi newydd arfaethedig yn cael ei storio yn x.
>> Felly, yr hyn a wnaeth Nick tro diwethaf gyda Binky yn efe a llusgo y pwyntydd allan, y clai,
i bwynt nawr mewn darn gwyn o gof sy'n cyfateb i faint o int.
Ac yn wir, mae hynny'n golygu i gynrychioli pedwar bytes.
>> Yn awr, y llinell nesaf o god gwneud hyn, seren x yn cael 42.
Felly mae 42 yn syml ar y ochr dde, ystyr bywyd.
Ar yr ochr chwith, seren x yn golygu beth?
Gallai hynny hefyd gael gone-- mae hynny'n iawn.
OK.
>> CYNULLEIDFA: Yn y bôn, ewch at y [Anghlywadwy]
DAVID J. Malan: Da.
CYNULLEIDFA: [Anghlywadwy].
DAVID J. Malan: Yn union.
Ochr chwith yn golygu mynd i'r x.
x yn gyfeiriad.
Mae fel 33 Oxford Street, neu OX1.
A seren x yn golygu mynd i hynny mynd i'r afael a rhowch beth yno?
42.
>> Felly yn wir, dyna'n union yr hyn a wnaeth Nick.
Dechreuodd â hwy gan, yn y bôn, yn feddyliol
pwyntio bys ar x, yn dilyn y saeth
i'r blwch gwyn ar y dde-law ochr, a rhoi'r rhif 42 yno.
Ond yna got pethau a ychydig yn beryglus, dde?
Binky ar fin colli ei ben.
>> Seren y hafal i 13, lwc ddrwg, yn golygu beth?
Felly seren y ffordd yn mynd i'r cyfeiriad yn y.
Ond beth yw cyfeiriad yn y?
Mae pob hawl, mae'n werth garbage, dde?
Tynnais fel marc cwestiwn.
Tynnodd Nick fel saeth cyrlio i fyny.
A chyn gynted ag y byddwch yn ceisio gwneud seren y, gan ddywedyd yn mynd yno,
ond nid oes dilys cyfeiriad, mae'n rhywfaint o leoliad ffug,
mae'r rhaglen yn mynd i ddamwain.
A phennaeth Binky yn mynd i hedfan i ffwrdd fan hyn, fel y gwnaeth.
>> Felly, yn y diwedd, y rhaglen hon yn unig oedd nam allan fflat.
Roedd yn rhaglen bygi.
Ac roedd angen iddi fod yn sefydlog.
A'r unig ffordd, mewn gwirionedd, i'w drwsio fyddai, er enghraifft, y llinell hon,
a doedden ni ddim hyd yn oed yn mynd i, oherwydd y rhaglen damwain yn rhy fuan.
Ond pe baem yn atgyweiria hon, beth effaith mae gwneud y x cyfartal gael?
Wel, mae ei hanfod yn pwyntio y yn pa bynnag werth x yn pwyntio at.
>> Felly, yn stori Nick yn, neu stori Binky, caiff dau
x ac y yn pwyntio at y darn gwyn o gof,
fel eu bod, yn olaf, pan fyddwch yn yn seren y yn hafal i 13 unwaith eto,
byddwch yn rhoi 13 yng y lleoliad priodol.
Felly yr holl o'r llinellau hyn yn berffaith cyfreithlon, ac eithrio ar gyfer yr un yma,
pan ddigwyddodd cyn i chi neilltuo y gwirionedd rhywfaint o werth.
>> Nawr, diolch byth, nid ydych yn ei wneud rhaid i ymresymu drwy'r holl
o'r mathau hyn o faterion ar eich pen eich hun.
Gadewch i mi fynd yn ei flaen ac yn agor i fyny derfynnell ffenest yma
ac yn agor i fyny, am ddim ond ennyd, rhaglen super byr sy'n
hefyd yn fath o ddibwrpas.
Mae'n hyll.
Nid yw'n cyflawni dim defnyddiol.
Ond mae'n dangos materion o gof, felly gadewch i ni edrych.
>> Main, super syml.
Mae'n debyg yn galw swyddogaeth, f, ac yna yn dychwelyd 0.
Mae'n fath o galed i llanast i fyny.
Felly Prif yn eithaf da, hyd yn hyn.
>> Felly f yn broblemus.
Ac nid yn unig oedd yn rhoi llawer ymdrech i mewn iddo enwi
yma, i gadw'r ffocws ar y cod.
f Mae dwy linell.
A gadewch i ni weld beth erbyn hyn sy'n digwydd.
Felly, ar y naill law Yma-- a gadewch i mi wneud
hyn yn gyson â'r blaenorol example-- ar y naill law,
yr ochr chwith yn gwneud beth, yn y Saesneg?
Mae'n yw--
CYNULLEIDFA: Creu pwyntydd.
DAVID J. Malan: Creu pwyntydd i int a galw ei x.
Felly mae'n creu un o'r blychau hynny Rwy'n cadw tynnu ar y sgrin gyffwrdd.
Ac yn awr, ar y dde-law ochr, malloc, wrth gwrs,
yn dyrannu cyfran o gof.
A dim ond i fod yn glir, sut llawer o gof a yw'n debyg
dyrannu, os ydych yn unig fath o gwneud y math yma?
>> Felly mae'n 40 bytes.
Ac yr wyf yn gwybod mai dim ond am fy mod yn gwybod bod int, ar y peiriant CS50, o leiaf,
yw pedwar bytes.
Felly 10 gwaith 4 yw 40.
Felly, mae hyn yn cael ei storio yn x, y cyfeiriad o'r tu allan cyntaf o 40 ints sy'n
wedi cael eu dyrannu lle yn ôl, i gefnogi, i gefnogi, i gefn.
>> A dyna beth sy'n allweddol am malloc.
Nid yw'n cymryd ychydig o gof yma, ychydig yma, ychydig yma.
Mae'n rhoi un darn o gof i chi, contiguously, o'r gweithredu
system.
>> Nawr beth am hyn, x braced 10 yn dychwelyd 0?
Llinell mympwyol o god.
Nid yw'n cyflawni dim defnyddiol.
Ond mae'n ddiddorol, oherwydd x braced 10--?
Yeah?
>> CYNULLEIDFA: [Anghlywadwy]?
>> DAVID J. Malan: x braced Nid oes gan 10 i fod yn nwl.
Mae'r manylion null ond yn dod i chwarae gyda llinynnau, ar ddiwedd y llinyn.
Ond mae meddwl da.
>> Pa mor fawr yw amrywiaeth hwn, hyd yn oed er fy mod i wedi dyrannu 40 bytes?
Mae'n 0 drwy naw, dde?
Mae'n 10 ints, cyfanswm.
40 bytes, ond 10 ints, mynegeio 0 drwy 0.
>> Felly beth yw bod x braced 10?
Mae'n mewn gwirionedd yn rhai gwerth garbage anhysbys.
Mae'n cof nad yw'n perthyn i mi.
Ni ddylwn i fod yn cyffwrdd y rhif 41, 42, 43, 44 beit.
Rydw i'n mynd ychydig yn rhy bell.
>> Ac yn wir, os wyf yn rhedeg hyn rhaglen, gallai fod yn dda iawn yn chwalu.
Ond weithiau, byddwn yn cael lwcus.
Ac felly dim ond i ddangos this-- a dweud y gwir,
byth yn eich bod yn gwybod cyn i chi peidiwch iddo-- gadewch i ni redeg hyn.
Nid oedd mewn gwirionedd yn chwalu.
>> Ond os byddaf yn newid hyn, er enghraifft, i fod fel 1,000,
i wneud hyn yn wir yn fwriadol, gadewch i ni weld
os gallwn ei gael i ddamwain y tro hwn.
OK, nid oedd yn damwain.
Sut tua 100,000?
Gadewch i ni ail-wneud iddo, ac yn awr ei ailgynnal.
OK.
Phew.
Mae pob hawl.
Felly mae'n debyg, unwaith eto, mae'r rhain segmentau o gof, fel petai,
yn gymharol fawr, felly gallwn cael lwcus dro ar ôl tro.
Ond yn y diwedd, ar ôl i chi gael chwerthinllyd ac yn wir yn mynd yn bell allan ar y sgrin,
byddwch yn cyffwrdd cof sydd wir, ddim wir yn perthyn i chi.
>> Ond dweud y gwir, mae'r rhain mathau o bugs yn mynd
i fod yn fwy a mwy anodd at chyfrif i maes ar eich pen eich hun.
Ond diolch byth, fel rhaglenwyr, yr ydym wedi offer sy'n ein galluogi i wneud hyn ar ein rhan.
Felly, mae hyn yw, o bosibl, un o'r rhaglenni hyllaf,
hyd yn oed yn uglier nag allbwn gdb yn.
Ond mae bob amser yn cael llinell neu dau sydd yn super ddefnyddiol.
>> Valgrind yn rhaglen sy'n helpu i chi beidio debug rhaglen, fel y cyfryw,
ond yn dod o hyd i-gysylltiedig cof problemau, yn benodol.
Bydd yn rhedeg eich cod yn awtomatig ar gyfer chi ac yn edrych am o leiaf dau beth.
Un, wnaethoch chi wneud rhywbeth damweiniol fel cof cyffwrdd
nad oedd yn perthyn i chi?
Bydd yn eich helpu i ddod o hyd i achosion hynny.
>> A dau, bydd yn helpu byddwch yn dod o hyd i rywbeth o'r enw
gollyngiadau cof, yr ydym wedi hanwybyddu yn llwyr, yn ddiniwed,
ers peth amser ac yn blissfully.
Ond mae'n troi allan, pob y tro hwn, pryd bynnag y
yr ydych wedi galw getString mewn cynifer o'n rhaglenni,
eich bod yn gofyn i'r gweithredu system ar gyfer cof,
ond mae gennych unrhyw atgof o byth roi
yn ôl, yn gwneud unalloc, neu rhad ac am ddim, gan ei fod yn cael ei alw.
Na, oherwydd yr ydym erioed wedi gofynnir i chi wneud hynny.
>> Ond yr holl amser hwn, mae'r rhaglenni ydych wedi bod yn ysgrifennu yn C
wedi bod yn gollwng cof, gofyn i'r gweithredu
system ar gyfer mwy a mwy cof ar gyfer llinynnau a whatnot,
ond byth yn trosglwyddo yn ôl.
Ac yn awr mae hyn yn ychydig o gorsymleiddio,
ond os ydych wedi erioed wedi rhedeg eich Mac neu eich cyfrifiadur ers peth amser, agor
llawer o raglenni, efallai cau rhaglenni,
ac er bod eich Nid yw cyfrifiadur wedi damwain,
mae'n mynd yn gymaint yn arafach, fel pe ei fod yn wir yn
gan ddefnyddio llawer o gof neu adnoddau, er bod,
os nad ydych yn hyd yn oed yn cyffwrdd y bysellfwrdd,
allai be-- ond nid always-- allai fod bod y rhaglenni ydych yn rhedeg
eu hunain wedi gollwng cof.
Ac maent yn parhau i ofyn y AO i fwy a mwy o cof, ond yn anghofio am y peth,
Nid mewn gwirionedd yn ei ddefnyddio, ond Felly, gan gymryd cof ffwrdd
o raglenni eraill a allai fod am ei gael.
Felly dyna esboniad cyffredin.
Nawr dyma lle Valgrind yn allbwn yn gwbl
erchyll i'r rhai llai ac yn fwy cyfforddus fel ei gilydd.
Ond mae'r ddiddorol pethau yn iawn i fyny yma.
Mae'n cael ei ddweud wrthyf yn ysgrifennu annilys o maint pedwar digwydd yn y rhaglen hon,
yn benodol, ar linell 21 o memory.c.
>> Os byddaf yn mynd i linell 21, EM, mae yn wir yn ysgrifennu annilys o faint pedwar.
Pam maint pedwar?
Wel, number-- hwn ac mae'n Gallai fod anything-- yn int.
Felly mae'n pedwar bytes.
Felly rwy'n rhoi pedwar bytes lle nad ydynt yn perthyn.
Dyna beth Valgrind mewn gwirionedd yn dweud wrthyf.
Ar ben hynny, bydd hefyd ddweud wrthyf, fel y byddwn yn gweld,
wrth i chi yn rhedeg hyn mewn pset y dyfodol, os a pan fyddwch wedi gollwng cof, a oedd yn wir
Mae gen i, am fy mod wedi galw malloc, ond nid wyf wedi mewn gwirionedd
gelwir, yn yr achos hwn, rhad ac am ddim, y byddwn yn y pen draw yn gweld
yn y gwrthwyneb i malloc.
>> Felly nawr, yr wyf yn meddwl, yn enghraifft terfynol.
Felly, mae hyn yn un ychydig yn fwy ddirgel, ond mae'n bosibl
y rheswm mwyaf i fod yn ofalus gyda'r cof,
a'r rheswm bod llawer o raglenni a / neu gweinyddwyr y we, hyd yn oed hyd heddiw,
yn cael eu cymryd drosodd gan guys ddrwg rhywle ar y rhyngrwyd sydd yn rhywsut
anfon pecynnau ffug â'ch gweinydd ceisio cyfaddawdu eich cyfrifon,
neu gymryd eich data, neu dim ond yn gyffredinol yn cymryd dros beiriant.
Byffer gorlif, gan fod y enw yn awgrymu, fodd
gorlifo nid int, ond mae byffer.
Ac mae byffer yn unig yw ffordd ffansi o ddweud ei fod yn griw o gof.
>> Ac yn wir, yr wyf yn elwir yn llinyn cyn clustogi, yn hytrach na s.
Oherwydd os yw'n byffer, fel yn yr ystyr YouTube,
neu unrhyw bryd ydych yn gwylio fideo, efallai y byddwch wedi gweld y gair byffro,
dot, dot, dot.
Mae'n hynod o blino.
Ac mae hynny'n ei olygu yw bod eich chwaraewr fideo
yn ceisio i'w llwytho i lawr llawer o bytes, llawer o bytes
o fideo o'r rhyngrwyd.
Ond mae'n araf, felly mae'n ceisio i lawrlwytho criw ohonynt
i lenwi byffer, cynhwysydd, fel bod gennych ddigon o bytes o fewn ei allu wedyn
dangos i chi y fideo, heb oedi yn gyson.
Ond mae'n troi allan, gallwch gael byffer i hyn fawr.
Ond ceisiwch roi hyn llawer o ddata yn iddo, ac yn iawn, gall pethau drwg yn digwydd.
Felly, er enghraifft, gadewch i ni edrych ar hwn ymlid terfynol enghraifft.
Mae hon yn rhaglen arall hynny, ar yr olwg gyntaf,
nid yw'n gwneud unrhyw beth super defnyddiol.
Mae'n got a Prif swyddogaeth sy'n galw swyddogaeth honno, f.
A bod y swyddogaeth, f, i fyny yma, mae gan amrywiaeth torgoch, a elwir yn c, o faint 12.
Ac yna mae'n defnyddio hwn swyddogaeth newydd o'r enw strncpy.
>> Mae'n ymddangos bod, gyda hyn yn syml, llinell syml o god, dim ond dwy linell,
rydym wedi gwneud fy rhaglen gyfan, ac felly, fy nghyfrifiadur cyfan,
a fy nghyfrif defnyddiwr, ac mae fy caled gyrru a allai fod yn agored i unrhyw un
pwy a ŵyr ac yn ddigon da i redeg rhaglen hon gyda llinell gorchymyn penodol
ddadl.
Mewn geiriau eraill, os yw hyn yn dyn drwg rhoi tu mewn argvargv [1] drwy deipio
ar y bysellfwrdd yn arbennig Crafted iawn llinyn, nid abc, 123, ond yn ei hanfod,
symbolau deuaidd sy'n cynrychioli gweithredadwy code, rhaglen y mae ef neu hi yn ysgrifennu,
gyda'r rhaglen syml, sydd yn gynrychioliadol o filoedd o raglenni
sydd yr un mor agored i niwed, mentraf ddweud, ef neu yn y pen draw gall hi dileu popeth
y ffeiliau ar fy 'n anawdd cathrena, yn cael amrantu brydlon fel bod ef neu hi yn gallu
teipio gorchmynion ar eu pen eu hunain, e-bostio pob ffeiliau i mi fy hun.
Unrhyw beth y gallaf ei wneud, ei fod yn neu hi yn gallu ei wneud â'r cod hwn.
>> Ni fyddwn yn hollol yn datrys hyn eto.
Ac yn wir, mae'n mynd i cynnwys ychydig o llun
fel hyn, y byddwn yn fuan yn dod i ddeall yr holl well.
Ond ar gyfer heddiw, gadewch i ben ar beth sydd, gobeithio, mae ychydig yn fwy
jôc XKCD ddealladwy, nes i ni ailddechrau tro nesaf.
Mae pob hawl.
Welwn ni chi ar ddydd Mercher.
>> [CHWARAE CERDDORIAETH]
>> SIARADWR: Ac yn awr, dwfn meddyliau, gan Daven Farnham.
Cof yn debyg i neidio i mewn i bentwr o dail euraidd ar brynhawn dydd Sul.
Chwythu gwynt, tossing eich hair-- oh, yr wyf yn colli y dyddiau when--
>> [Chwerthin]