[Daqq tal-mużika] Doug LLOYD: OK so suġġeriment qabel ma tibda hawn. Jekk int ma jaraw l-video fuq Pointers inti tista 'tixtieq li tagħmel dan ewwel. Minħabba dan il-video huwa ieħor mod ta 'ħidma ma' indikaturi. Allura li għaddej biex jitkellmu dwar ċerti kunċetti li aħna tkopri fl- Pointers video, u aħna qed se tinjora minnhom issa, jekk wieħed jassumi li dawn qed diġà tip ta 'mifhuma. Allura dan huwa biss twissija leali tiegħek li jekk int tara dan il-video u inti ma bbenefikawx l- pointers video, jista tip ta ' fly fuq kap tiegħek ftit. U għalhekk jista 'jkun aħjar sabiex isegwu din f'dik l-ordni. Allura aħna diġà raw wieħed mod biex jaħdmu ma pointers, li hija aħna tiddikjara varjabbli, u allura aħna tiddikjara varjabbli ieħor, pointer varjabbli, li l-punti lilha. Allura konna ħoloq varjabbli ma 'isem, konna ħolqot it-tieni varjabbli ma 'isem, u aħna punt li t-tieni varjabbli f'dak ewwel. Din it-tip ta jkollha problema għalkemm, minħabba li twassalna sabiex tkun taf eżattament kemm memorja kemm aħna qed ser jeħtieġu l-mument programm tagħna hija miġbura. Għaliex huwa li? Għaliex aħna jeħtieġu li jkunu kapaċi biex insemmu jew jidentifikaw il-varjabbli kollha possibbli nistgħu jiltaqgħu. Aħna jista 'jkollhom firxa li jista' jkun kapaċi li jkollhom ħafna ta 'informazzjoni, iżda huwa għadu ma eżattament preċiżi biżżejjed. X'jiġri jekk ma nafux, dak jekk aħna għandna ebda idea kemm aħna bzonn fil-ħin jikkompilaw? Jew dak jekk programm tagħna se run għal żmien twil verament, taċċetta utent varji data, u ma nistgħux verament jistma jekk aħna qed ser jeħtieġu 1,000 unità? Mhuwiex simili nistgħu jgħidu fil-linja tal-kmand jidħol kemm oġġetti taħseb li għandek bzonn. Ukoll jekk dak li raden huwa ħażin? Allokazzjoni memorja dinamika tip ta 'jippermetti t-triq biex tikseb madwar din il-problema partikolari. U l-mod tagħmlu huwa bl-użu pointers. Nistgħu nużaw indikaturi għall jiksbu aċċess għal dinamikament memorja allokati, memorja li hija allokati kif program tiegħek tkun qed taħdem. Mhuwiex allokat fil-ħin jikkompilaw. Meta inti dinamikament talloka memorja niġu minn grupp tal-memorja magħrufa bħala l-borġ. Preċedentement il-memorja konna ilha taħdem magħhom fil-kors ġie ġejjin minn grupp tal-memorja magħrufa bħala l-munzell. Mod tajjeb biex ġeneralment iżomm mind-- u din ir-regola mhux dejjem iżżomm veru, iżda pjuttost ħafna kważi dejjem istivi true-- huwa li kull darba li inti tagħti isem varjabbli it probabbilment ħajjiet fuq il-munzell. U kull darba li inti ma jagħtu varjabbli isem, li inti tista 'tagħmel bil-memorja dinamika allokazzjoni, jgħix fuq il-borġ. Issa jien tip ta 'preżentazzjoni ta' din kif jekk hemm dawn iż-żewġ ġabriet ta 'memorja. Iżda int tista raw dan dijagramma, li hija ġeneralment rappreżentazzjoni ta ' dak memorja Dehra, u aħna mhux qed tmur għall-kura dwar l l-għalf fil-quċċata u l-qiegħ. What we care about hija din il-parti fil nofs hawn, borġ u munzell. Kif tistgħu taraw mill tħares lejn dan dijagramma, dawn fil-fatt huma mhux tnejn pools separati ta 'memorja. Huwa wieħed ġabra kondiviża ta 'memorja fejn tibda, f'dan viżwali tibda fil-qiegħ u jibdew mili mill-qiegħ bil-munzell, u inti tibda fil-quċċata u l-bidu mili mill-top down bl-borġ. Imma dan huwa verament l- istess pool, huwa biss spots differenti, f'postijiet differenti fil-memorja li qed jiġu allokati. U inti tista 'taħdem barra mill- memorja billi jew li -borġ jmorru it-triq kollha mal-qiegħ, jew ikollhom il-munzell tmur it-triq lejn il-wiċċ, jew li l-munzell u l munzell jiltaqgħu kontra xulxin. Kollha ta 'dawn jistgħu jkunu kundizzjonijiet li jikkawżaw program tiegħek li jispiċċaw ta 'memorja. Sabiex iżommu dan f'moħħhom. Meta nitkellmu dwar -borġ u l munzell aħna qed verament jitkellem dwar il- istess blokki ġenerali tal-memorja, just porzjonijiet differenti ta 'dak memorja. Allura kif nistgħu tikseb dinamiku allokati memorja fl-ewwel post? Kif programm tagħna jiksbu memorja kif huwa taħdem? Well C jipprovdi funzjoni msejħa malloc, allokatur memorja, li inti tagħmel sejħa biex, u inti tgħaddi fil kif bytes ta 'memorja li inti tixtieq ħafna. Mela jekk program tiegħek tkun qed taħdem u inti tixtieq runtime numru sħiħ, inti tista mallock erba 'bytes ta' memorja, malloc parentesi erbgħa. mallock se jgħaddu tfittex permezz-borġ, għaliex aħna qed dinamiku allokazzjoni memorja, u se terġa 'lura lilek a pointer għal dak memorja. Ma jtik li memory-- ma tagħtiha isem, tagħtik pointer lilha. U hekk hu għalhekk darb'oħra I said li huwa importanti li forsi jkollhom jaraw il-video pointers qabel nikbru wisq fis dan. Allura malloc għaddej biex jagħtuk lura pointer. Jekk mallock ma jista 'jagħtik xi memorja għaliex inti ħadthom jispiċċaw, dan ser jagħtuk lura pointer null. Do you remember dak li jiġri jekk aħna ipprova u dereference pointer null? Aħna jbatu tort seg, right? Li probabbilment mhux tajba. Allura kull darba li inti tagħmel sejħa li malloc inti dejjem, dejjem bżonn li jiċċekkja jekk il- pointer huwa ħadt lura huwa null. Jekk huwa, inti għandek bżonn biex tintemm program tiegħek għaliex jekk inti tipprova u dereference il pointer null int ser li jbatu tort segmentazzjoni u l-programm tiegħek huwa ser crash xorta waħda. Allura kif nistgħu statikament jiksbu integer? int x. Imxejna probabbilment għamlu dan mazz ta 'drabi, id-dritt? Dan joħloq varjabbli imsejjaħ x li jgħix fuq il-munzell. Kif nistgħu dinamikament jiksbu integer? Int px star ugwali malloc 4. Jew b'mod aktar xieraq aħna'd ngħidu px star int ugwali daqs malloc ta 'int, biss biex titfa 'inqas numri magic madwar programm tagħna. Dan se jinkiseb għalina erba 'bytes ta' memorja mill-borġ, u l-pointer nikbru lura għall huwa msejjaħ px. U mbagħad biss kif konna isir qabel we jista dereference px li aċċess li l-memorja. Kif nikbru integer mill-utent? Nistgħu ngħidu int x ugwali tikseb int. Li pjuttost sempliċi. X'jiġri jekk irridu noħolqu firxa ta 'x sufruni li jgħixu fuq il-munzell? float stack_array-- dak l-isem tal array-- tagħna parentesi kwadri x. Li se toħloq għalina firxa ta 'x sufruni li jgħixu fuq il-munzell. Nistgħu noħolqu firxa ta 'sufruni li jgħix fuq l-borġ, wisq. Is-sintassi tista 'tidher a ftit aktar diffiċli, iżda nistgħu ngħidu float heap_array star ugwali malloc x darbiet id-daqs tal-float. I bżonn spazju biżżejjed biex iżomm x f'wiċċ l-ilma valuri tal-punti. Allura ngħid I bżonn 100 sufruni, jew 1,000 floats. Allura f'dak il-każ ikun 400 bytes għal 100 sufruni, jew 4,000 bytes għal 1,000 sufruni, għax kull float jieħu erba 'bytes ta' spazju. Wara li tagħmel dan nista 'nuża l- sintassi bracket kwadru fuq heap_array. Just kif nixtieq fuq stack_array, I tista 'aċċess elementi tagħha individwalment użu heap_array żero, wieħed heap_array. Iżda tfakkar r-raġuni nistgħu nagħmlu dan huwa minħabba l-isem ta 'firxa fis-C huwa verament pointer li ewwel element li firxa ta. Allura l-fatt li aħna qed tkun iddikjarat li firxa ta 'sufruni fuq il-munzell hawn huwa attwalment daqsxejn qarrieqa. Aħna verament huma fil- tieni linja tal-kodiċi hemmhekk ħolqien wkoll pointer għal blokki ta ' memorja li aħna mbagħad jagħmlu xi xogħol magħhom. Hawn il-problema kbira ma dinamikament allokati memorja għalkemm, u dan huwa għaliex huwa verament importanti li jiġu żviluppati xi drawwiet tajba meta inti qed jaħdmu magħha. B'differenza statikament iddikjarat memorja, memorja tiegħek mhux awtomatikament lura lill- sistema meta funzjoni tiegħek isir. Mela jekk ikollna prinċipali, u prinċipali jitlob funzjoni f, meta f finituri dak kollu li qed jagħmel u prospetti kontroll tal-programm lura għall ewlenija, kollha tal-memorja li f użati jingħata lura. Huwa jista 'jerġa' jintuża minn xi programm ieħor, jew xi funzjoni oħra li gets imsejħa aktar tard fil prinċipali. Hija tista 'tuża l-istess memorja aktar mill-ġdid. Jekk inti dinamikament jallokaw memorja għalkemm inti għandek tgħid b'mod espliċitu l- sistema li qed isir magħha. Hija ser żżomm fuq dan għalik, li jistgħu jwassal għal problema ta 'inti taħdem barra tal-memorja. U fil-fatt aħna kultant jirreferu għal dan bħala nixxija memorja. U xi kultant dawn tnixxijiet memorja jista 'attwalment jiġi verament devastanti għall-prestazzjoni tas-sistema. Jekk int utent internet frekwenti inti tista 'tuża ċerti web browsers, u jien mhux se isem ismijiet hawn, iżda hemm xi browsers web hemmhekk li huma notorji għal fatt li tnixxijiet memorja li ma jsibux fissi. U jekk inti tħalli browser tiegħek miftuħa għal perjodu twil ħafna ta 'żmien, ġranet u ġranet, jew ġimgħat, inti xi kultant tista 'tinnota li s-sistema tiegħek huwa running tassew, tassew bil-mod. U r-raġuni għal dan hija li l-browser allokat memorja, iżda mbagħad ma qal is-sistema li huwa jsir minnu. U hekk li l-weraq memorja inqas disponibbli għal kulħadd ta 'programmi oħra tiegħek li jkollhom jaqsmu, għax int leaking-- li web browser programm qed tqattar memorja. Kif nistgħu jagħtuk memorja lura meta aħna qed isir magħha? Ukoll fortunatament huwa Mod faċli ħafna biex jagħmlu dan. Aħna biss ħielsa it. Hemm funzjoni msejħa ħielsa, hija taċċetta pointer għall-memorja, u aħna qed imorru tajjeb. Mela ejja ngħidu aħna qed fil- nofs tal-programm tagħna, irridu li malloc 50 karattru. Aħna rridu li malloc firxa li jistgħu kapaċi jżomm 50 karattru. U meta aħna jiksbu pointer lura għall li, isem li pointer huwa kelma. We do dak kollu aħna qed se jagħmlu ma 'kelma, u mbagħad meta nkunu isir aħna biss ħielsa it. U issa għandna lura dawk 50 bytes ta 'memorja lura għas-sistema. Xi funzjoni oħra jistgħu jużawhom. Aħna ma jkollhom għalfejn tinkwieta dwar ssofri nixxija memorja għaliex għandna meħlusa kelma. Imxejna minħabba l-memorja lura, hekk aħna qed isir jaħdmu magħha. Allura hemm tliet regoli tad-deheb li għandhom jinżamm fil-moħħ meta int dinamikament allokazzjoni memorja ma malloc. Kull blokk ta 'memorja li inti malloc għandhom ikunu meħlusa qabel program tiegħek finituri running. Issa mill-ġdid, fil-appliance jew fil- IDE dan it-tip ta 'jiġri għalik xorta meta you-- dan se jiġri xorta waħda meta programm tiegħek jiġi tterminat, l-memorja se jiġu rilaxxati. Imma hija kodifikazzjoni ġeneralment tajba prattika li dejjem, meta qed isir, ħielsa dak li għandek mallocd. Cela dit, uniċi affarijiet li inti stajt mallocd għandhom jinħelsu. Jekk inti statikament jiddikjaraw numru sħiħ, int x semi-colon, li jgħix fuq l-munzell, inti ma allura jridux ħielsa x. Allura uniċi affarijiet li inti stajt mallocd għandhom jinħelsu. U fl-aħħarnett, ma xi ħaġa b'xejn darbtejn. Li jistgħu jwasslu għal sitwazzjoni stramb ieħor. Allura dak kollu li inti stajt mallocd għandha jinħelsu. Affarijiet biss li inti stajt malloc għandhom jinħelsu. U ma xi ħaġa b'xejn darbtejn. Mela ejja jmorru permezz ta 'eżempju hawn ta 'dak li xi dinamiku allokat memorja jista 'dehra mħallta ma xi memorja statika. X'jista 'jiġri hawn? Ara jekk inti tista 'ssegwi flimkien u raden x'hemm se jiġri bħala immorru permezz ta 'dawn il-linji kollha ta' kodiċi. Allura aħna ngħidu int m. X'jiġri hawn? Ukoll dan huwa pjuttost sempliċi. I joħolqu varjabbli numru sħiħ imsejħa m. I kulur it aħdar, għaliex dak l-kulur li nuża meta jien jitkellem dwar varjabbli numru sħiħ. Huwa kaxxa. Huwa sejjaħ m, u inti tista ' interi maħżen ġewwa ta 'dan. X'jiġri jekk I imbagħad ngħid star int a? Ukoll li pjuttost simili. Jien ħolqien kaxxa msejħa a. Huwa kapaċi li int azjenda stilla, pointers għal interi. Hekk jien kulur it aħdar ish ukoll. Naf li xi ħaġa li tagħmel ma 'numru sħiħ, iżda mhux nnifisha numru sħiħ. Imma hija pjuttost l-istess idea. Stajt ħolqot kaxxa. Kemm minn dawn id-dritt issa jgħixu fuq il-munzell. Stajt tawhom kemm l-ismijiet. star int b ugwali daqs malloc ta 'int. Dan wieħed jista 'jkun ftit delikata. Tieħu t-tieni u jaħsbu dwar dak li tistenna li jiġri fuq dan dijagramma. star int b ugwali daqs malloc ta 'int. Ukoll dan ma biss toħloq kaxxa waħda. Dan fil-fatt joħloq żewġ kaxxi. U hija torbot, huwa jistabbilixxi wkoll punt fl-relazzjoni. Imxejna allokat blokka waħda tal-memorja fuq il-borġ. Avviż li l-kaxxa lemin ta 'fuq hemm ma jkollux isem. Aħna mallocd dan. Hija teżisti fis-borġ. Iżda b għandha isem. Huwa varjabbli pointer imsejjaħ b. Li jgħix fuq il-munzell. Allura huwa biċċa ta 'memorja li l-punti ma 'xulxin. b fih l-indirizz ta 'dik blokk ta' memorja. Huwa ma jkollu l-isem mod ieħor. Iżda dan jindika lilha. Allura meta ngħidu star int b ugwali daqs malloc ta 'int, li hemm dritt, li vleġġa li feġġ fuq l- lemin hemm, li ħaġa sħiħa, I ser ikollhom jidher għal darb'oħra, huwa dak li jiġri. Kollha ta 'li jiġri fil li linja waħda tal-kodiċi. Issa aħna ser tingħata ftit aktar sempliċi mill-ġdid. a ugwali ampersand m. Tiftakar dak ugwali ampersand m hu? Ukoll li l-gets indirizz m ta. Jew imqiegħda aktar permezz tad-dijagramma, punti li m. a ugwali b. OK hekk hawn xulxin. A ugwali b. X'hemm jiġri għall-dijagramma dan iż-żmien? Ukoll ifakkar li l- xogħlijiet operatur assenjazzjoni billi jassenja l-valur fis- dritt għall-valur fuq ix-xellug. Allura minflok ta 'tipponta lejn m, a issa jindika l-istess post li l-punti b. a ma jwassalx biex b, a jinnota punti fejn b. Jekk osservat li b li kienu ugwali ampersand b. Iżda minflok ugwali b biss ifisser li aub huma issa tipponta lejn l-istess indirizz, minħabba ġewwa tal b huwa biss l-indirizz. U issa ġewwa ta 'l-istess indirizz. m ugwali għal 10, probabbilment l- aktar ħaġa sempliċi aħna ghamilt fil ftit. Poġġi l-10 fil-kaxxa. Star b ugwali m flimkien ma '2, jitlob lura mingħandhom pointers vidjo tagħna dak star b jfisser. Aħna qed tmur biex dereference bu mressqa xi valur f'dak il-lok memorja. F'dan il-każ 12. Allura meta aħna dereference punt ta ' ifakkar aħna biss ivvjaġġar l-vleġġa. Jew fi kliem ieħor, aħna tmur f'dak indirizz memorja u aħna jimmanipulaw dan b'xi mod. Npoġġux xi valur fil hemmhekk. F'dan il-każ star b ugwali m plus 2 huwa biss mur l-varjabbli indikat mill b, mur l-memorja indikat mill b, u mqiegħda m plus 2 fil hemm, 12. Issa I mingħajr b. X'jiġri meta I mingħajr b? Ftakar dak li għidt mezzi ħielsa. What am I qal meta I mingħajr b? Jien jsir taħdem ma 'dan, id-dritt? I essenzjalment tagħti l-memorja. I jagħtu lura għas-sistema. I m'għandhomx bżonn dan aktar huwa dak li jien tgħidilhom, OK? Issa jekk ngħid star a huwa daqs 11 inti tista 'probabbilment diġà tgħid li xi ħaġa ħażina jiġri hawn, id-dritt? U fil-fatt jekk I ppruvaw li I probabbilment jsofrux tort segmentazzjoni. Għaliex issa, għalkemm qabel dik blokki ta 'memorja kienet xi ħaġa li kelli aċċess għal, f'dan il-punt jien issa jaċċessaw memorja li mhuwiex legali biex nagħmel l-aċċess. U kif aħna se probabbilment ifakkar, meta aħna jkollhom aċċess memorja li aħna mhux qed suppost għal mess, dak l-aktar kawża komuni ta 'segmentazzjoni tort. U hekk program tiegħi kieku crash jekk I ppruvaw jagħmlu dan. Għalhekk għal darb'oħra din hija idea tajba li tikseb tajba prattika u tajba drawwiet sodi meta jaħdmu ma malloc u ħielsa, sabiex inti ma jbatux segmentazzjoni ħsarat, u li tuża dinamikament allokat tiegħek memorja responsabbli. Jien Doug Lloyd dan huwa CS50.