1 00:00:00,000 --> 00:00:00,499 2 00:00:00,499 --> 00:00:01,395 [Muzikos grojimo] 3 00:00:01,395 --> 00:00:05,590 4 00:00:05,590 --> 00:00:07,940 >> Doug LLOYD: Gerai, kad pasiūlymas prieš pradedant čia. 5 00:00:07,940 --> 00:00:11,660 Jei neturite stebėjo ant vaizdo Pointeriai galbūt norėsite padaryti pirmiausia. 6 00:00:11,660 --> 00:00:15,860 Kadangi šis vaizdo įrašas yra kita būdas dirbti su rodyklėmis. 7 00:00:15,860 --> 00:00:17,574 >> Todėl ketiname kalbėti apie kai sąvokų 8 00:00:17,574 --> 00:00:19,490 kad mes dangtelį Pointeriai vaizdo, ir mes 9 00:00:19,490 --> 00:00:21,948 ketina Koloryzować jų dabar darant prielaidą, kad jie jau esate 10 00:00:21,948 --> 00:00:23,090 rūšiuoti suprantama. 11 00:00:23,090 --> 00:00:25,440 Taigi tai tik jūsų sąžiningai perspėta kad jei matote šį video 12 00:00:25,440 --> 00:00:27,814 ir jūs dar nematėte rodyklės vaizdo, ji gali rūšiuoti 13 00:00:27,814 --> 00:00:29,610 skristi virš galvos šiek tiek. 14 00:00:29,610 --> 00:00:32,080 Ir todėl jis gali būti geriau žiūrėti ta pačia tvarka. 15 00:00:32,080 --> 00:00:34,710 >> Taigi, mes jau matėme vieną būdas dirbti su rodyklėmis, 16 00:00:34,710 --> 00:00:37,810 kuris yra mūsų deklaruoti kintamasis, ir tada mes 17 00:00:37,810 --> 00:00:42,160 paskelbti kitą kintamąjį rodyklę kintamasis, kad pažymi į jį. 18 00:00:42,160 --> 00:00:44,870 Taigi Sukūrėme kintamasis su pavadinimu, mes 19 00:00:44,870 --> 00:00:48,480 sukūrė antrą kintamąjį, su pavadinimu, ir mes atkreipti, kad antrasis kintamasis 20 00:00:48,480 --> 00:00:50,220 Tuo pirmiausia. 21 00:00:50,220 --> 00:00:52,370 Tai tarsi turi problema, nors, nes tai 22 00:00:52,370 --> 00:00:54,650 reikalauja, kad mes tiksliai nežinome kiek atminties mes 23 00:00:54,650 --> 00:00:57,600 ketinate reikia momentą Mūsų programa yra parengta. 24 00:00:57,600 --> 00:00:58,220 >> Kodėl taip yra? 25 00:00:58,220 --> 00:01:03,338 Kadangi mums reikia, kad būtų galima pavadinti arba identifikuoti visas galimas kintamųjų 26 00:01:03,338 --> 00:01:04,129 mes galime susidurti. 27 00:01:04,129 --> 00:01:07,910 Mes gali turėti matrica, gali būti galėtų turėti daug informacijos, 28 00:01:07,910 --> 00:01:10,110 bet tai dar nėra tiksliai pakankamai tiksli. 29 00:01:10,110 --> 00:01:12,640 Ką daryti, jei mes nežinome, Ką daryti, jei mes neįsivaizduoju 30 00:01:12,640 --> 00:01:14,370 kiek mums reikės kompiliavimo metu? 31 00:01:14,370 --> 00:01:17,020 Arba kas, jei mūsų programa bus paleisti tikrai ilgą laiką, 32 00:01:17,020 --> 00:01:19,810 priimti įvairių vartotojų duomenys, ir mes tikrai negali 33 00:01:19,810 --> 00:01:23,170 įvertinti, ar mes ketinate reikia 1000 vienetų? 34 00:01:23,170 --> 00:01:26,060 >> Tai nėra, kaip mes galime pasakyti, komandinėje eilutėje 35 00:01:26,060 --> 00:01:28,040 įvesti, kaip daug daiktų manote, kad jums reikia. 36 00:01:28,040 --> 00:01:31,100 Na ką, jei tas spėjimas yra negerai? 37 00:01:31,100 --> 00:01:34,300 Dinaminis atminties paskirstymas rūšiuoti leidžia mums kelią 38 00:01:34,300 --> 00:01:36,867 gauti aplink šią konkrečią problemą. 39 00:01:36,867 --> 00:01:38,700 Ir kaip ji tai daro yra naudojant rodykles. 40 00:01:38,700 --> 00:01:42,140 >> Mes galime naudoti nuorodas į gauti prieigą prie dinamiškai 41 00:01:42,140 --> 00:01:45,710 skirta atminties, atminties, kuri yra skiriama kaip jūsų programa veikia. 42 00:01:45,710 --> 00:01:48,290 Tai ne skyrė kompiliavimo metu. 43 00:01:48,290 --> 00:01:51,570 Kai dinamiškai paskirstyti atminties ji ateina iš baseinu 44 00:01:51,570 --> 00:01:53,795 atminties žinomas kaip krūvą. 45 00:01:53,795 --> 00:01:56,420 Anksčiau visi atminties mes dirbu su į paskaitas 46 00:01:56,420 --> 00:01:59,920 buvo iš baseinu atminties žinomas kaip kamino. 47 00:01:59,920 --> 00:02:02,470 Geras būdas paprastai turėkite mind-- ir šios taisyklės 48 00:02:02,470 --> 00:02:04,720 ne visada pasitvirtina, bet gana daug beveik 49 00:02:04,720 --> 00:02:09,940 visada turi true-- yra tai, kad bet kokia laikas jums suteikti kintama name it 50 00:02:09,940 --> 00:02:12,090 tikriausiai gyvena ant kamino. 51 00:02:12,090 --> 00:02:14,650 Ir kiekvieną kartą, jums nereikia suteikti kintamasis yra vardą, 52 00:02:14,650 --> 00:02:19,160 kuriuos galite padaryti su dinaminės atminties paskirstymą, jis gyvena ant krūvos. 53 00:02:19,160 --> 00:02:22,190 >> Dabar aš rūšies pristatydamas tai kaip jei yra šie du baseinai atmintį. 54 00:02:22,190 --> 00:02:24,740 Bet tu gali matyti tai diagrama, kuris paprastai yra 55 00:02:24,740 --> 00:02:27,290 atstovavimo kas atminties atrodo, 56 00:02:27,290 --> 00:02:30,373 ir mes neketiname rūpintis visi viršuje ir apačioje dalykų. 57 00:02:30,373 --> 00:02:33,580 Kas mums rūpi tai dalis į viduryje čia krūvos ir kamino. 58 00:02:33,580 --> 00:02:35,570 Kaip matote pagal žiūri šioje diagramoje, 59 00:02:35,570 --> 00:02:38,390 tai iš tikrųjų yra ne du atskiri baseinai atminties. 60 00:02:38,390 --> 00:02:42,757 Tai vienas bendras baseinas atminties kur pradėti, šiame vaizdo 61 00:02:42,757 --> 00:02:44,590 pradėdami apačioje ir pradėti užpildyti 62 00:02:44,590 --> 00:02:48,040 iš apačios su kamino, ir tu pradėti viršuje ir pradėti pildymo 63 00:02:48,040 --> 00:02:50,072 iš viršaus į apačią su krūvą. 64 00:02:50,072 --> 00:02:51,780 Bet tai tikrai yra pats baseinas, tai tik 65 00:02:51,780 --> 00:02:56,050 įvairių dėmių, skirtingos vietos atmintyje, kad yra skiriama. 66 00:02:56,050 --> 00:02:59,060 Ir jūs galite paleisti iš Atmintyje arba turintys 67 00:02:59,060 --> 00:03:01,240 krūvos pereiti visą kelią į apačią, arba turi 68 00:03:01,240 --> 00:03:05,440 kamino pereiti visą kelią į viršų, arba turinti krūvą ir krūvą 69 00:03:05,440 --> 00:03:06,740 atitinka vienas prieš kitą. 70 00:03:06,740 --> 00:03:09,500 Visi šie gali būti sąlygos kad sukelti jūsų programa 71 00:03:09,500 --> 00:03:11,030 paleisti iš atminties. 72 00:03:11,030 --> 00:03:11,952 Taigi keep that in mind. 73 00:03:11,952 --> 00:03:13,660 Kai mes kalbame apie krūvos ir kamino 74 00:03:13,660 --> 00:03:17,880 mes iš tikrųjų kalbame apie Lygiai toks pats bendras riekė atminties, tiesiog 75 00:03:17,880 --> 00:03:21,930 skirtingų porcijos tos atminties. 76 00:03:21,930 --> 00:03:24,910 >> Taigi, kaip mes gauti dinamiškai skirta atminties į pirmąją vietą? 77 00:03:24,910 --> 00:03:27,740 Kaip veikia mūsų programa gauti atminties, kaip jis veikia? 78 00:03:27,740 --> 00:03:32,660 Na C turi funkciją, vadinamą malloc, atminties paskirstytojo, kuris 79 00:03:32,660 --> 00:03:36,810 skambinate į ir pereisite į kiek baitų atminties, kad norite. 80 00:03:36,810 --> 00:03:39,940 Taigi, jei jūsų programa veikia ir norite kreipsitės runtime, 81 00:03:39,940 --> 00:03:46,040 jums gali mallock keturi baitai atmintis, malloc skliaustelius keturi. 82 00:03:46,040 --> 00:03:48,540 >> mallock bus eiti per ieško per krūvą, 83 00:03:48,540 --> 00:03:50,750 nes mes dinamiškai Skirstant atmintį, 84 00:03:50,750 --> 00:03:53,500 ir jis sugrįš pas jus rodyklė į tą atmintį. 85 00:03:53,500 --> 00:03:56,180 Jis neturi duoti jums, kad memory-- tai nesuteikia jai pavadinimą, 86 00:03:56,180 --> 00:03:57,950 ji suteikia jums žymiklį į jį. 87 00:03:57,950 --> 00:04:00,780 Ir taip, tai kodėl vėl pasakiau kad svarbu gal 88 00:04:00,780 --> 00:04:03,770 stebėjo rodyklės vaizdo Prieš mes gauname per toli į tai. 89 00:04:03,770 --> 00:04:05,940 Taigi malloc ketina duoti jums atgal žymiklį. 90 00:04:05,940 --> 00:04:08,950 >> Jei mallock negali suteikti jums bet atminties, nes jūs baigsis, 91 00:04:08,950 --> 00:04:10,645 tai duosiu jums atgal null žymeklį. 92 00:04:10,645 --> 00:04:15,282 Ar pamenate, kas atsitinka, jei mes pabandyti ir dereference null pointer? 93 00:04:15,282 --> 00:04:17,019 Mes patirti SEG kaltės, tiesa? 94 00:04:17,019 --> 00:04:18,060 Tai tikriausiai nėra gera. 95 00:04:18,060 --> 00:04:21,579 >> Taigi kiekvieną kartą, kai jūs skambinate į malloc jus visada, visada 96 00:04:21,579 --> 00:04:25,270 reikia patikrinti, ar žymiklį jis davė jums atgal yra niekinis. 97 00:04:25,270 --> 00:04:28,800 Jei taip, tai jums reikia baigti savo programą nes jei bandysite ir dereference 98 00:04:28,800 --> 00:04:31,360 null pointer jūs ketinate patirti segmentavimo kaltės 99 00:04:31,360 --> 00:04:34,380 ir jūsų programa yra vyksta į avariją vistiek. 100 00:04:34,380 --> 00:04:37,190 Taigi, kaip mes statiškai gauti sveikąjį skaičių? 101 00:04:37,190 --> 00:04:37,730 >> int x. 102 00:04:37,730 --> 00:04:40,010 Mes tikriausiai padaryta, kad kartų krūva, tiesa? 103 00:04:40,010 --> 00:04:43,480 Tai sukuria kintamąjį vadinamą x, gyvena ant kamino. 104 00:04:43,480 --> 00:04:46,190 Kaip mes dinamiškai gauti sveikąjį skaičių? 105 00:04:46,190 --> 00:04:50,010 Žiniasklaida žvaigždė px lygus malloc 4. 106 00:04:50,010 --> 00:04:53,050 >> Arba tikslingiau mes norime pasakyti int žvaigždė px 107 00:04:53,050 --> 00:04:57,680 lygus malloc dydį int, tiesiog mesti kai mažiau 108 00:04:57,680 --> 00:04:59,740 magija numeriai aplink mūsų programoje. 109 00:04:59,740 --> 00:05:04,140 Tai ketina gauti už mus keturių baitų atminties iš krūvos, 110 00:05:04,140 --> 00:05:06,720 ir rodyklė mes gauname atgal į tai vadinama px. 111 00:05:06,720 --> 00:05:08,430 Ir tada tiesiog kaip mes padaryta anksčiau mes 112 00:05:08,430 --> 00:05:13,966 gali dereference px, kad prisijungti prie šios atmintį. 113 00:05:13,966 --> 00:05:15,590 Kaip mes gauti iš vartotojo sveikasis skaičius? 114 00:05:15,590 --> 00:05:17,970 Galime sakyti, int x lygus gauti int. 115 00:05:17,970 --> 00:05:19,930 Tai gana paprasta. 116 00:05:19,930 --> 00:05:24,030 Ką daryti, jei norime sukurti masyvą X plūdės, kurie gyvena ant kamino? 117 00:05:24,030 --> 00:05:28,210 plūduriuoti stack_array-- tai pavadinimas mūsų array-- laužtiniuose skliaustuose x. 118 00:05:28,210 --> 00:05:32,419 Tai sukurs mums masyvo X plūdės, kurie gyvena ant kamino. 119 00:05:32,419 --> 00:05:34,960 Mes galime sukurti iš plūdės masyvo kuris gyvena ant krūvos, taip pat. 120 00:05:34,960 --> 00:05:37,330 Sintaksė gali atrodyti šiek tiek daugiau sudėtinga, 121 00:05:37,330 --> 00:05:41,740 bet mes galime pasakyti plūdę žvaigždučių heap_array lygus 122 00:05:41,740 --> 00:05:44,360 malloc x kartų didesnis už plūdės dydį. 123 00:05:44,360 --> 00:05:48,160 Man reikia pakankamai vietos laikyti x slankiojo kablelio vertybes. 124 00:05:48,160 --> 00:05:51,560 Taigi sako, man reikia 100 plūdės, arba 1,000 plūdės. 125 00:05:51,560 --> 00:05:54,810 Taigi, tuo atveju, kad būtų 400 baitų 100 plūdes, 126 00:05:54,810 --> 00:05:59,080 arba 4000 baitų 1000 plūdės, nes kiekvienas plūdė užima 127 00:05:59,080 --> 00:06:01,230 keturių baitų vietos. 128 00:06:01,230 --> 00:06:05,110 >> Atlikę tai galiu naudoti kvadratinių laikiklis sintaksė ant heap_array. 129 00:06:05,110 --> 00:06:08,970 Lygiai taip pat aš norėčiau ant stack_array, aš gali prieiti prie jo elementus atskirai 130 00:06:08,970 --> 00:06:11,590 naudojant heap_array nulis, heap_array vienas. 131 00:06:11,590 --> 00:06:15,800 Bet prisiminti priežastį mes galime padaryti, kad yra todėl, kad AN C masyvo vardas 132 00:06:15,800 --> 00:06:19,990 yra tikrai rodyklė tos masyvo pirmasis elementas. 133 00:06:19,990 --> 00:06:23,480 Taigi tai, kad mes, skelbiantys masyvas plūdės ant kamino čia 134 00:06:23,480 --> 00:06:24,810 iš tiesų yra šiek tiek klaidinantis. 135 00:06:24,810 --> 00:06:27,600 Mes tikrai yra į Antroji eilutė kodo ten 136 00:06:27,600 --> 00:06:32,360 taip pat sukurti rodyklę iki riekė atminties, kad mes tada ką nors su darbu. 137 00:06:32,360 --> 00:06:35,620 >> Štai didelė problema su dinamiškai skirta atminties, nors, 138 00:06:35,620 --> 00:06:38,360 ir tai, kodėl tai tikrai svarbu plėtoti gerų įpročių 139 00:06:38,360 --> 00:06:39,800 kai dirbate su juo. 140 00:06:39,800 --> 00:06:43,060 Skirtingai nuo statiškai paskelbė atminties, jūsų atminties 141 00:06:43,060 --> 00:06:46,790 nėra automatiškai grąžinami į sistema, kai jūsų funkcija atliekama. 142 00:06:46,790 --> 00:06:49,280 Taigi, jei mes turime pagrindinis ir Pagrindinis ragina funkciją 143 00:06:49,280 --> 00:06:53,860 f, kai f apdailos kokia ji daro ir grąžina kontroliuoti programos 144 00:06:53,860 --> 00:06:58,810 atgal į pagrindinis, visi atmintyje kad f naudojamas skiriamas atgal. 145 00:06:58,810 --> 00:07:01,250 Jis gali būti naudojamas vėl kitu programos, 146 00:07:01,250 --> 00:07:04,250 arba kai kitas funkcijas, iškviečiamas vėliau ir pagrindinė. 147 00:07:04,250 --> 00:07:06,970 Jis gali naudoti tą pačią atminties vėl. 148 00:07:06,970 --> 00:07:09,620 >> Jei jums dinamiškai paskirstyti atmintį nors 149 00:07:09,620 --> 00:07:14,380 jūs turite aiškiai pasakys sistema, kad jūs baigsite su juo. 150 00:07:14,380 --> 00:07:18,370 Tai bus eiti į jį už jus, kurie galėtų sukelti problemų iš jūsų bėga 151 00:07:18,370 --> 00:07:19,290 atminties. 152 00:07:19,290 --> 00:07:22,179 Ir iš tiesų kartais skaitykite tai kaip atminties nutekėjimas. 153 00:07:22,179 --> 00:07:24,970 Ir kartais šie atminties nutekėjimas iš tikrųjų gali būti tikrai sukrečiantys 154 00:07:24,970 --> 00:07:27,020 už sistemos veikimą. 155 00:07:27,020 --> 00:07:31,120 >> Jei esate dažnas interneto vartotojas galite naudoti tam tikras naršykles, 156 00:07:31,120 --> 00:07:35,630 ir aš ne vardų čia, bet yra keletas interneto naršyklių ten 157 00:07:35,630 --> 00:07:39,150 kurie yra žinomi dėl realiai Atminties nutekėjimas, kad negaunate fiksuotas. 158 00:07:39,150 --> 00:07:44,570 Ir jei jūs paliekate savo naršyklėje atviras Ilgą laiką, dienos 159 00:07:44,570 --> 00:07:48,060 ir dienų, savaičių, kartais pastebėsite, kad jūsų sistema 160 00:07:48,060 --> 00:07:49,790 yra veikia tikrai, tikrai lėtai. 161 00:07:49,790 --> 00:07:54,640 Ir dėl šios priežasties yra ta, kad naršyklė skyrė atmintį, 162 00:07:54,640 --> 00:07:57,320 bet tada nepasakiau sistema kad tai padaryti su juo. 163 00:07:57,320 --> 00:08:01,000 Ir taip, kad palieka mažiau atminties galima visus savo kitas programas 164 00:08:01,000 --> 00:08:04,480 turėti pasidalinti, nes esate leaking--, kad interneto naršyklė 165 00:08:04,480 --> 00:08:06,755 Programa yra nesandarus atmintį. 166 00:08:06,755 --> 00:08:08,880 Kaip mes suteikiame atmintį atgal kai mes padaryti su juo? 167 00:08:08,880 --> 00:08:10,838 Na, laimei, tai labai paprastas būdas tai padaryti. 168 00:08:10,838 --> 00:08:11,710 Mes tiesiog atlaisvinti jį. 169 00:08:11,710 --> 00:08:15,020 Yra funkcija vadinama nemokamai, ji priima žymiklį į atmintį, 170 00:08:15,020 --> 00:08:16,010 ir mes gerai eiti. 171 00:08:16,010 --> 00:08:18,310 >> Taigi tarkime, mes į viduryje mūsų programoje, 172 00:08:18,310 --> 00:08:21,970 norime malloc 50 simbolių. 173 00:08:21,970 --> 00:08:25,710 Mes norime malloc masyvą, kuris gali galima laikyti 50 simbolių. 174 00:08:25,710 --> 00:08:29,109 Ir kai mes gauti žymeklį atgal į kad, tai žymeklis vardas žodis. 175 00:08:29,109 --> 00:08:30,900 Mes darome viską, mes ketina daryti su žodžiu, 176 00:08:30,900 --> 00:08:33,440 ir tada, kai mes padaryti mes tiesiog atlaisvinti jį. 177 00:08:33,440 --> 00:08:37,460 Ir dabar mes grįžo tuos 50 baitųatminties atgal į sistemą. 178 00:08:37,460 --> 00:08:40,147 Kai kurios kitos funkcijos gali juos naudoti. 179 00:08:40,147 --> 00:08:43,480 Neturime nerimauti kančių Atminties nutekėjimas, nes mes turime išlaisvinti žodį. 180 00:08:43,480 --> 00:08:46,639 Mes suteikta atmintį atgal, todėl mes baigsite dirbti su juo. 181 00:08:46,639 --> 00:08:48,430 Taigi, yra trys auksinių taisyklių, kurios turėtų 182 00:08:48,430 --> 00:08:51,700 turėti omenyje, kai jūs dinamiškai paskirstyti atmintį 183 00:08:51,700 --> 00:08:52,990 su malloc. 184 00:08:52,990 --> 00:08:56,480 Kiekvienas atminties bloką Jūs malloc turi būti paleistas 185 00:08:56,480 --> 00:08:58,430 Prieš savo programą baigia veikia. 186 00:08:58,430 --> 00:09:02,029 Dabar vėl, į prietaisą arba IDE tai tarsi vyksta už jus vistiek 187 00:09:02,029 --> 00:09:04,820 kai you-- tai įvyks vistiek kai jūsų programa nutraukiama, 188 00:09:04,820 --> 00:09:06,880 visi atminties bus išleistas. 189 00:09:06,880 --> 00:09:10,750 Bet tai iš esmės gera kodavimas praktika visada, kai baigsite, 190 00:09:10,750 --> 00:09:13,810 nemokamai ką mallocd. 191 00:09:13,810 --> 00:09:16,690 >> Beje, tik tai, kas Jūs mallocd turėtų būti išlaisvinti. 192 00:09:16,690 --> 00:09:19,880 Jei statiškai paskelbti sveikasis skaičius, int x kabliataškis, 193 00:09:19,880 --> 00:09:23,500 kuris gyvena ant kamino, jums nereikia tada noriu atlaisvinti x. 194 00:09:23,500 --> 00:09:25,970 Taigi tik tai, kas jūs mallocd turėtų būti išlaisvinti. 195 00:09:25,970 --> 00:09:28,960 >> Ir galiausiai, ne nemokamai kažką du kartus. 196 00:09:28,960 --> 00:09:31,170 Tai gali sukelti kita keista situacija. 197 00:09:31,170 --> 00:09:33,530 Taigi viskas, kad jūs mallocd turi būti išlaisvinti. 198 00:09:33,530 --> 00:09:36,000 Vieninteliai dalykai, kad jūs malloc turėtų būti išlaisvinti. 199 00:09:36,000 --> 00:09:38,730 Ir nereikia nemokamą kažką du kartus. 200 00:09:38,730 --> 00:09:43,660 >> Taigi eikime kaip pavyzdys čia ką kai kurie dinamiškai paskirstoma 201 00:09:43,660 --> 00:09:46,122 atminties gali atrodyti mišri su tam tikru statiniu atmintį. 202 00:09:46,122 --> 00:09:47,080 Kas gali atsitikti čia? 203 00:09:47,080 --> 00:09:48,913 Žr jeigu jūs galite sekti kartu ir atspėti, kas 204 00:09:48,913 --> 00:09:51,720 nutiks, kaip mes einame per visus šiuos kodo eilutes. 205 00:09:51,720 --> 00:09:53,980 >> Taigi mes sakome int m. 206 00:09:53,980 --> 00:09:54,840 Kas nutinka čia? 207 00:09:54,840 --> 00:09:56,339 Na tai gana paprasta. 208 00:09:56,339 --> 00:09:59,650 Sukurti kintamąjį vadinamą m. 209 00:09:59,650 --> 00:10:01,400 Aš spalva ji žalia, nes tai spalva 210 00:10:01,400 --> 00:10:03,730 kad aš naudoju, kai aš kalbu apie sveikieji kintamieji. 211 00:10:03,730 --> 00:10:05,160 Tai dėžutė. 212 00:10:05,160 --> 00:10:08,400 Tai vadinama m, ir jūs galite Patalpink sveikieji skaičiai viduje ji. 213 00:10:08,400 --> 00:10:12,400 >> Ką daryti, jei aš ten sako int žvaigždute? 214 00:10:12,400 --> 00:10:13,530 Gerai, kad gana panašios. 215 00:10:13,530 --> 00:10:15,780 Kuriu dėžutė vadinamas. 216 00:10:15,780 --> 00:10:19,100 Tai galima laikyti int žvaigždės, rodyklės į sveikųjų skaičių. 217 00:10:19,100 --> 00:10:21,570 Taigi, aš dažymas ji žalia ish taip pat. 218 00:10:21,570 --> 00:10:24,140 >> Žinau, kad turi kažką daryti su sveikasis skaičius, 219 00:10:24,140 --> 00:10:25,852 bet tai ne pats sveikas. 220 00:10:25,852 --> 00:10:27,310 Bet tai beveik tas pats idėja. 221 00:10:27,310 --> 00:10:28,101 Aš sukūriau langelį. 222 00:10:28,101 --> 00:10:30,070 Abu šie teisės dabar gyvena ant kamino. 223 00:10:30,070 --> 00:10:32,520 Aš davė jiems abiem pavadinimus. 224 00:10:32,520 --> 00:10:36,750 >> INT žvaigždė b lygus malloc dydį tarpt. 225 00:10:36,750 --> 00:10:38,560 Tai vienas gali būti šiek tiek sudėtinga. 226 00:10:38,560 --> 00:10:44,110 Paimkite antrą ir galvoti apie tai, ką tikėtis, kad taip atsitiktų dėl šio schemoje. 227 00:10:44,110 --> 00:10:50,210 INT žvaigždė b lygus malloc dydį tarpt. 228 00:10:50,210 --> 00:10:51,940 >> Na tai ne tik sukurti vieną langelį. 229 00:10:51,940 --> 00:10:53,800 Tai iš tiesų sukuria du langelius. 230 00:10:53,800 --> 00:10:58,670 Ir jis yra susijęs, jis taip pat nustato santykius taškas. 231 00:10:58,670 --> 00:11:02,240 Mes skiriama vieną bloką atminties dėl krūvą. 232 00:11:02,240 --> 00:11:05,940 Atkreipkite dėmesį, kad viršutiniame dešiniajame lange ten neturi vardo. 233 00:11:05,940 --> 00:11:06,760 >> Mes tai mallocd. 234 00:11:06,760 --> 00:11:08,050 Ji egzistuoja krūvos. 235 00:11:08,050 --> 00:11:10,090 Bet b turi pavadinimą. 236 00:11:10,090 --> 00:11:11,950 Tai rodyklė kintamasis vadinamas b. 237 00:11:11,950 --> 00:11:13,910 Kuris gyvena ant kamino. 238 00:11:13,910 --> 00:11:18,250 >> Taigi tai yra atminties dalis kad nurodo į kitą. 239 00:11:18,250 --> 00:11:21,840 b yra adresas tos atminties blokas. 240 00:11:21,840 --> 00:11:23,757 Ji neturi vardą kitaip. 241 00:11:23,757 --> 00:11:24,590 Bet jis nurodo į jį. 242 00:11:24,590 --> 00:11:29,760 Taigi, kai mes sakome, int žvaigždė b lygus malloc dydis int, kad tiesiai ten, 243 00:11:29,760 --> 00:11:33,490 kad rodyklė kad popped up dėl dešinė pusė yra, kad visa tai, 244 00:11:33,490 --> 00:11:36,740 Aš turiu tai atrodo vėl, kas atsitinka. 245 00:11:36,740 --> 00:11:39,341 Visa tai vyksta kad vieną eilutę kodo. 246 00:11:39,341 --> 00:11:41,340 Dabar mes gauti šiek tiek daugiau paprasta dar kartą. 247 00:11:41,340 --> 00:11:43,330 lygus Ampersand m. 248 00:11:43,330 --> 00:11:46,280 Ar prisimenate ką lygus Ampersand m yra? 249 00:11:46,280 --> 00:11:48,920 Na tai yra gauna M adresą. 250 00:11:48,920 --> 00:11:54,150 Arba įdėti daugiau schema, A nurodo m. 251 00:11:54,150 --> 00:11:56,360 >> lygus b. 252 00:11:56,360 --> 00:11:57,560 Gerai, kad čia dar vienas. 253 00:11:57,560 --> 00:11:59,230 Lygus b. 254 00:11:59,230 --> 00:12:02,260 Kas nutiks diagramoje, šį kartą? 255 00:12:02,260 --> 00:12:04,330 >> Na priminti, kad priskyrimo operatorius darbai 256 00:12:04,330 --> 00:12:08,960 priskiriant vertei teisę kairėje vertę. 257 00:12:08,960 --> 00:12:14,820 Taigi vietoj žymeklio iki m, dabar nurodo į tą pačią vietą, kad B kiekis. 258 00:12:14,820 --> 00:12:18,900 nerodo B, atkreipia kur b punktus. 259 00:12:18,900 --> 00:12:25,280 >> Jeigu nurodė, kad būtų b buvę lygu Ampersand b. 260 00:12:25,280 --> 00:12:28,150 Bet vietoj to lygu b tiesiog tai reiškia, kad ir b yra dabar 261 00:12:28,150 --> 00:12:31,770 nukreipta į tą patį adresą, nes viduje B yra tik adresas. 262 00:12:31,770 --> 00:12:35,004 Ir dabar viduje a yra tas pats adresas. 263 00:12:35,004 --> 00:12:37,170 m yra lygus 10, turbūt Paprasčiausias dalykas 264 00:12:37,170 --> 00:12:38,690 mes padaryti šiek tiek. 265 00:12:38,690 --> 00:12:40,460 Įdėkite 10 langelyje. 266 00:12:40,460 --> 00:12:45,640 Zodiako b lygus m plius 2 atsiima iš mūsų patarimų Video žvaigždė b reiškia. 267 00:12:45,640 --> 00:12:50,230 Mes ketiname dereference b ir įdėti kai toje atminties vietą vertė. 268 00:12:50,230 --> 00:12:51,860 Šiuo atveju 12. 269 00:12:51,860 --> 00:12:55,300 >> Taigi, kai mes dereference iš taško priminti mes tiesiog keliauti žemyn rodyklę. 270 00:12:55,300 --> 00:12:58,205 Kitaip tariant, mes eiti į tą atminties adresą 271 00:12:58,205 --> 00:12:59,580 ir mes manipuliuoti tam tikru būdu. 272 00:12:59,580 --> 00:13:00,830 Mes įdėti šiek tiek vertę ten. 273 00:13:00,830 --> 00:13:03,960 Šiuo atveju žvaigždutėmis b lygus m plius 2 yra tik 274 00:13:03,960 --> 00:13:08,230 pereiti prie kintamojo atkreipė dėmesį į B, eiti į atminties atkreipė dėmesį į B, 275 00:13:08,230 --> 00:13:11,750 ir įdėti m plius 2 ten, 12. 276 00:13:11,750 --> 00:13:14,970 >> Dabar aš atlaisvinti b. 277 00:13:14,970 --> 00:13:16,490 Kas atsitinka, kai aš atlaisvinti b? 278 00:13:16,490 --> 00:13:18,800 Prisiminkite, ką pasakiau nemokamai priemonėmis. 279 00:13:18,800 --> 00:13:21,920 Ką aš noriu pasakyti, kai aš atlaisvinti b? 280 00:13:21,920 --> 00:13:23,410 >> Atlikau dirbti su juo, tiesa? 281 00:13:23,410 --> 00:13:25,702 Aš iš esmės kapituliuoti atmintį. 282 00:13:25,702 --> 00:13:26,910 Aš duodu ją atgal į sistemą. 283 00:13:26,910 --> 00:13:33,010 Man nereikia tai nebėra yra ką aš sakau jiems, gerai? 284 00:13:33,010 --> 00:13:37,390 >> Dabar, jei aš sakau žvaigždute lygus 11 jūs tikriausiai galite 285 00:13:37,390 --> 00:13:40,460 jau pasakyti, kad kažką blogo nutiks čia, tiesa? 286 00:13:40,460 --> 00:13:44,160 Ir iš tiesų, jei aš bandžiau, kad aš tikriausiai būtų patirti segmentavimo kaltės. 287 00:13:44,160 --> 00:13:47,140 Nes dabar, nors anksčiau, kad atminties riekė 288 00:13:47,140 --> 00:13:50,220 buvo kažkas, kad aš turėjau prieigą prie šiuo metu 289 00:13:50,220 --> 00:13:54,590 dabar aš susipažinimo atmintį, nėra juridinis man prieiti. 290 00:13:54,590 --> 00:13:57,330 >> Ir kaip mes tikriausiai prisiminti, kai mes Access Memory 291 00:13:57,330 --> 00:14:00,000 kad mes ne turėjo paliesti, tai dažniausia 292 00:14:00,000 --> 00:14:01,860 iš segmentavimo kaltės. Ir taip mano programa 293 00:14:01,860 --> 00:14:05,170 būtų katastrofos, jei aš bandžiau tai padaryti. 294 00:14:05,170 --> 00:14:09,910 Taigi dar kartą, kad tai gera idėja gauti geras praktikos ir geros įpročiai įsišaknijęs 295 00:14:09,910 --> 00:14:12,920 Dirbdami su malloc ir nemokamai, taip, kad jūs neturite kentėti segmentaciją 296 00:14:12,920 --> 00:14:15,310 gedimai, ir kad jūs naudojate Jūsų dinamiškai paskirstoma 297 00:14:15,310 --> 00:14:17,370 atminties atsakingai. 298 00:14:17,370 --> 00:14:20,300 >> Aš Doug Lloyd tai CS50. 299 00:14:20,300 --> 00:14:21,947