1 00:00:00,000 --> 00:00:00,499 2 00:00:00,499 --> 00:00:01,395 [Musiikkia] 3 00:00:01,395 --> 00:00:05,590 4 00:00:05,590 --> 00:00:07,940 >> DOUG Lloyd: ok niin ehdotus ennen täällä. 5 00:00:07,940 --> 00:00:11,660 Jos et ole katsellut video Nata saatat haluta tehdä niin ensin. 6 00:00:11,660 --> 00:00:15,860 Koska tämä video on toinen tapa työskennellä viitteitä. 7 00:00:15,860 --> 00:00:17,574 >> Joten se tulee puhua joitakin käsitteitä 8 00:00:17,574 --> 00:00:19,490 että me kattaa Nata video, ja olemme 9 00:00:19,490 --> 00:00:21,948 menossa kaunistella niitä nyt, olettaen, että ne ovat jo 10 00:00:21,948 --> 00:00:23,090 tavallaan ymmärtää. 11 00:00:23,090 --> 00:00:25,440 Niin, että vain teidän kohtuullisen varoituksen että jos näette tämän videon 12 00:00:25,440 --> 00:00:27,814 ja et ole nähnyt viitteitä video, se saattaa tavallaan 13 00:00:27,814 --> 00:00:29,610 lentää pään hieman. 14 00:00:29,610 --> 00:00:32,080 Ja niin se voisi olla parempi katsella sitä tässä järjestyksessä. 15 00:00:32,080 --> 00:00:34,710 >> Joten olemme jo nähneet yhden tapa työskennellä osoittimia, 16 00:00:34,710 --> 00:00:37,810 joka on julistamme muuttuja, ja sitten me 17 00:00:37,810 --> 00:00:42,160 toteaa toisen muuttujan, osoitin muuttuja, joka osoittaa sen. 18 00:00:42,160 --> 00:00:44,870 Joten loimme muuttujan nimi, olemme 19 00:00:44,870 --> 00:00:48,480 luotiin toinen muuttujan nimi, ja osoitamme, että toinen muuttuja 20 00:00:48,480 --> 00:00:50,220 tuohon ensin. 21 00:00:50,220 --> 00:00:52,370 Tällainen on Ongelmana kuitenkin, koska se 22 00:00:52,370 --> 00:00:54,650 vaatii meitä tietää tarkalleen kuinka paljon muistia olemme 23 00:00:54,650 --> 00:00:57,600 menossa on hetki meidän ohjelma on koottu. 24 00:00:57,600 --> 00:00:58,220 >> Miksi näin? 25 00:00:58,220 --> 00:01:03,338 Koska meidän on voitava nimetä tai tunnistaa kaikki mahdolliset muuttujat 26 00:01:03,338 --> 00:01:04,129 saatamme kohdata. 27 00:01:04,129 --> 00:01:07,910 Meillä saattaa olla array, joka voi olla pystyy pitämään paljon tietoa, 28 00:01:07,910 --> 00:01:10,110 mutta se silti ole juuri riittävän tarkka. 29 00:01:10,110 --> 00:01:12,640 Mitä jos emme tiedä, mitä jos meillä ei ole aavistustakaan 30 00:01:12,640 --> 00:01:14,370 kuinka paljon me tarvitsemme käännöksen yhteydessä? 31 00:01:14,370 --> 00:01:17,020 Tai mitä jos meidän ohjelma kestää todella kauan, 32 00:01:17,020 --> 00:01:19,810 hyväksytään eri käyttäjä tiedot, ja emme voi oikeastaan 33 00:01:19,810 --> 00:01:23,170 arvioimaan, onko olemme menossa on 1000 yksikköä? 34 00:01:23,170 --> 00:01:26,060 >> Se ei ole kuin voimme sanoa komentoriviltä 35 00:01:26,060 --> 00:01:28,040 määrittämään, kuinka monta kohdetta luulet sinun. 36 00:01:28,040 --> 00:01:31,100 No entä jos arvaus on väärin? 37 00:01:31,100 --> 00:01:34,300 Dynaaminen muistin jakamista tavallaan antaa meille tapa 38 00:01:34,300 --> 00:01:36,867 kiertää tätä ongelmaa. 39 00:01:36,867 --> 00:01:38,700 Ja miten se tekee sen on käyttää osoittimia. 40 00:01:38,700 --> 00:01:42,140 >> Voimme käyttää osoittimia pääset dynaamisesti 41 00:01:42,140 --> 00:01:45,710 jaettu muisti, muisti, joka on kohdennetaan ohjelma on käynnissä. 42 00:01:45,710 --> 00:01:48,290 Se ei ole myönnetty käännöksen yhteydessä. 43 00:01:48,290 --> 00:01:51,570 Kun dynaamisesti jakaa muistia se tulee allas 44 00:01:51,570 --> 00:01:53,795 muistia tunnetaan keon. 45 00:01:53,795 --> 00:01:56,420 Aiemmin kaikki muisti olemme työskennellyt aikana 46 00:01:56,420 --> 00:01:59,920 on lähtöisin allas muistia tunnetaan pinon. 47 00:01:59,920 --> 00:02:02,470 Hyvä tapa yleisesti pitää mind-- ja tämän säännön 48 00:02:02,470 --> 00:02:04,720 ei aina pidä paikkaansa, mutta melko paljon lähes 49 00:02:04,720 --> 00:02:09,940 sisältää aina true-- on, että kun antaa muuttujan nimi sen 50 00:02:09,940 --> 00:02:12,090 luultavasti elää pinoon. 51 00:02:12,090 --> 00:02:14,650 Ja milloin et antaa muuttujan nimi, 52 00:02:14,650 --> 00:02:19,160 jonka voit tehdä dynaamista muistia jakaminen, se elää kasaan. 53 00:02:19,160 --> 00:02:22,190 >> Nyt olen sellainen esittää tätä jos on nämä kaksi allasta muistia. 54 00:02:22,190 --> 00:02:24,740 Mutta et ehkä nähnyt tätä kaavio, joka on yleensä 55 00:02:24,740 --> 00:02:27,290 edustus mitä muisti näyttää, 56 00:02:27,290 --> 00:02:30,373 ja emme aio välittää kaikki kamaa yläosassa ja alaosassa. 57 00:02:30,373 --> 00:02:33,580 Mitä välitämme on tämä osa keskimmäinen täällä, pino ja pino. 58 00:02:33,580 --> 00:02:35,570 Kuten näette tarkastelemme tätä kaaviota, 59 00:02:35,570 --> 00:02:38,390 nämä oikeastaan ​​ole kahta erillistä allasta muistia. 60 00:02:38,390 --> 00:02:42,757 Se on yksi yhteinen uima-allas muistia mistä aloitat, tässä visuaalinen 61 00:02:42,757 --> 00:02:44,590 aloitat alareunassa ja aloittaa tankkaamalla 62 00:02:44,590 --> 00:02:48,040 pohjasta kanssa pinon, ja voit aloittaa huipulla ja aloittaa tankkaamalla 63 00:02:48,040 --> 00:02:50,072 ylhäältä alas kasaan. 64 00:02:50,072 --> 00:02:51,780 Mutta se todella on Sama allas, se on vain 65 00:02:51,780 --> 00:02:56,050 eri paikoissa, eri paikoissa muistissa, joita jaetaan. 66 00:02:56,050 --> 00:02:59,060 Ja voit loppuu muistia joko ottaa 67 00:02:59,060 --> 00:03:01,240 kasaan mennä aina pohjaan, tai on 68 00:03:01,240 --> 00:03:05,440 pino mennä huipulle, tai joilla kasaan ja pino 69 00:03:05,440 --> 00:03:06,740 tavata toisiaan vastaan. 70 00:03:06,740 --> 00:03:09,500 Kaikki nämä voivat olla edellytykset jotka aiheuttavat ohjelma 71 00:03:09,500 --> 00:03:11,030 loppuu muisti. 72 00:03:11,030 --> 00:03:11,952 Niin pitää tämä mielessä. 73 00:03:11,952 --> 00:03:13,660 Kun puhumme kasaan ja pino 74 00:03:13,660 --> 00:03:17,880 Olemme todella puhumme Sama yleinen kimpale muistia, vain 75 00:03:17,880 --> 00:03:21,930 eri osat että muisti. 76 00:03:21,930 --> 00:03:24,910 >> Joten miten saamme dynaamisesti jaettu muisti ensimmäinen paikka? 77 00:03:24,910 --> 00:03:27,740 Miten meidän ohjelma saada muistia kuin se on käynnissä? 78 00:03:27,740 --> 00:03:32,660 No C tarjoaa toiminto nimeltään malloc, muistinhallinnassa, joka 79 00:03:32,660 --> 00:03:36,810 voit soittaa, ja ohitat kuinka monta tavua muistia, jonka haluat. 80 00:03:36,810 --> 00:03:39,940 Joten jos ohjelma on käynnissä ja haluat kokonaisluku runtime, 81 00:03:39,940 --> 00:03:46,040 saatat mallock neljä tavua muisti, malloc sulkeissa neljä. 82 00:03:46,040 --> 00:03:48,540 >> mallock menee läpi katsellut kasan, 83 00:03:48,540 --> 00:03:50,750 koska olemme dynaamisesti jaettaessa muisti, 84 00:03:50,750 --> 00:03:53,500 ja se palaa teille osoittimen että muisti. 85 00:03:53,500 --> 00:03:56,180 Se ei anna teille, että memory-- se ei anna sille nimen, 86 00:03:56,180 --> 00:03:57,950 se antaa sinulle osoittimen siihen. 87 00:03:57,950 --> 00:04:00,780 Ja niin siksi jälleen sanoin että on tärkeää ehkä 88 00:04:00,780 --> 00:04:03,770 ovat seuranneet viitteitä video ennen kuin pääsemme liian pitkälle tähän. 89 00:04:03,770 --> 00:04:05,940 Joten malloc tulee antaa sinulle takaisin osoittimen. 90 00:04:05,940 --> 00:04:08,950 >> Jos mallock voi antaa teille mitään muisti koska olet loppuu, 91 00:04:08,950 --> 00:04:10,645 se tulee antaa sinulle takaisin nollaosoittimen. 92 00:04:10,645 --> 00:04:15,282 Muistatko, mitä tapahtuu, jos me yrittää dereference nollaosoittimen? 93 00:04:15,282 --> 00:04:17,019 Me kärsimme seg vika, eikö? 94 00:04:17,019 --> 00:04:18,060 Se on luultavasti ole hyvä. 95 00:04:18,060 --> 00:04:21,579 >> Joten aina kun teet puhelun että malloc aina, aina 96 00:04:21,579 --> 00:04:25,270 täytyy tarkistaa, onko osoitin se antoi sinulle takaisin on null. 97 00:04:25,270 --> 00:04:28,800 Jos se on, sinun täytyy lopettaa ohjelman koska jos yrität ja dereference 98 00:04:28,800 --> 00:04:31,360 nollaosoittimen aiot kärsiä segmentointi vika 99 00:04:31,360 --> 00:04:34,380 ja ohjelma on menossa kaatua muutenkin. 100 00:04:34,380 --> 00:04:37,190 Miten siis staattisesti saada kokonaisluku? 101 00:04:37,190 --> 00:04:37,730 >> int x. 102 00:04:37,730 --> 00:04:40,010 Olemme varmaan tehneet sitä joukko kertaa, eikö? 103 00:04:40,010 --> 00:04:43,480 Tämä luo muuttuja nimeltä X, joka elää pinoon. 104 00:04:43,480 --> 00:04:46,190 Miten dynaamisesti saadaan kokonaisluku? 105 00:04:46,190 --> 00:04:50,010 Int tähden px vastaa malloc 4. 106 00:04:50,010 --> 00:04:53,050 >> Tai asianmukaisemmin me halua sanoa int tähti px 107 00:04:53,050 --> 00:04:57,680 vastaa malloc koko int, vain heittää joitakin vähemmän 108 00:04:57,680 --> 00:04:59,740 Magic Numbers noin ohjelmaamme. 109 00:04:59,740 --> 00:05:04,140 Tämä tulee saada meille neljä tavua muistia kasasta, 110 00:05:04,140 --> 00:05:06,720 ja osoitin saamme takaisin sitä kutsutaan px. 111 00:05:06,720 --> 00:05:08,430 Ja sitten aivan kuten olemme tehty aiemmin me 112 00:05:08,430 --> 00:05:13,966 voi dereference px kohteeseen pääsyn että muisti. 113 00:05:13,966 --> 00:05:15,590 Miten saamme kokonaisluku käyttäjä? 114 00:05:15,590 --> 00:05:17,970 Voimme sanoa int x vastaa saada int. 115 00:05:17,970 --> 00:05:19,930 Se on melko yksinkertainen. 116 00:05:19,930 --> 00:05:24,030 Mitä jos haluamme luoda array X kelluu jotka elävät pinoon? 117 00:05:24,030 --> 00:05:28,210 float stack_array-- se nimi meidän array-- hakasulkuihin x. 118 00:05:28,210 --> 00:05:32,419 Joka luo meille array X kelluu jotka elävät pinoon. 119 00:05:32,419 --> 00:05:34,960 Voimme luoda erilaisia ​​kelluu joka elää kasaan, liian. 120 00:05:34,960 --> 00:05:37,330 Syntaksi saattaa näyttää hieman hankalampi, 121 00:05:37,330 --> 00:05:41,740 mutta voimme sanoa kellua tähti heap_array vastaa 122 00:05:41,740 --> 00:05:44,360 malloc X kertaa suurempi kellua. 123 00:05:44,360 --> 00:05:48,160 Minun täytyy tarpeeksi tilaa pitää X liukulukuarvoja. 124 00:05:48,160 --> 00:05:51,560 Joten sanoa Tarvitsen 100 kellukkeet, tai 1000 kellukkeet. 125 00:05:51,560 --> 00:05:54,810 Niin siinä tapauksessa olisi 400 tavua 100 kellukkeet, 126 00:05:54,810 --> 00:05:59,080 tai 4000 tavua 1000 kellukkeet, koska jokainen float vie 127 00:05:59,080 --> 00:06:01,230 neljä tavua tilaa. 128 00:06:01,230 --> 00:06:05,110 >> Kun teet tämän voin käyttää hakasulje Syntax heap_array. 129 00:06:05,110 --> 00:06:08,970 Aivan kuin tahdon päälle stack_array, I voi käyttää sen elementtejä erikseen 130 00:06:08,970 --> 00:06:11,590 käyttämällä heap_array nolla, heap_array yksi. 131 00:06:11,590 --> 00:06:15,800 Mutta muistuttaa syystä emme voi tehdä, että johtuu nimi array C 132 00:06:15,800 --> 00:06:19,990 on todella osoitin että taulukon ensimmäinen elementti. 133 00:06:19,990 --> 00:06:23,480 Niin että olemme julistamisesta joukko kelluu pinoon täällä 134 00:06:23,480 --> 00:06:24,810 on oikeastaan ​​hieman harhaanjohtava. 135 00:06:24,810 --> 00:06:27,600 Me todella ovat toinen koodiriviä siellä 136 00:06:27,600 --> 00:06:32,360 luo myös osoittimen kimpale muisti, että me sitten tehdä töitä kanssa. 137 00:06:32,360 --> 00:06:35,620 >> Tässä on suuri ongelma varataan dynaamisesti muisti kuitenkin, 138 00:06:35,620 --> 00:06:38,360 ja siksi se on todella tärkeää kehittää hyviä tapoja 139 00:06:38,360 --> 00:06:39,800 kun olet työskennellyt sen kanssa. 140 00:06:39,800 --> 00:06:43,060 Toisin kuin staattisesti julisti muisti, muisti 141 00:06:43,060 --> 00:06:46,790 ei automaattisesti palautetaan järjestelmä, kun toiminto on valmis. 142 00:06:46,790 --> 00:06:49,280 Joten jos meillä on tärkein, ja tärkein kutsuu funktiota 143 00:06:49,280 --> 00:06:53,860 f, kun f päättyy mitä se tekee ja palauttaa ohjelman hallinnan 144 00:06:53,860 --> 00:06:58,810 Takaisin kaikki muisti että f käytetty annetaan takaisin. 145 00:06:58,810 --> 00:07:01,250 Sitä voidaan käyttää uudelleen muulla ohjelma, 146 00:07:01,250 --> 00:07:04,250 tai jokin muu toiminto saa kehotti myöhemmin tärkeimmistä. 147 00:07:04,250 --> 00:07:06,970 Se voi käyttää tätä muistia uudestaan. 148 00:07:06,970 --> 00:07:09,620 >> Jos dynaamisesti varata muistia vaikka 149 00:07:09,620 --> 00:07:14,380 sinun täytyy erikseen kertoa joka olet tehnyt sen kanssa. 150 00:07:14,380 --> 00:07:18,370 Se tulee pitää kiinni sen sinulle, joka voisi johtavat ongelma sinua loppumassa 151 00:07:18,370 --> 00:07:19,290 muistia. 152 00:07:19,290 --> 00:07:22,179 Ja itse asiassa me joskus viitataan Tämän koska muistivuoto. 153 00:07:22,179 --> 00:07:24,970 Ja joskus nämä muistivuotokuvioista voi todella olla todella tuhoisa 154 00:07:24,970 --> 00:07:27,020 järjestelmän suorituskykyä. 155 00:07:27,020 --> 00:07:31,120 >> Jos olet usein internetin käyttäjä voit käyttää tiettyjä web-selaimet, 156 00:07:31,120 --> 00:07:35,630 enkä nimiä täällä, mutta jotkut selaimet siellä 157 00:07:35,630 --> 00:07:39,150 jotka ovat tunnettuja todella ottaa muistivuotoja jotka eivät saa vahvistettu. 158 00:07:39,150 --> 00:07:44,570 Ja jos jätät selaimen auki hyvin pitkän ajan kuluessa, päivää 159 00:07:44,570 --> 00:07:48,060 ja päivää, tai viikkoja, joskus saattavat huomata, että järjestelmä 160 00:07:48,060 --> 00:07:49,790 on käynnissä todella, todella hitaasti. 161 00:07:49,790 --> 00:07:54,640 Ja syy siihen on, että selain on jaettu muisti, 162 00:07:54,640 --> 00:07:57,320 mutta sitten ei kertonut järjestelmä että se on tehnyt sen kanssa. 163 00:07:57,320 --> 00:08:01,000 Ja niin, että jättää vähemmän muistia käytettävissä kaikkien teidän muiden ohjelmien 164 00:08:01,000 --> 00:08:04,480 on jakaa, koska olet leaking-- että web-selain 165 00:08:04,480 --> 00:08:06,755 Ohjelman vuotaa muistiin. 166 00:08:06,755 --> 00:08:08,880 Miten annamme muisti takaisin kun olemme tehneet sen kanssa? 167 00:08:08,880 --> 00:08:10,838 No onneksi se on erittäin helppo tapa tehdä se. 168 00:08:10,838 --> 00:08:11,710 Me vain vapauttaa se. 169 00:08:11,710 --> 00:08:15,020 Siellä on toiminto nimeltään ilmainen, se hyväksyy osoitin muisti, 170 00:08:15,020 --> 00:08:16,010 ja olemme hyvä mennä. 171 00:08:16,010 --> 00:08:18,310 >> Joten sanokaamme me olemme keskellä meidän ohjelma, 172 00:08:18,310 --> 00:08:21,970 haluamme malloc 50 merkkiä. 173 00:08:21,970 --> 00:08:25,710 Haluamme malloc array, joka voi pystyttävä pitämään 50 merkkiä. 174 00:08:25,710 --> 00:08:29,109 Ja kun saamme osoitin takaisin että, että osoitin nimi on sana. 175 00:08:29,109 --> 00:08:30,900 Teemme mitä olemme aikoo tehdä sana, 176 00:08:30,900 --> 00:08:33,440 ja sitten kun olemme tehnyt me vain vapauttaa se. 177 00:08:33,440 --> 00:08:37,460 Ja nyt olemme palanneet nuo 50 tavua muistia takaisin järjestelmään. 178 00:08:37,460 --> 00:08:40,147 Joitakin muita toiminto voi käyttää niitä. 179 00:08:40,147 --> 00:08:43,480 Meillä ei tarvitse murehtia kärsimystä muisti vuotaa koska olemme vapautettu sanan. 180 00:08:43,480 --> 00:08:46,639 Olemme antaneet muistin takaisin, joten olemme tehneet työtä se. 181 00:08:46,639 --> 00:08:48,430 Joten on kolme kultaista sääntöä, että jos 182 00:08:48,430 --> 00:08:51,700 pidettävä mielessä, kun olet dynaamisesti jaetut muisti 183 00:08:51,700 --> 00:08:52,990 kanssa malloc. 184 00:08:52,990 --> 00:08:56,480 Jokainen lohko muistia sinun malloc on vapautettava 185 00:08:56,480 --> 00:08:58,430 ennen ohjelman suorittaminen on päättynyt. 186 00:08:58,430 --> 00:09:02,029 Nyt uudelleen, että laite tai IDE tällaista tapahtuu sinulle joka tapauksessa 187 00:09:02,029 --> 00:09:04,820 kun sinä-- tämä tapahtuu joka tapauksessa kun ohjelma on päättynyt, 188 00:09:04,820 --> 00:09:06,880 kaikki muisti vapautetaan. 189 00:09:06,880 --> 00:09:10,750 Mutta se on yleensä hyvä koodaus käytännössä aina, kun olet valmis, 190 00:09:10,750 --> 00:09:13,810 vapauttaa mitä olet mallocd. 191 00:09:13,810 --> 00:09:16,690 >> Se sanoi, vain asioita, jotka olet mallocd pitäisi vapauttaa. 192 00:09:16,690 --> 00:09:19,880 Jos staattisesti julistaa kokonaisluku, int x puolipiste, 193 00:09:19,880 --> 00:09:23,500 joka elää pino, olet eivät sitten halua vapauttaa x. 194 00:09:23,500 --> 00:09:25,970 Niin vain asioita, jotka olet mallocd pitäisi vapauttaa. 195 00:09:25,970 --> 00:09:28,960 >> Ja lopuksi, älä ilmainen jotain kahdesti. 196 00:09:28,960 --> 00:09:31,170 Joka voi johtaa toinen outo tilanne. 197 00:09:31,170 --> 00:09:33,530 Joten kaikki, että olet mallocd on vapautua. 198 00:09:33,530 --> 00:09:36,000 Ainoat asiat, että olet malloc pitäisi vapauttaa. 199 00:09:36,000 --> 00:09:38,730 Ja älä ilmainen jotain kahdesti. 200 00:09:38,730 --> 00:09:43,660 >> Joten mennään läpi esimerkki tästä mitä jotkut dynaamisesti 201 00:09:43,660 --> 00:09:46,122 muisti saattaa näyttää sekoitettu on joidenkin staattinen muistia. 202 00:09:46,122 --> 00:09:47,080 Mitä voi tapahtua täällä? 203 00:09:47,080 --> 00:09:48,913 Katso jos voit seurata pitkin ja arvaa mitä 204 00:09:48,913 --> 00:09:51,720 tapahtuisi kun menemme läpi kaikki nämä riviä koodia. 205 00:09:51,720 --> 00:09:53,980 >> Joten sanomme int m. 206 00:09:53,980 --> 00:09:54,840 Mitä täällä tapahtuu? 207 00:09:54,840 --> 00:09:56,339 No tämä on melko yksinkertainen. 208 00:09:56,339 --> 00:09:59,650 Luon kokonaisluku muuttuja nimeltä m. 209 00:09:59,650 --> 00:10:01,400 Olen värittää vihreä, koska se on väri 210 00:10:01,400 --> 00:10:03,730 että käytän kun puhun noin kokonaisluku muuttujia. 211 00:10:03,730 --> 00:10:05,160 Se on laatikko. 212 00:10:05,160 --> 00:10:08,400 Sitä kutsutaan m, ja voit myymälä kokonaislukuja sen sisälle. 213 00:10:08,400 --> 00:10:12,400 >> Mitä jos en sano sitten int tähti? 214 00:10:12,400 --> 00:10:13,530 No se on melko samanlaisia. 215 00:10:13,530 --> 00:10:15,780 Olen luomassa laatikko kutsutaan. 216 00:10:15,780 --> 00:10:19,100 Se on pystyttävä pitämään int tähdet, osoittimia kokonaislukuja. 217 00:10:19,100 --> 00:10:21,570 Joten olen väritys Green-ish samoin. 218 00:10:21,570 --> 00:10:24,140 >> Tiedän, että se on jotain tehdä kokonaisluku, 219 00:10:24,140 --> 00:10:25,852 mutta se ei ole itse kokonaisluku. 220 00:10:25,852 --> 00:10:27,310 Mutta se on melko sama ajatus. 221 00:10:27,310 --> 00:10:28,101 Olen luonut laatikko. 222 00:10:28,101 --> 00:10:30,070 Molemmat oikeus nyt elää pinoon. 223 00:10:30,070 --> 00:10:32,520 Olen antanut heille molemmat nimet. 224 00:10:32,520 --> 00:10:36,750 >> int tähti b vastaa malloc koko int. 225 00:10:36,750 --> 00:10:38,560 Tämä voisi olla hieman hankala. 226 00:10:38,560 --> 00:10:44,110 Ottaa toisen ja miettiä, mitä odottaa tapahtua tässä kaaviossa. 227 00:10:44,110 --> 00:10:50,210 int tähti b vastaa malloc koko int. 228 00:10:50,210 --> 00:10:51,940 >> No tämä ei vain luoda yksi ruutu. 229 00:10:51,940 --> 00:10:53,800 Tämän itse asiassa luo kaksi laatikkoa. 230 00:10:53,800 --> 00:10:58,670 Ja se sitoo, se myös vahvistetaan kohta suhde. 231 00:10:58,670 --> 00:11:02,240 Olemme varataan yksi lohko muistia kasaan. 232 00:11:02,240 --> 00:11:05,940 Huomaa, että oikean yläkulman laatikkoon siellä ei ole nimeä. 233 00:11:05,940 --> 00:11:06,760 >> Me mallocd se. 234 00:11:06,760 --> 00:11:08,050 Se on olemassa kasaan. 235 00:11:08,050 --> 00:11:10,090 Mutta b on nimi. 236 00:11:10,090 --> 00:11:11,950 Se on osoitin muuttuja nimeltä b. 237 00:11:11,950 --> 00:11:13,910 Joka elää pinoon. 238 00:11:13,910 --> 00:11:18,250 >> Joten se on pala muistia joka viittaa toiseen. 239 00:11:18,250 --> 00:11:21,840 b sisältää osoitteen Tämän lohkon muistia. 240 00:11:21,840 --> 00:11:23,757 Se ei ole nimeä toisin. 241 00:11:23,757 --> 00:11:24,590 Mutta se osoittaa sen. 242 00:11:24,590 --> 00:11:29,760 Joten kun sanomme int tähti b vastaa malloc koko int, että oikeassa, 243 00:11:29,760 --> 00:11:33,490 että nuoli että piipahti oikealla puolella, että koko juttu, 244 00:11:33,490 --> 00:11:36,740 Otan sen näyttämään uudelleen, mitä tapahtuu. 245 00:11:36,740 --> 00:11:39,341 Kaikki tämä tapahtuu että riviäkään koodia. 246 00:11:39,341 --> 00:11:41,340 Nyt saamme hieman enemmän suoraviivainen uudelleen. 247 00:11:41,340 --> 00:11:43,330 vastaa ampersand m. 248 00:11:43,330 --> 00:11:46,280 Muistatteko mitä vastaa Ampersand m on? 249 00:11:46,280 --> 00:11:48,920 No se saa M: n osoite. 250 00:11:48,920 --> 00:11:54,150 Tai laittaa enemmän kaavamaisesti, pistettä m. 251 00:11:54,150 --> 00:11:56,360 >> vastaa b. 252 00:11:56,360 --> 00:11:57,560 OK joten tässä on toinen. 253 00:11:57,560 --> 00:11:59,230 Vastaa b. 254 00:11:59,230 --> 00:12:02,260 Mitä tulee tapahtumaan kaavion tällä kertaa? 255 00:12:02,260 --> 00:12:04,330 >> No muistuttaa, että Sijoitusoperaattori työt 256 00:12:04,330 --> 00:12:08,960 antamalla arvoa oikeus arvon vasemmalta. 257 00:12:08,960 --> 00:12:14,820 Joten sen sijaan osoittaa m, nyt viittaa samaan paikkaan, että b pistettä. 258 00:12:14,820 --> 00:12:18,900 ei osoita b, kohdissa, joissa b pistettä. 259 00:12:18,900 --> 00:12:25,280 >> Jos huomautti to b että olisi on yhtä suuri kuin ampersand b. 260 00:12:25,280 --> 00:12:28,150 Mutta sen sijaan vastaa b vain tarkoittaa, että ja b ovat nyt 261 00:12:28,150 --> 00:12:31,770 osoittaa samaan osoitteeseen, koska sisällä b on vain osoite. 262 00:12:31,770 --> 00:12:35,004 Ja nyt sisällä on sama osoite. 263 00:12:35,004 --> 00:12:37,170 m on 10, luultavasti selkein asia 264 00:12:37,170 --> 00:12:38,690 olemme tehneet vähän. 265 00:12:38,690 --> 00:12:40,460 Laita 10 ruutuun. 266 00:12:40,460 --> 00:12:45,640 Star b vastaa m + 2, muistan meidän viitteitä Video Mitä tähden b tarkoittaa. 267 00:12:45,640 --> 00:12:50,230 Aiomme dereference b ja laittaa jotkut arvo että muistipaikka. 268 00:12:50,230 --> 00:12:51,860 Tässä tapauksessa 12. 269 00:12:51,860 --> 00:12:55,300 >> Joten kun me dereference pisteen muistaa me vain matkustaa alas nuolta. 270 00:12:55,300 --> 00:12:58,205 Tai toisin sanoin, me Siirry että muistiosoitteen 271 00:12:58,205 --> 00:12:59,580 ja me manipuloida sitä jotenkin. 272 00:12:59,580 --> 00:13:00,830 Olemme laittaa arvoa siellä. 273 00:13:00,830 --> 00:13:03,960 Tällöin tähti b vastaa m plus 2 on vain 274 00:13:03,960 --> 00:13:08,230 Siirry muuttujan osoitteen sivulle b, Siirry muistin osoitteen sivulle b, 275 00:13:08,230 --> 00:13:11,750 ja laittaa m + 2 siellä, 12. 276 00:13:11,750 --> 00:13:14,970 >> Nyt olen vapaa b. 277 00:13:14,970 --> 00:13:16,490 Mitä tapahtuu, kun vapauttaa b? 278 00:13:16,490 --> 00:13:18,800 Muista mitä sanoin ilmaiseksi keinoin. 279 00:13:18,800 --> 00:13:21,920 Mitä minä puhun, kun vapauttaa b? 280 00:13:21,920 --> 00:13:23,410 >> Olen valmis työskennellyt se, oikea? 281 00:13:23,410 --> 00:13:25,702 Olen pääosin luopua muisti. 282 00:13:25,702 --> 00:13:26,910 Annan sen takaisin järjestelmään. 283 00:13:26,910 --> 00:13:33,010 En tarvitse tätä enää on mitä kerron heille, OK? 284 00:13:33,010 --> 00:13:37,390 >> Nyt jos sanon tähti vastaa 11 voit luultavasti 285 00:13:37,390 --> 00:13:40,460 jo kertoa, että jotain pahaa tulee tapahtumaan täällä, eikö? 286 00:13:40,460 --> 00:13:44,160 Ja todellakin, jos yritin, että olen luultavasti kärsisi segmentointi vika. 287 00:13:44,160 --> 00:13:47,140 Koska nyt, vaikka aiemmin että kimpale muisti 288 00:13:47,140 --> 00:13:50,220 oli jotain, että minulla oli pääsy, tässä vaiheessa 289 00:13:50,220 --> 00:13:54,590 nyt olen Muistia että ei ole laillista minun päästä. 290 00:13:54,590 --> 00:13:57,330 >> Ja kun me luultavasti muistaa, kun me käyttää muistia 291 00:13:57,330 --> 00:14:00,000 että meidän ei pitäisi koskea, se yleisin syy 292 00:14:00,000 --> 00:14:01,860 of segmentointi vika. Ja niin minun ohjelma 293 00:14:01,860 --> 00:14:05,170 olisi kaatua jos olen yrittänyt tehdä tätä. 294 00:14:05,170 --> 00:14:09,910 Joten jälleen se on hyvä saada hyviä käytäntö ja hyvät tavat syöpynyt 295 00:14:09,910 --> 00:14:12,920 työskenneltäessä malloc ja vapaa, niin että et kärsi segmentointi 296 00:14:12,920 --> 00:14:15,310 viat, ja että käytät sinun dynaamisesti 297 00:14:15,310 --> 00:14:17,370 muisti vastuullisesti. 298 00:14:17,370 --> 00:14:20,300 >> Olen Doug Lloyd tämä on CS50. 299 00:14:20,300 --> 00:14:21,947