1 00:00:00,000 --> 00:00:00,499 2 00:00:00,499 --> 00:00:01,395 [Zenelejátszási] 3 00:00:01,395 --> 00:00:05,590 4 00:00:05,590 --> 00:00:07,940 >> DOUG LLOYD: OK, így egy javaslat megkezdése előtt itt. 5 00:00:07,940 --> 00:00:11,660 Ha még nem nézte a videót mutatókat érdemes megtenni az első. 6 00:00:11,660 --> 00:00:15,860 Mivel ez a videó egy másik munkamódszer a mutató. 7 00:00:15,860 --> 00:00:17,574 >> Így fog beszélni néhány fogalmak 8 00:00:17,574 --> 00:00:19,490 hogy fedezze a pointerek videó, és mi vagyunk 9 00:00:19,490 --> 00:00:21,948 megy elkendőz őket most, feltételezve, hogy ők már 10 00:00:21,948 --> 00:00:23,090 fajta érteni. 11 00:00:23,090 --> 00:00:25,440 Szóval ez csak a tisztességes figyelmeztetést hogy ha látja ezt a videót 12 00:00:25,440 --> 00:00:27,814 és akkor még nem látta a mutatók videó, talán valamiféle 13 00:00:27,814 --> 00:00:29,610 repülnek a feje fölött egy kicsit. 14 00:00:29,610 --> 00:00:32,080 És ez így talán jobb nézni, hogy ebben a sorrendben. 15 00:00:32,080 --> 00:00:34,710 >> Így már láttuk az egyik munkába mutatókkal, 16 00:00:34,710 --> 00:00:37,810 ami azt nyilvánítja változó, és akkor 17 00:00:37,810 --> 00:00:42,160 Kijelentem, egy másik változó, egy mutatót változó, hogy pont azt. 18 00:00:42,160 --> 00:00:44,870 Szóval írtunk egy változó névvel, most már 19 00:00:44,870 --> 00:00:48,480 létrehozott egy második változó névvel, és akkor pont, hogy a második változó 20 00:00:48,480 --> 00:00:50,220 abban az első. 21 00:00:50,220 --> 00:00:52,370 Ez a fajta van probléma azonban, mert 22 00:00:52,370 --> 00:00:54,650 megköveteli tőlünk, hogy pontosan tudja, mennyi memóriát vagyunk 23 00:00:54,650 --> 00:00:57,600 Szükségünk lesz a pillanatot A program összeállítása. 24 00:00:57,600 --> 00:00:58,220 >> Miert van az? 25 00:00:58,220 --> 00:01:03,338 Mert kell, hogy képes megnevezni, vagy azonosíthatja a lehetséges változókat 26 00:01:03,338 --> 00:01:04,129 mi is találkozhat. 27 00:01:04,129 --> 00:01:07,910 Talán van egy tömbben, hogy lehet tudja tartani a sok információ, 28 00:01:07,910 --> 00:01:10,110 de ez még mindig nem Pontosan elég pontos. 29 00:01:10,110 --> 00:01:12,640 Mi van, ha nem tudjuk, mi van, ha fogalmunk sincs, 30 00:01:12,640 --> 00:01:14,370 mennyit kell majd fordításkor? 31 00:01:14,370 --> 00:01:17,020 Vagy mi van, ha a program futni egy nagyon hosszú idő, 32 00:01:17,020 --> 00:01:19,810 elfogadó különböző felhasználói adatokat, és nem tudjuk igazán 33 00:01:19,810 --> 00:01:23,170 megbecsülni, hogy mi vagyunk Szükségünk lesz 1000 egység? 34 00:01:23,170 --> 00:01:26,060 >> Nem olyan, mint tudjuk mondjuk a parancssorban 35 00:01:26,060 --> 00:01:28,040 írja, hogy hány elem Ön szerint lesz szüksége. 36 00:01:28,040 --> 00:01:31,100 Hát mi van, ha hisz van baj? 37 00:01:31,100 --> 00:01:34,300 Memória dinamikus fajta lehetővé teszi számunkra az utat 38 00:01:34,300 --> 00:01:36,867 kap körül ezt a problémát. 39 00:01:36,867 --> 00:01:38,700 És ahogy ez meg a segítségével mutatók. 40 00:01:38,700 --> 00:01:42,140 >> Tudjuk használni mutatókat kap hozzáférést dinamikusan 41 00:01:42,140 --> 00:01:45,710 memóriát, memória, amely felosztani a program fut. 42 00:01:45,710 --> 00:01:48,290 Ez nem osztottak fordításkor. 43 00:01:48,290 --> 00:01:51,570 Ha dinamikusan osztja memória jön egy medencében 44 00:01:51,570 --> 00:01:53,795 memória néven ismert a kupac. 45 00:01:53,795 --> 00:01:56,420 Korábban az összes memóriát voltunk óta dolgozik során 46 00:01:56,420 --> 00:01:59,920 már jön a pool memória néven ismert verem. 47 00:01:59,920 --> 00:02:02,470 Egy jó módja annak, hogy általában tartsd mind-- és ez a szabály 48 00:02:02,470 --> 00:02:04,720 nem mindig igaz, de elég sok szinte 49 00:02:04,720 --> 00:02:09,940 Mindig tartja true-- az, hogy minden időt adsz egy változó nevét 50 00:02:09,940 --> 00:02:12,090 Valószínűleg él a verem. 51 00:02:12,090 --> 00:02:14,650 És minden alkalommal, amikor nem hogy a változó nevét, 52 00:02:14,650 --> 00:02:19,160 amit tehetünk a dinamikus memória elosztása, hogy él a kupac. 53 00:02:19,160 --> 00:02:22,190 >> Most én vagyok ilyen bemutató ezt ha van a két medence a memória. 54 00:02:22,190 --> 00:02:24,740 De lehet, hogy látta ezt diagram, amely általában 55 00:02:24,740 --> 00:02:27,290 ábrázolását milyen memória néz ki, 56 00:02:27,290 --> 00:02:30,373 és mi nem fog törődni az összes A cucc a tetején és az alján. 57 00:02:30,373 --> 00:02:33,580 Mi törődünk az a részt középen van, halomból és verem. 58 00:02:33,580 --> 00:02:35,570 Mint látható a nézi ezt a diagramot, 59 00:02:35,570 --> 00:02:38,390 ezek valójában nem két külön medencék a memória. 60 00:02:38,390 --> 00:02:42,757 Ez egy megosztott medence memória ahol elkezdi, ezen a vizuális 61 00:02:42,757 --> 00:02:44,590 elkezdi alján és elkezd kitöltésével 62 00:02:44,590 --> 00:02:48,040 alulról a verem, és indítsa el a felső és elkezd kitöltésével 63 00:02:48,040 --> 00:02:50,072 felülről lefelé, a kupac. 64 00:02:50,072 --> 00:02:51,780 De ez tényleg a tudatban, hogy ez csak 65 00:02:51,780 --> 00:02:56,050 különböző helyeken, különböző helyeken a memóriában, hogy a jelenleg kiosztott. 66 00:02:56,050 --> 00:02:59,060 És akkor elfogy a memória, vagy úgy, 67 00:02:59,060 --> 00:03:01,240 a kupac megy végig az alsó, vagy 68 00:03:01,240 --> 00:03:05,440 A verem menni egészen a csúcsra, vagy amelynek a halomból és a veremből 69 00:03:05,440 --> 00:03:06,740 találkozhatnak egymással. 70 00:03:06,740 --> 00:03:09,500 Az összes ilyen lehet feltételei hogy okozhat a programban 71 00:03:09,500 --> 00:03:11,030 hogy elfogy a memória. 72 00:03:11,030 --> 00:03:11,952 Tehát hogy tartsa szem előtt. 73 00:03:11,952 --> 00:03:13,660 Amikor arról beszélünk, A halomból és a veremből 74 00:03:13,660 --> 00:03:17,880 mi valóban beszél a Ugyanez az általános darab memóriát, csak 75 00:03:17,880 --> 00:03:21,930 különböző részeit, hogy a memória. 76 00:03:21,930 --> 00:03:24,910 >> Szóval hogyan jutunk dinamikusan memóriát az első helyen? 77 00:03:24,910 --> 00:03:27,740 Hogyan tud a programunk kap memória, ez fut? 78 00:03:27,740 --> 00:03:32,660 Nos C nyújt olyan függvény is malloc, memóriafoglaló, amely 79 00:03:32,660 --> 00:03:36,810 egy hívást, hogy, és adja át a hány bájt memóriát, amit akar. 80 00:03:36,810 --> 00:03:39,940 Tehát, ha a program futása és szeretne egy egész szám runtime, 81 00:03:39,940 --> 00:03:46,040 lehet, hogy Mallock négy bájt memória, malloc zárójelben négy. 82 00:03:46,040 --> 00:03:48,540 >> Mallock megy keresztül átnéz a kupac, 83 00:03:48,540 --> 00:03:50,750 mert mi vagyunk dinamikusan memórialefoglalás, 84 00:03:50,750 --> 00:03:53,500 és ez vissza fog térni hozzád egy mutató, hogy az emlékezet. 85 00:03:53,500 --> 00:03:56,180 Nem adja azt a memory-- nem adja meg a nevét, 86 00:03:56,180 --> 00:03:57,950 ez ad egy mutatót hozzá. 87 00:03:57,950 --> 00:04:00,780 És ez az, amiért újra azt mondtam hogy ez fontos lehet, 88 00:04:00,780 --> 00:04:03,770 nézte a mutató videó mielőtt túl messzire ebbe. 89 00:04:03,770 --> 00:04:05,940 Tehát malloc fog kapsz vissza a mutató. 90 00:04:05,940 --> 00:04:08,950 >> Ha Mallock nem ad semmiféle memóriát, mert már elfogyott, 91 00:04:08,950 --> 00:04:10,645 ez ad vissza egy null pointer. 92 00:04:10,645 --> 00:04:15,282 Emlékszel, mi történik, ha megpróbálja hivatkozás feloldási egy null pointer? 93 00:04:15,282 --> 00:04:17,019 Szenvedünk egy seg hiba, ugye? 94 00:04:17,019 --> 00:04:18,060 Ez talán nem jó. 95 00:04:18,060 --> 00:04:21,579 >> Tehát minden alkalommal, amikor hívást malloc mindig, mindig 96 00:04:21,579 --> 00:04:25,270 ellenőriznie kell, függetlenül attól, hogy a pointer ez adta vissza null. 97 00:04:25,270 --> 00:04:28,800 Ha igen, meg kell, hogy vessen véget a program, mert ha megpróbálod dereference 98 00:04:28,800 --> 00:04:31,360 A null pointer fogsz szenvedni szegmens hiba 99 00:04:31,360 --> 00:04:34,380 és a program fog zuhanni egyébként. 100 00:04:34,380 --> 00:04:37,190 Szóval hogyan statikusan szerezni egy egész szám? 101 00:04:37,190 --> 00:04:37,730 >> int x. 102 00:04:37,730 --> 00:04:40,010 Mi már valószínűleg megtette egy csomó idő, ugye? 103 00:04:40,010 --> 00:04:43,480 Ez létrehoz egy változót nevű x él a verem. 104 00:04:43,480 --> 00:04:46,190 Hogyan dinamikusan kap egy egész szám? 105 00:04:46,190 --> 00:04:50,010 Int csillagos px egyenlő malloc 4. 106 00:04:50,010 --> 00:04:53,050 >> Vagy megfelelőbben azt mondanám, int csillagos px 107 00:04:53,050 --> 00:04:57,680 egyenlő malloc mérete int, Csak nem árt néhány kevesebb 108 00:04:57,680 --> 00:04:59,740 mágikus számok körül a programunk. 109 00:04:59,740 --> 00:05:04,140 Ez fog szerezni nekünk négy bájt memóriát a kupac, 110 00:05:04,140 --> 00:05:06,720 és a mutatót kapunk vissza az úgynevezett px. 111 00:05:06,720 --> 00:05:08,430 Aztán ahogy voltunk korábban megtették azt 112 00:05:08,430 --> 00:05:13,966 lehet követéssel px, hogy elérheti, hogy a memória. 113 00:05:13,966 --> 00:05:15,590 Hogyan jutunk értéke a felhasználó? 114 00:05:15,590 --> 00:05:17,970 Elmondhatjuk, int x = int kap. 115 00:05:17,970 --> 00:05:19,930 Ez elég egyértelmű. 116 00:05:19,930 --> 00:05:24,030 Mi van, ha azt akarjuk, hogy hozzon létre egy tömböt Az X úszók, hogy él a stack? 117 00:05:24,030 --> 00:05:28,210 lebegnek stack_array-- ez a neve a mi array-- szögletes zárójelben x. 118 00:05:28,210 --> 00:05:32,419 Amely megteremti számunkra egy tömböt Az X úszók, hogy él a verem. 119 00:05:32,419 --> 00:05:34,960 Mi is létrehozhatunk egy tömböt az úszók hogy él a kupac is. 120 00:05:34,960 --> 00:05:37,330 A szintaxis tűnhet egy kicsit nehézkes, 121 00:05:37,330 --> 00:05:41,740 de azt mondhatjuk, úszó csillagos heap_array egyenlő 122 00:05:41,740 --> 00:05:44,360 malloc x-szer akkora, mint az úszó. 123 00:05:44,360 --> 00:05:48,160 Szükségem van elég hely, hogy tartsa x lebegőpontos értékek. 124 00:05:48,160 --> 00:05:51,560 Tehát mondjuk van szükségem 100 úszók, vagy 1000 úszik. 125 00:05:51,560 --> 00:05:54,810 Tehát ebben az esetben nem lenne 400 bájt 100 úszók, 126 00:05:54,810 --> 00:05:59,080 vagy 4000 byte 1000 úszik, mert minden úszó vesz fel 127 00:05:59,080 --> 00:06:01,230 négy bájt területet. 128 00:06:01,230 --> 00:06:05,110 >> Miután ezt tudom használni a szögletes zárójel szintaxist heap_array. 129 00:06:05,110 --> 00:06:08,970 Mint ahogy azt tenné stack_array, én elérheti az elemeit egyenként 130 00:06:08,970 --> 00:06:11,590 segítségével heap_array nulla, heap_array egyet. 131 00:06:11,590 --> 00:06:15,800 De emlékszem az oka, amit tehetünk, hogy azért van, mert a tömb neve a C 132 00:06:15,800 --> 00:06:19,990 valóban egy mutató, tömb első eleme. 133 00:06:19,990 --> 00:06:23,480 Tehát az a tény, hogy mi nyilvánító tömb úszik a verem itt 134 00:06:23,480 --> 00:06:24,810 valójában egy kicsit félrevezető. 135 00:06:24,810 --> 00:06:27,600 Mi tényleg a második sor kódot ott 136 00:06:27,600 --> 00:06:32,360 is létre mutató egy darab memória, amit majd némi munkát. 137 00:06:32,360 --> 00:06:35,620 >> Itt van a nagy probléma dinamikusan lefoglalt memória ellenére, 138 00:06:35,620 --> 00:06:38,360 és ez az, amiért ez tényleg Fontos, hogy dolgozzon ki jó szokások 139 00:06:38,360 --> 00:06:39,800 amikor dolgozik vele. 140 00:06:39,800 --> 00:06:43,060 Ellentétben statikusan deklarált memória, a memória 141 00:06:43,060 --> 00:06:46,790 automatikusan nem tért vissza a rendszer, ha a funkciót történik. 142 00:06:46,790 --> 00:06:49,280 Tehát ha van a fő és Fő meghív egy függvényt 143 00:06:49,280 --> 00:06:53,860 f, ha f befejezi, amit csinál és visszaadja a vezérlést a program 144 00:06:53,860 --> 00:06:58,810 vissza a fő, mind a memória hogy az alkalmazott f adják vissza. 145 00:06:58,810 --> 00:07:01,250 Ezt fel lehet használni újra valamilyen másik program, 146 00:07:01,250 --> 00:07:04,250 vagy valami más, meghívásra kerül később a fő. 147 00:07:04,250 --> 00:07:06,970 Meg tudja használni, hogy ugyanaz a memória újra. 148 00:07:06,970 --> 00:07:09,620 >> Ha dinamikusan memóriát lefoglalni bár 149 00:07:09,620 --> 00:07:14,380 akkor erre figyelmeztetnünk kell a rendszer, hogy te mit kezdeni vele. 150 00:07:14,380 --> 00:07:18,370 Ez lesz kapaszkodj meg az Ön számára, ami vezethet probléma akkor fogy 151 00:07:18,370 --> 00:07:19,290 a memória. 152 00:07:19,290 --> 00:07:22,179 És valóban néha olvassa hogy ezt a memóriavesztés. 153 00:07:22,179 --> 00:07:24,970 És néha ezek a memóriavesztés is lehet igazán megsemmisítő 154 00:07:24,970 --> 00:07:27,020 a rendszer teljesítményét. 155 00:07:27,020 --> 00:07:31,120 >> Ha Ön gyakori internet felhasználó lehet használni bizonyos böngészők, 156 00:07:31,120 --> 00:07:35,630 és nem fogok neveket itt, de van néhány böngészők odakinn 157 00:07:35,630 --> 00:07:39,150 hogy a hírhedt, hogy ténylegesen memóriavesztés, hogy soha nem lesz újra. 158 00:07:39,150 --> 00:07:44,570 És ha hagyjuk nyitva a böngészőt egy nagyon hosszú ideig, napok 159 00:07:44,570 --> 00:07:48,060 és napok, vagy hetek, néha Előfordulhat, hogy a rendszer 160 00:07:48,060 --> 00:07:49,790 fut nagyon, nagyon lassan. 161 00:07:49,790 --> 00:07:54,640 És az oka, hogy az, hogy a A böngésző memóriát, 162 00:07:54,640 --> 00:07:57,320 de aztán nem mondtam a rendszer hogy kell ezt csinálni vele. 163 00:07:57,320 --> 00:08:01,000 És úgy, hogy kevesebb memória rendelkezésre álló összes többi program 164 00:08:01,000 --> 00:08:04,480 hogy meg kell osztanom, mert te leaking-- hogy webböngésző 165 00:08:04,480 --> 00:08:06,755 programot szivárog a memória. 166 00:08:06,755 --> 00:08:08,880 Hogyan adjuk memória vissza ha végeztünk vele? 167 00:08:08,880 --> 00:08:10,838 Nos szerencsére ez egy nagyon könnyű utat megtenni. 168 00:08:10,838 --> 00:08:11,710 Mi csak kiszabadítani. 169 00:08:11,710 --> 00:08:15,020 Van egy funkció úgynevezett szabad, elfogadja a mutatót a memória, 170 00:08:15,020 --> 00:08:16,010 és mi még jól jöhet. 171 00:08:16,010 --> 00:08:18,310 >> Tehát mondjuk mi vagyunk a közepén a programunk, 172 00:08:18,310 --> 00:08:21,970 akarunk malloc 50 karakter. 173 00:08:21,970 --> 00:08:25,710 Azt akarjuk, hogy malloc egy tömb, amely képes a gazdaság 50 karakter. 174 00:08:25,710 --> 00:08:29,109 És ha eljutunk egy mutatót vissza hogy ez a mutató neve szó. 175 00:08:29,109 --> 00:08:30,900 Mindent megteszünk azért vagyunk fog csinálni szó, 176 00:08:30,900 --> 00:08:33,440 majd mikor vagyunk tenni mi csak kiszabadítani. 177 00:08:33,440 --> 00:08:37,460 És most vissza azokat a 50 byte memóriát vissza a rendszer. 178 00:08:37,460 --> 00:08:40,147 Néhány egyéb funkció is használja őket. 179 00:08:40,147 --> 00:08:43,480 Nem kell aggódnia szenvedett memóriavesztés, mert már felszabadult szó. 180 00:08:43,480 --> 00:08:46,639 Már adott a memóriát vissza, így készen vagyunk vele dolgozni. 181 00:08:46,639 --> 00:08:48,430 Szóval van három aranyszabálya, hogy amennyiben 182 00:08:48,430 --> 00:08:51,700 Szem előtt kell tartani, amikor te dinamikusan memórialefoglalás 183 00:08:51,700 --> 00:08:52,990 a malloc. 184 00:08:52,990 --> 00:08:56,480 Minden blokk memória Ön malloc kell szabadítani 185 00:08:56,480 --> 00:08:58,430 mielőtt a programot lefutott. 186 00:08:58,430 --> 00:09:02,029 Most ismét a készüléket, vagy a IDE ez a fajta történik veled 187 00:09:02,029 --> 00:09:04,820 ha you-- ez meg fog történni egyébként amikor a program befejeződik, 188 00:09:04,820 --> 00:09:06,880 az összes memóriát fog megjelenni. 189 00:09:06,880 --> 00:09:10,750 De ez általában jó kódolás gyakorlatot, hogy mindig, ha végeztél, 190 00:09:10,750 --> 00:09:13,810 felszabadítani, amit mallocd. 191 00:09:13,810 --> 00:09:16,690 >> Igaz, egyetlen dolog, ami akkor már mallocd meg kell szabadítani. 192 00:09:16,690 --> 00:09:19,880 Ha statikusan hirdessen integer, int x pontosvessző, 193 00:09:19,880 --> 00:09:23,500 hogy él a verem, akkor Nem akkor szeretne felszabadítani x. 194 00:09:23,500 --> 00:09:25,970 Tehát csak a dolgok, hogy már mallocd meg kell szabadítani. 195 00:09:25,970 --> 00:09:28,960 >> És végül, nem szabad valamit kétszer. 196 00:09:28,960 --> 00:09:31,170 Ez ahhoz vezethet, hogy Egy másik furcsa helyzet. 197 00:09:31,170 --> 00:09:33,530 Szóval mindent, hogy már mallocd kell szabadítani. 198 00:09:33,530 --> 00:09:36,000 Csak a dolgok, hogy már malloc meg kell szabadítani. 199 00:09:36,000 --> 00:09:38,730 És ne szabad valamit kétszer. 200 00:09:38,730 --> 00:09:43,660 >> Szóval menjünk át egy példa itt amit néhány dinamikusan kiosztott 201 00:09:43,660 --> 00:09:46,122 memória nézhet vegyes A néhány statikus memória. 202 00:09:46,122 --> 00:09:47,080 Mi fog történni itt? 203 00:09:47,080 --> 00:09:48,913 Nézd meg, hogy kövesse mentén, és kitalálni, mi van 204 00:09:48,913 --> 00:09:51,720 fog történni, ahogy haladunk végig ezeket a sorokat a kód. 205 00:09:51,720 --> 00:09:53,980 >> Tehát azt mondjuk int m. 206 00:09:53,980 --> 00:09:54,840 Mi történik itt? 207 00:09:54,840 --> 00:09:56,339 Hát ez elég egyértelmű. 208 00:09:56,339 --> 00:09:59,650 Én hozzon létre egy egész változó nevű m. 209 00:09:59,650 --> 00:10:01,400 Én színt is zöld, mert ez a szín 210 00:10:01,400 --> 00:10:03,730 hogy tudom használni, amikor hozzád beszélek mintegy integer. 211 00:10:03,730 --> 00:10:05,160 Ez egy dobozban. 212 00:10:05,160 --> 00:10:08,400 Úgy hívják m, és akkor áruház egész belsejébe. 213 00:10:08,400 --> 00:10:12,400 >> Mit tegyek, ha majd azt mondják int csillag? 214 00:10:12,400 --> 00:10:13,530 Hát ez elég hasonló. 215 00:10:13,530 --> 00:10:15,780 Hozok létre egy doboz úgynevezett. 216 00:10:15,780 --> 00:10:19,100 Ez képes a gazdaság int csillagok, mutatókat egészek. 217 00:10:19,100 --> 00:10:21,570 Úgyhogy színezés meg a zöld-szerű is. 218 00:10:21,570 --> 00:10:24,140 >> Tudom, hogy van valami köze egy egész szám, 219 00:10:24,140 --> 00:10:25,852 de ez önmagában nem egész szám. 220 00:10:25,852 --> 00:10:27,310 De ez nagyjából ugyanaz a gondolat. 221 00:10:27,310 --> 00:10:28,101 Létrehoztam egy dobozban. 222 00:10:28,101 --> 00:10:30,070 Mindkét jobbra most él a verem. 223 00:10:30,070 --> 00:10:32,520 Én adtam nekik mindkét nevet. 224 00:10:32,520 --> 00:10:36,750 >> int csillagos b egyenlő malloc mérete int. 225 00:10:36,750 --> 00:10:38,560 Ez az egyik lehet egy kicsit trükkös. 226 00:10:38,560 --> 00:10:44,110 Vegyünk egy második és gondolni, amire elvárná, hogy történni ezen rajz. 227 00:10:44,110 --> 00:10:50,210 int csillagos b egyenlő malloc mérete int. 228 00:10:50,210 --> 00:10:51,940 >> Hát ez nem csak készíts egy dobozban. 229 00:10:51,940 --> 00:10:53,800 Ez tulajdonképpen létrehoz két doboz. 230 00:10:53,800 --> 00:10:58,670 És ez köti, ez is megállapítja egy pont egy kapcsolatban. 231 00:10:58,670 --> 00:11:02,240 Már kiosztott egy blokk A memória a kupac. 232 00:11:02,240 --> 00:11:05,940 Figyeljük meg, hogy a jobb felső mezőben ott nem volt neve. 233 00:11:05,940 --> 00:11:06,760 >> Mi mallocd meg. 234 00:11:06,760 --> 00:11:08,050 Létezik, a kupac. 235 00:11:08,050 --> 00:11:10,090 De b van neve. 236 00:11:10,090 --> 00:11:11,950 Ez egy mutató változó nevű b. 237 00:11:11,950 --> 00:11:13,910 Hogy él a verem. 238 00:11:13,910 --> 00:11:18,250 >> Tehát ez egy darab memória rámutat, hogy a másikat. 239 00:11:18,250 --> 00:11:21,840 b tartalmazza a cím hogy a blokk memória. 240 00:11:21,840 --> 00:11:23,757 Ez nem volt neve különben. 241 00:11:23,757 --> 00:11:24,590 De az mutat rá. 242 00:11:24,590 --> 00:11:29,760 Tehát amikor azt mondjuk int csillagos b egyenlő malloc mérete int, hogy ott, 243 00:11:29,760 --> 00:11:33,490 hogy nyílra bukkant fel a jobb oldalon van, az az egész dolog, 244 00:11:33,490 --> 00:11:36,740 Meglesz jelennek meg újra, hogy mi történik. 245 00:11:36,740 --> 00:11:39,341 Minden, ami történik hogy egy sor kódot is. 246 00:11:39,341 --> 00:11:41,340 Most mi lesz kicsit több egyszerű újra. 247 00:11:41,340 --> 00:11:43,330 Egy egyenlő jelet m. 248 00:11:43,330 --> 00:11:46,280 Emlékszik, milyen egyenlő jelet m? 249 00:11:46,280 --> 00:11:48,920 Hát ez egy kap m címét. 250 00:11:48,920 --> 00:11:54,150 Vagy hogy még több vázlatosan, Egy pont a m. 251 00:11:54,150 --> 00:11:56,360 >> Egy egyenlő b. 252 00:11:56,360 --> 00:11:57,560 OK így itt van még egy. 253 00:11:57,560 --> 00:11:59,230 A egyenlő B. 254 00:11:59,230 --> 00:12:02,260 Mi fog történni A rajz ebben az időben? 255 00:12:02,260 --> 00:12:04,330 >> Nos emlékeztetnek arra, hogy a értékadó operátor munkák 256 00:12:04,330 --> 00:12:08,960 értékét hozzárendeljük a jogot, hogy az érték a bal oldalon. 257 00:12:08,960 --> 00:12:14,820 Így ahelyett, hogy egy mutató m, a most rámutat, hogy ugyanazon a helyen, hogy b pont. 258 00:12:14,820 --> 00:12:18,900 Egy nem jellemző a B, a rámutat, ahol b pont. 259 00:12:18,900 --> 00:12:25,280 >> Ha egy hegyes, hogy b, amely már egy egyenlő jelet b. 260 00:12:25,280 --> 00:12:28,150 De ahelyett, hogy egy egyenlő b csak azt jelenti, hogy a és b most 261 00:12:28,150 --> 00:12:31,770 rámutatva, hogy ugyanaz a címe, mert belsejében B mindössze egy címet. 262 00:12:31,770 --> 00:12:35,004 És most belsejében egy azonos címet. 263 00:12:35,004 --> 00:12:37,170 m = 10, valószínűleg a legegyszerűbb dolog 264 00:12:37,170 --> 00:12:38,690 tettünk egy kicsit. 265 00:12:38,690 --> 00:12:40,460 Tegye a 10 a dobozban. 266 00:12:40,460 --> 00:12:45,640 Csillagok b egyenlő m plusz 2, előhívni a mutatók videó, amit csillagos b jelenti. 267 00:12:45,640 --> 00:12:50,230 Fogunk követéssel, b, és tegye bizonyos értéket, hogy memóriába. 268 00:12:50,230 --> 00:12:51,860 Ebben az esetben a 12. 269 00:12:51,860 --> 00:12:55,300 >> Tehát amikor követéssel, egy pont a emlékszem mi csak utazik le a nyíl. 270 00:12:55,300 --> 00:12:58,205 Vagy másképpen fogalmazva, mi megy, hogy a memória cím 271 00:12:58,205 --> 00:12:59,580 és mi manipulálni, hogy valamilyen módon. 272 00:12:59,580 --> 00:13:00,830 Azt hogy néhány érték ott. 273 00:13:00,830 --> 00:13:03,960 Ebben az esetben a csillag b egyenlő m plusz 2 csak 274 00:13:03,960 --> 00:13:08,230 megy a változó által mutatott b, megy a memória által mutatott b, 275 00:13:08,230 --> 00:13:11,750 és tedd m plusz 2 odabent, 12. 276 00:13:11,750 --> 00:13:14,970 >> Most ingyen b. 277 00:13:14,970 --> 00:13:16,490 Mi történik, ha szabad b? 278 00:13:16,490 --> 00:13:18,800 Emlékszel, mit mondtam ingyenes eszközöket. 279 00:13:18,800 --> 00:13:21,920 Mit mondok mikor szabad b? 280 00:13:21,920 --> 00:13:23,410 >> Végeztem vele dolgozni, ugye? 281 00:13:23,410 --> 00:13:25,702 Én alapvetően adja fel a memóriát. 282 00:13:25,702 --> 00:13:26,910 Azt adja vissza a rendszer. 283 00:13:26,910 --> 00:13:33,010 Nem kell többé ezt a amit mondok nekik, OK? 284 00:13:33,010 --> 00:13:37,390 >> Most, ha azt mondom, csillag egyenlő 11 akkor talán 285 00:13:37,390 --> 00:13:40,460 már mondani, hogy valami rossz fog történni itt, ugye? 286 00:13:40,460 --> 00:13:44,160 És valóban, ha megpróbáltam, hogy én valószínűleg szenvedne szegmens hiba. 287 00:13:44,160 --> 00:13:47,140 Mert most, bár korábban, hogy darab memória 288 00:13:47,140 --> 00:13:50,220 Volt valami, ami volt hozzáférést, ezen a ponton 289 00:13:50,220 --> 00:13:54,590 most én vagyok a memóriakártya elérésekor, hogy nem legális számomra eléréséhez. 290 00:13:54,590 --> 00:13:57,330 >> És ahogy valószínűleg emlékszem, amikor elérheti memória 291 00:13:57,330 --> 00:14:00,000 hogy nem kéne, hogy megérintse, ez a leggyakoribb oka 292 00:14:00,000 --> 00:14:01,860 A szegmentáció hibája. És így a programot 293 00:14:01,860 --> 00:14:05,170 lezuhan, ha megpróbáltam csinálni. 294 00:14:05,170 --> 00:14:09,910 Tehát ismét egy jó ötlet, hogy jó gyakorlatot és a jó szokások beleivódott 295 00:14:09,910 --> 00:14:12,920 ha dolgozik, malloc és free, úgy, hogy nem szenvednek szegmentáció 296 00:14:12,920 --> 00:14:15,310 hibák, és hogy használjon A dinamikusan kiosztott 297 00:14:15,310 --> 00:14:17,370 memória felelősségteljesen. 298 00:14:17,370 --> 00:14:20,300 >> Én Doug Lloyd ez CS50. 299 00:14:20,300 --> 00:14:21,947