[Ag seinm ceoil] DOUG LLOYD: OK mar sin moladh sula dtosaíonn anseo. Más rud é nach bhfuil tú ag faire ar an físeán ar leideanna b'fhéidir gur mhaith leat é sin a dhéanamh ar dtús. Toisc go bhfuil an físeán seo ceann eile mhodh oibre le leideanna. Mar sin, tá sé ag dul chun labhairt faoi ​​roinnt coincheapa a chlúdaíonn muid sa threo físeán, agus táimid dul chun snasta os a gcionn anois, ag glacadh leis go bhfuil siad cheana saghas thuiscint. Mar sin, go díreach tar éis do rabhadh cothrom go má tá tú ag féachaint ar an físeán seo agus nach bhfuil tú ag feiceáil an threo físeán, d'fhéadfadh sé saghas eitilt thar do cheann le beagán. Agus mar sin d'fhéadfadh sé a bheith níos fearr chun féachaint air san ord sin. Mar sin, atá feicthe againn cheana féin amháin bhealach a bheith ag obair le leideanna, a bhfuil a dhearbhú againn athraitheach, agus ansin táimid ag dhearbhú athróg eile, pointeoir athróg, pointí sin dó. Mar sin, tá muid a cruthaíodh athróg le ainm, tá muid chruthaigh an dara athróg le ainm, agus pointe muid go an dara athróg ag an gcéad. Seo saghas go bhfuil fadhb áfach, mar gheall ar é Éilíonn dúinn a fhios go díreach cé mhéad cuimhne táimid dul go mór i láthair na huaire Is é ár gclár i dtoll a chéile. Cén fáth é sin? Mar is gá dúinn a bheith in ann a ainm nó aithint gach ceann de na hathróga is féidir D'fhéadfadh muid ag teacht ar. Bhféadfaimis a bhfuil le sraith d'fhéadfadh a bheith in ann a shealbhú ar a lán eolais, ach tá sé fós ní go díreach beacht go leor. Cad a tharlaíonn má nach bhfuil a fhios againn, cad má ní mór dúinn aon smaoineamh cé mhéad beidh orainn gá ag am tiomsaithe? Nó cad má mbeidh ár gclár ar siúl ar feadh tamaill i ndáiríre fada, glacadh úsáideoir éagsúla sonraí, agus ní féidir linn i ndáiríre meastachán cibé an bhfuil muid a dul go mór 1,000 aonad? Nach bhfuil sé cosúil is féidir linn rá ag an líne ordaithe dul isteach cé mhéad míreanna a cheapann tú bheas de dhíth ort. Bhuel cad más rud é go buille faoi thuairim mícheart? Leithdháileadh cuimhne dinimiciúil saghas ligeann dúinn an bealach a fháil ar fud an fhadhb seo go háirithe. Agus an mbealach a dhéanann sé é Is trí úsáid a bhaint leideanna. Is féidir linn a úsáid leideanna chun Rochtain a fháil chun dinimiciúil cuimhne leithdháilte, cuimhne go bhfuil leithdháileadh mar do chlár ag rith. Nach bhfuil sé a leithdháileadh ag am tiomsaithe. Nuair a bheidh tú a leithdháileadh dinimiciúil cuimhne a thagann sé ó linn de chuimhne ar a dtugtar an gcarn. Roimhe seo go léir an chuimhne tá muid ag obair le linn Tá teacht ó linn de chuimhne ar a dtugtar an chairn. Bealach maith chun go ginearálta a choinneáil i riail mind-- agus Ní shealbhú fíor i gcónaí, ach go leor i bhfad beagnach Tá i gcónaí go bhfuil true-- go bhfuil aon ama a thabhairt duit ainm athraitheach é is dócha ina chónaí ar an chairn. Agus am ar bith nach bhfuil tú thabhairt athróg ainm, Is féidir leat a le cuimhne dinimiciúil leithdháileadh, sé ina chónaí ar an gcarn. Anois tá mé cineál i láthair seo mar má tá an dá linnte de chuimhne. Ach is féidir leat a bheith le feiceáil seo léaráid, a bhfuil go ginearálta léiriú ar cén chuimhne Breathnaíonn an nós, agus ní táimid ag dul chun cúram faoi gach an stuif ag an mbarr agus bun an leathanaigh. Cad cúram againn faoi chuid seo i an lár anseo, gcarn agus Stack. Mar is féidir leat a fheiceáil ag ag féachaint ar an léaráid, na nach bhfuil iarbhír dhá linnte leith de chuimhne. Tá sé linn snámha roinnte cheann de chuimhne áit a thosaíonn tú, sa radharc dtosaíonn tú ag bun agus tús a líonadh suas ó bhun leis an chairn, agus tú tús a chur ag an mbarr agus tús a líonadh suas ó bharr anuas leis an gcarn. Ach tá sé i ndáiríre an linn snámha céanna, tá sé ach spotaí éagsúla, áiteanna éagsúla i gcuimhne go bhfuil á leithdháileadh. Agus is féidir leat a rith amach as cuimhne ag ceachtar bhfuil an gcarn dul go léir ar an mbealach go bun, nó a bhfuil an chairn dul go léir ar an mbealach chun an barr, nó a bhfuil an gcarn agus an chairn freastal ar suas in aghaidh a chéile. Is féidir le gach ceann de na coinníollacha a a chur faoi deara do chlár a rith amach as cuimhne. Mar sin a choinneáil sin san áireamh. Nuair a labhairt linn faoi an gcarn agus an chairn muid ag caint i ndáiríre faoi na smután ginearálta céanna de chuimhne, ach codanna éagsúla den chuimhne. Mar sin, conas is féidir linn a fháil dinimiciúil cuimhne a leithdháileadh sa chéad áit? Conas a dhéanann ár gclár a fháil cuimhne mar tá sé ag rith? Bhuel Soláthraíonn C feidhm a dtugtar malloc, Allocator chuimhne, a a dhéanann tú glao a, agus pas a fháil tú i cé mhéad bytes de chuimhne gur mian leat. Mar sin, má tá do chlár ag rith agus ba mhaith leat ar runtime slánuimhir, go dtiocfadh leat mallock ceithre bytes de chuimhne, lúibíní malloc ceathair. Beidh mallock dul tríd lorg tríd an gcarn, mar táimid dinimiciúil cuimhne leithdháileadh, agus beidh sé ar ais chugat pointeoir leis an chuimhne. Ní chuireann sé a thabhairt duit go memory-- Ní chuireann sé a thabhairt dó ainm, tugann sé tú pointeoir dó. Agus mar sin go bhfuil an fáth a dúirt mé arís go bhfuil sé tábhachtach a thabhairt b'fhéidir ag faire ar an físeán leideanna sula a fháil againn i bhfad ró isteach sa. Mar sin tá malloc ag dul go dtí thabhairt duit ar ais ar pointeoir. Mura féidir mallock thabhairt duit ar aon cuimhne mar tá tú ag rith amach, beidh sé a thabhairt duit ar ais ar pointeoir null. An cuimhin leat cad a tharlaíonn má táimid iarracht a dhéanamh agus téigh i pointeoir null? Táimid ag fulaingt locht seg, ceart? Sin é is dócha nach bhfuil go maith. Mar sin, gach uair a dhéanann tú glao chun malloc tú i gcónaí, i gcónaí Ní mór a sheiceáil an bhfuil nó nach bhfuil an pointeoir thug sé go bhfuil tú ar ais null. Má tá sé, is gá duit chun deireadh do chlár mar má tá tú iarracht a dhéanamh agus téigh i an pointeoir null bhfuil tú ag dul ag fulaingt locht deighilt agus tá do chlár ag dul a tuairteála ar aon nós. Mar sin, conas a dhéanann muid statically fháil slánuimhir? slánuimhir x. Táimid tar éis a rinneadh dócha go a bunch na n-amanna, ceart? Cruthaíonn sé seo ar a dtugtar athróg x go bhfuil cónaí ar an chairn. Conas is féidir linn a fháil dinimiciúil slánuimhir? Ionann px réalta slánuimhir malloc 4. Nó níos oiriúnaí ba mhaith linn a rá px réalta int ionann méid malloc de slánuimhir, ach le caith roinnt níos lú uimhreacha draíochta timpeall ár gclár. Tá sé seo ag dul a fháil dúinn ceithre bytes de chuimhne ón gcarn, agus an pointeoir a fháil againn ar ais dó ar a dtugtar px. Agus ansin díreach mar tá muid rinneadh roimhe sin táimid ag Is féidir téigh i px go rochtain a fháil ar go chuimhne. Conas is féidir linn a fháil slánuimhir ón úsáideoir? Is féidir linn a rá int x cothrom le slánuimhir a fháil. Sin go leor simplí. Cad más mian linn a chruthú le sraith de x báid a mhaireann ar an chairn? snámhphointe stack_array-- go bhfuil an t-ainm dár array-- lúibíní cearnacha x. A chruthóidh dúinn le sraith de x báid a mhaireann ar an chairn. Is féidir linn a chruthú le sraith de flótaí go bhfuil cónaí ar an gcarn, freisin. D'fhéadfadh an error cuma ar beagán níos cumbersome, ach is féidir linn a rá snámhphointe ionann heap_array réalta malloc x uair an méid de na snámhphointe. Gá dom seomra go leor a shealbhú x snámh luachanna phointe. Mar sin, a rá is gá dom 100 flótaí, nó 1,000 snámhann. Mar sin, sa chás sin go mbeadh sé 400 bytes ar feadh 100 flótaí, nó 4,000 bytes ar feadh 1,000 flótaí, toisc go dtarlaíonn gach snámhphointe suas ceithre bytes de spás. Tar éis é seo, is féidir liom a bhaint as an lúibín cearnach ar error heap_array. Díreach mar a bheadh ​​mé ar stack_array, mé Is féidir rochtain a fháil ar a eilimintí aonar ag baint úsáide as heap_array náid, ceann heap_array. Ach cuimhne an chúis is féidir linn a dhéanamh go Is mar gheall ar an t-ainm eagar i C i ndáiríre pointeoir a go eagar an chéad eilimint. Mar sin, an bhfíric go bhfuil muid ag dhearbhú sraith de flótaí ar an chairn anseo i ndáiríre le beagán míthreorach. Tá muid i ndáiríre sa dara líne de chód ann freisin a chruthú pointeoir le smután de cuimhne go linn a dhéanamh ansin roinnt oibre leis. Seo an fadhb mhór le dinimiciúil leithdháilte cuimhne áfach, agus is é seo an fáth go bhfuil sé i ndáiríre tábhachtach a fhorbairt ar roinnt dea-nósanna nuair a bhíonn tú ag obair leis. Murab ionann agus statically dhearbhú chuimhne, do chuimhne Níl ar ais go huathoibríoch chuig an Córas nuair a bhfuil do fheidhm dhéanamh. Mar sin, má táimid tar mó, agus glaonna is mó feidhm f, nuair f bailchríocha is cuma cad tá sé ag déanamh agus tuairisceáin rialú an chláir ar ais go to main, gach ceann de na chuimhne go f úsáidtear thabhairt ar ais. Is féidir é a úsáid arís clár eile é, nó feidhm éigin eile a Faigheann ar a dtugtar níos déanaí sa phríomh. Is féidir é a úsáid go chuimhne céanna arís. Má tá tú dinimiciúil leithdháileadh cuimhne cé caithfidh tú a insint go sainráite an córas a bhfuil tú ag déanamh leis. Beidh sé a shealbhú isteach é ar do shon, a d'fhéadfadh mar thoradh ar fhadhb tú ag rith amach de chuimhne. Agus go deimhin tagraímid uaireanta leis seo mar sceitheadh ​​chuimhne. Agus uaireanta na leaks cuimhne Is féidir a bheith i ndáiríre i ndáiríre tubaisteach do feidhmíocht an chórais. Má tá tú i d'úsáideoir idirlín go minic go dtiocfadh leat a úsáid brabhsálaithe gréasáin áirithe, agus ní bheidh mé ainmneacha ainm anseo, ach tá roinnt brabhsálaithe gréasáin amach ann atá notorious do iarbhír a bheith leaks cuimhne nach bhfuil a fháil seasta. Agus má fhágann tú do bhrabhsálaí a oscailt ar feadh tréimhse an-fhada ama, laethanta agus laethanta, seachtainí nó, tú uaireanta D'fhéadfadh faoi deara go do chóras Is ag rith i ndáiríre, i ndáiríre go mall. Agus is é an chúis go bhfuil Tá an brabhsálaí leithdháileadh chuimhne, ach ansin ní dúirt an gcóras go bhfuil sé déanta leis. Agus mar sin go bhfágann cuimhne níos lú ar fáil do gach ceann de do chláir eile a bheith acu a roinnt, mar atá tú leaking-- go brabhsálaí gréasáin Tá an clár leaking chuimhne. Conas is féidir linn a thabhairt ar ais cuimhne nuair a bhíonn muid ag déanamh leis é? Bhuel fortunately tá sé ina ar bhealach an-éasca a dhéanamh. Táimid ag saor in aisce ach é. Níl feidhm ar a dtugtar saor in aisce, Glacann sé pointeoir chun cuimhne, agus tá muid go maith chun dul. Mar sin, a ligean le rá go bhfuil muid sa lár ár gclár, ba mhaith linn a malloc 50 carachtair. Is mian linn a malloc le sraith féidir a ann a bhfuil 50 carachtair. Agus nuair a fhaigheann muid ar ais go dtí pointeoir is é sin, ainm sin pointeoir focal. Déanann muid is cuma cad tá muid ag dul a dhéanamh leis an focal, agus ansin nuair a bhíonn muid a déanta againn saor in aisce ach é. Agus anois ní mór dúinn a d'fhill na 50 bytes de chuimhne ar ais go dtí an córas. Is féidir le roinnt fheidhm eile iad a úsáid. Ní chuirimid a bheith buartha faoi ag fulaingt le cuimhne sceitheadh ​​toisc go bhfuil muid saor focal. Táimid tar éis a tugadh an chuimhne ar ais, mar sin táimid ag ag déanamh obair leis. Mar sin, tá trí rialacha órga gur chóir go mbeadh a choinneáil i gcuimhne nuair a bhíonn tú dinimiciúil leithdháileadh cuimhne le malloc. Gach bloc cuimhne go ní mór duit a bheith freed malloc roimh do chlár bailchríocha ag rith. Anois arís, i an fearas nó sa IDE seo saghas a tharlaíonn ar do shon ar aon nós nuair you-- beidh sé seo tarlú ar aon nós nuair a bhfuil do chlár a fhoirceannadh, beidh gach an chuimhne a scaoileadh. Ach tá sé códaithe go maith i gcoitinne chleachtas i gcónaí, nuair atá tú ag déanamh, saor in aisce a bhfuil tú mallocd. É sin ráite, ach rudaí a tá tú ba chóir mallocd a scaoileadh saor. Má dhearbhaíonn tú statically ar slánuimhir, slánuimhir x leathstad, go bhfuil cónaí ar an chairn, tú nach mian ansin x saor in aisce. Rudaí mar sin ach go atá tú Ba cheart mallocd a scaoileadh saor. Agus ar deireadh, ní rud éigin saor in aisce faoi dhó. Is féidir go dtiocfadh staid aisteach eile. Mar sin, gach rud go atá tú Tá mallocd a freed. Rudaí ach go atá tú Ba chóir malloc a freed. Agus ní rud éigin saor in aisce faoi dhó. Mar sin, a ligean ar dul tríd shampla anseo de cad a roinnt leithdháilte dinimiciúil D'fhéadfadh cuimhne cuma mhaith measctha isteach le roinnt cuimhne statach. Cad a tharlódh anseo? Féach an féidir leat a leanúint chomh maith agus buille faoi thuairim cad atá ag dul a tharlóidh mar a théann muid trí gach na línte de chód. Mar sin, deirimid slánuimhir m. Cad a tharlaíonn anseo? Bhuel tá sé seo go leor simplí. Chruthú mé athróg slánuimhir a dtugtar m. Dath mé glas é, mar gheall ar go bhfuil an dath go úsáid mé nuair atá mé ag caint faoi ​​athróga slánuimhir. Tá sé ina bhosca. Sé ar a dtugtar m, agus is féidir leat slánuimhreacha a stóráil taobh istigh de sé. Cad a tharlaíonn má rá liom ansin slánuimhir réalta a? Bhuel go leor den chineál céanna. Tá mé ag a chruthú bosca a dtugtar. Tá sé in ann slánuimhir ghabháltais réaltaí, leideanna chun slánuimhreacha. Mar sin, tá mé ag dathú sé glas-ish chomh maith. Tá a fhios agam go bhfuil sé rud éigin a dhéanamh leis slánuimhir, ach ní é féin tá sé slánuimhir. Ach tá sé go leor i bhfad ar an smaoineamh céanna. Chruthaigh mé bosca. Tá an dá ceart anois beo ar an chairn. Mé a thabhairt dóibh an dá ainm. ionann réalta slánuimhir b méid malloc de slánuimhir. D'fhéadfadh sé seo ar cheann a bheith beagán tricky. Chur ar an dara agus smaoineamh ar cad tú Bheadh ​​súil go dtarlódh ar an léaráid. ionann réalta slánuimhir b méid malloc de slánuimhir. Bhuel nach bhfuil sé seo ach a chruthú bosca amháin. Cruthaíonn sé seo i ndáiríre dhá bhosca. Agus ceangail sé, bunaíonn sé chomh maith pointe i gcaidreamh. Táimid tar éis a leithdháileadh bloc amháin de chuimhne ar an gcarn. Fógra go bhfuil an bosca ceart barr Níl ann bhfuil ainm. Mallocd Déanaimid é. Bíonn sí ann ar an gcarn. Ach tá ainm b. Tá sé ina athróg pointeoir ar a dtugtar b. Go bhfuil cónaí ar an chairn. Mar sin, tá sé ina píosa de chuimhne go pointí le chéile. Tá b an seoladh den bhloc de chuimhne. Ní chuireann sé a ainm a mhalairt. Ach pointí sé leis. Mar sin, nuair a deirimid ionann réalta int b Méid malloc an slánuimhir, go ceart ann, go arrow a popped suas ar an taobh deas ann, is rud ar fad, Beidh mé sé le feiceáil arís é, cad a tharlaíonn. Gach ceann de sin a tharlaíonn i an líne amháin de chód. Anois, beidh orainn a fháil beagán níos mó simplí arís. a ionann ampersand m. An bhfuil tú a thabhairt chun cuimhne cad a ionann is ampersand m? Bhuel go bhfuil bhfaigheann m ar seoladh. Nó a chur níos diagramach, a pointí a m. a ionann b. OK Tá sin anseo ceann eile. A cothrom b. Cad atá ag dul a tharlóidh leis an léaráid an am seo? Bhuel chun cuimhne go bhfuil an oibreacha oibreoir sannadh trína shannadh an luach ar an ceart chun an luach ar thaobh na láimhe clé. Mar sin, in ionad an dírithe go m, ar anois pointí go dtí an áit chéanna go pointí b. ní fholaíonn pointe ab, ar pointí pointí nuair is b. Má Léirigh ab go mbeadh a bheith ina is ionann ampersand b. Ach ina ionad sin a ionann b díreach a chiallaíonn go bhfuil agus b anois dírithe ar an seoladh céanna, mar gheall ar Is taobh istigh de b ach seoladh. Agus anois taobh istigh de é an seoladh céanna. ionann m 10, is dócha an an chuid is mó rud simplí táimid ag atá déanta i beagán. Cuir an 10 sa bhosca. Ionann réalta b m móide 2, chun cuimhne ó Ciallaíonn ár leideanna físeán cén réalta b. Táimid ag dul go dtí téigh i b agus a chur roinnt luach sa mhéid is go suíomh chuimhne. Sa chás seo 12. Mar sin, nuair a muid téigh i phonc cuimhne againn taisteal díreach síos an arrow. Nó a chur ar bhealach eile, táimid ag téigh go dtí an seoladh sin cuimhne agus táimid ag láimhseáil ar bhealach éigin. Chuireamar roinnt luach i ann. Sa chás seo, réalta b ionann m móide 2 ach téigh go dtí an athróg aird ag b, téigh go dtí an chuimhne aird ag b, agus a chur m móide 2 i ann, 12. Anois mé saor in aisce b. Cad a tharlaíonn nuair a I saor in b? Cuimhnigh cad a dúirt mé ciallaíonn saor in aisce. Cad tá á rá agam nuair I saor in b? Tá mé ag obair ag déanamh leis, ceart? I bunúsach a thabhairt suas an chuimhne. A thabhairt liom ar ais go dtí an córas. Ní féidir liom gá seo níos mó a bhfuil mé ag insint dóibh, ceart go leor? Anois, má rá liom réalta ar ionann 11 is féidir leat is dócha insint cheana féin go bhfuil rud éigin dona bhfuil dul chun tarlú anseo, ceart? Agus go deimhin, má rinne mé go bhfuil mé is dócha Bheadh ​​fulaingt locht deighilt. Toisc anois, cé go roimhe sin smután de chuimhne raibh rud éigin go raibh mé rochtain ar, ag an bpointe seo anois tá mé ag teacht ar chuimhne go Níl dlíthiúil dom a rochtain. Agus mar déanfaimid is dócha chun cuimhne, nuair a chuirimid ar rochtain cuimhne nach bhfuil muid ag ceaptha chun teagmháil, sin an chúis is coitianta de deighilt locht. Agus mar sin mo chlár Bheadh ​​tuairteála má rinne mé é seo a dhéanamh. Mar sin, arís tá sé ina smaoineamh maith a fháil go maith chleachtais agus dea-nósanna ingrained iad ag obair le malloc agus saor in aisce, ionas nach bhfuil tú ag fulaingt deighilt lochtanna, agus go n-úsáideann tú do leithdháileadh dinimiciúil cuimhne go freagrach. Tá mé Doug Lloyd is é seo CS50.