1 00:00:00,000 --> 00:00:00,499 2 00:00:00,499 --> 00:00:01,395 [Speel van musiek] 3 00:00:01,395 --> 00:00:05,590 4 00:00:05,590 --> 00:00:07,940 >> DOUG LLOYD: OK so 'n voorstel voordat hier begin. 5 00:00:07,940 --> 00:00:11,660 As jy die video op nie gekyk Pointers jy dalk wil om dit eerste te doen. 6 00:00:11,660 --> 00:00:15,860 Omdat hierdie video is nog manier van werk met wysers. 7 00:00:15,860 --> 00:00:17,574 >> So dit gaan om te praat oor 'n paar konsepte 8 00:00:17,574 --> 00:00:19,490 dat ons in die dek Pointers video, en ons is 9 00:00:19,490 --> 00:00:21,948 gaan glans oor hulle nou, die veronderstelling dat hulle reeds 10 00:00:21,948 --> 00:00:23,090 soort van verstaan. 11 00:00:23,090 --> 00:00:25,440 So dit is net jou eerlike waarskuwing dat as jy sien jy hierdie video 12 00:00:25,440 --> 00:00:27,814 en jy nie gesien het nie die wysers video, kan dit soort van 13 00:00:27,814 --> 00:00:29,610 vlieg oor jou kop 'n bietjie. 14 00:00:29,610 --> 00:00:32,080 En so is dit dalk beter wees om dit te sien in daardie volgorde. 15 00:00:32,080 --> 00:00:34,710 >> So het ons reeds een gesien manier om te werk met wysers, 16 00:00:34,710 --> 00:00:37,810 wat is ons verklaar 'n veranderlike, en dan sal ons 17 00:00:37,810 --> 00:00:42,160 verklaar 'n ander veranderlike, 'n wyser veranderlike, wat verwys na dit. 18 00:00:42,160 --> 00:00:44,870 Dus het ons het 'n veranderlike met 'n naam, het ons 19 00:00:44,870 --> 00:00:48,480 het 'n tweede veranderlike met 'n naam, en ons wys dat die tweede veranderlike 20 00:00:48,480 --> 00:00:50,220 op daardie eerste. 21 00:00:50,220 --> 00:00:52,370 Hierdie soort van 'n probleem is egter, want dit 22 00:00:52,370 --> 00:00:54,650 vereis dat ons weet presies hoeveel geheue ons 23 00:00:54,650 --> 00:00:57,600 gaan die oomblik nodig ons program word saamgestel. 24 00:00:57,600 --> 00:00:58,220 >> Hoekom is dit? 25 00:00:58,220 --> 00:01:03,338 Want ons moet in staat wees om te noem of identifiseer al die moontlike veranderlikes 26 00:01:03,338 --> 00:01:04,129 Ons kan teëkom. 27 00:01:04,129 --> 00:01:07,910 Ons kan 'n verskeidenheid wat dalk het in staat wees om 'n baie inligting te hou, 28 00:01:07,910 --> 00:01:10,110 maar dit is nog nie presies presies genoeg. 29 00:01:10,110 --> 00:01:12,640 Wat gebeur as ons nie weet nie, wat as ons het geen idee 30 00:01:12,640 --> 00:01:14,370 hoeveel ons nodig het tydens kompilering? 31 00:01:14,370 --> 00:01:17,020 Of wat as ons program sal hardloop vir 'n baie lang tyd, 32 00:01:17,020 --> 00:01:19,810 aanvaar verskillende gebruikers data, en ons kan nie regtig 33 00:01:19,810 --> 00:01:23,170 skat of ons gaan 1000 eenhede nodig? 34 00:01:23,170 --> 00:01:26,060 >> Dit is nie soos ons kan sê op die opdrag lyn 35 00:01:26,060 --> 00:01:28,040 Tik hoeveel items jy dink jy nodig het. 36 00:01:28,040 --> 00:01:31,100 Wel, wat as dit raaiskoot is verkeerd? 37 00:01:31,100 --> 00:01:34,300 Dinamiese geheuetoekenning soort van laat ons die weg 38 00:01:34,300 --> 00:01:36,867 te kry om hierdie spesifieke probleem. 39 00:01:36,867 --> 00:01:38,700 En die manier waarop dit werk dit is deur die gebruik van verwysings. 40 00:01:38,700 --> 00:01:42,140 >> Ons kan verwysings na gebruik kry toegang tot dinamiese 41 00:01:42,140 --> 00:01:45,710 toegeken geheue, geheue wat as jou program toegeken is hardloop. 42 00:01:45,710 --> 00:01:48,290 Dit is tydens kompilering nie toegeken. 43 00:01:48,290 --> 00:01:51,570 Wanneer jy dinamiese toewys geheue dit kom uit 'n poel 44 00:01:51,570 --> 00:01:53,795 geheue bekend as die hoop. 45 00:01:53,795 --> 00:01:56,420 Voorheen al die geheue ons het is besig met die kursus in 46 00:01:56,420 --> 00:01:59,920 is afkomstig van 'n poel geheue bekend as die stapel. 47 00:01:59,920 --> 00:02:02,470 'N goeie manier om in die algemeen in mind-- en hierdie reël te hou 48 00:02:02,470 --> 00:02:04,720 nie altyd hou waar, maar pretty much byna 49 00:02:04,720 --> 00:02:09,940 altyd hou true-- is dat enige tyd wat jy 'n veranderlike naam gee 50 00:02:09,940 --> 00:02:12,090 waarskynlik woon op die stapel. 51 00:02:12,090 --> 00:02:14,650 En enige tyd wat jy dit nie doen nie gee 'n veranderlike 'n naam, 52 00:02:14,650 --> 00:02:19,160 wat jy kan doen met 'n dinamiese geheue toekenning, dit leef op die hoop. 53 00:02:19,160 --> 00:02:22,190 >> Nou is ek soort van die aanbieding van hierdie as as daar hierdie twee poele van die geheue. 54 00:02:22,190 --> 00:02:24,740 Maar jy kan dit gesien het diagram, wat is oor die algemeen 55 00:02:24,740 --> 00:02:27,290 'n voorstelling van wat geheue lyk, 56 00:02:27,290 --> 00:02:30,373 en ons is nie van plan om oor al omgee die dinge op die bokant en die onderkant. 57 00:02:30,373 --> 00:02:33,580 Wat ons omgee is hierdie deel in die middel hier, hoop en stapel. 58 00:02:33,580 --> 00:02:35,570 Soos jy kan sien deur kyk na hierdie diagram, 59 00:02:35,570 --> 00:02:38,390 hierdie eintlik is nie twee aparte swembaddens van die geheue. 60 00:02:38,390 --> 00:02:42,757 Dit is een van die geheue shared pool waar jy begin, in hierdie visuele 61 00:02:42,757 --> 00:02:44,590 jy begin aan die onderkant en begin vul 62 00:02:44,590 --> 00:02:48,040 van die onderkant met die stapel, en jy begin by die top en begin vul 63 00:02:48,040 --> 00:02:50,072 uit die top-down met die hoop. 64 00:02:50,072 --> 00:02:51,780 Maar dit is regtig die dieselfde swembad, dit is net 65 00:02:51,780 --> 00:02:56,050 verskillende plekke, verskillende plekke in die geheue wat toegeken word. 66 00:02:56,050 --> 00:02:59,060 En jy kan uit te voer geheue deur óf met 67 00:02:59,060 --> 00:03:01,240 die hoop gaan al die pad aan die onderkant, of 68 00:03:01,240 --> 00:03:05,440 die stapel gaan al die pad na die top, of met die hoop en die stapel 69 00:03:05,440 --> 00:03:06,740 ontmoet teen mekaar. 70 00:03:06,740 --> 00:03:09,500 Al daardie kan voorwaardes dat jou program veroorsaak 71 00:03:09,500 --> 00:03:11,030 uit geheue uit te voer. 72 00:03:11,030 --> 00:03:11,952 So hou dit in gedagte. 73 00:03:11,952 --> 00:03:13,660 Wanneer ons praat oor die hoop en die stapel 74 00:03:13,660 --> 00:03:17,880 Ons is regtig praat oor die dieselfde algemene deel van die geheue, net 75 00:03:17,880 --> 00:03:21,930 verskillende gedeeltes van daardie geheue. 76 00:03:21,930 --> 00:03:24,910 >> So hoe kry ons dinamiese geheue toegeken in die eerste plek? 77 00:03:24,910 --> 00:03:27,740 Hoe ons program te kry geheue as dit loop? 78 00:03:27,740 --> 00:03:32,660 Wel C bied 'n funksie genoem malloc, geheue allocator, wat 79 00:03:32,660 --> 00:03:36,810 jy 'n oproep te maak, en jy slaag in hoeveel bytes geheue wat jy wil. 80 00:03:36,810 --> 00:03:39,940 So as jou program loop en jy wil 'n heelgetal runtime, 81 00:03:39,940 --> 00:03:46,040 jy dalk mallock vier grepe van geheue, malloc hakies vier. 82 00:03:46,040 --> 00:03:48,540 >> mallock gaan deur soek deur die hoop, 83 00:03:48,540 --> 00:03:50,750 want ons is dinamies toekenning geheue, 84 00:03:50,750 --> 00:03:53,500 en dit sal na julle terugkeer 'n verwysing na wat die geheue. 85 00:03:53,500 --> 00:03:56,180 Dit gee jou nie dat memory-- dit nie gee dit 'n naam, 86 00:03:56,180 --> 00:03:57,950 dit gee jou 'n wyser om dit te. 87 00:03:57,950 --> 00:04:00,780 En so dit is hoekom ek weer sê dat dit belangrik is om dalk 88 00:04:00,780 --> 00:04:03,770 die wysers video gekyk voordat ons te ver na hierdie. 89 00:04:03,770 --> 00:04:05,940 So malloc gaan gee jou terug 'n wyser. 90 00:04:05,940 --> 00:04:08,950 >> As jy mallock nie kan gee geheue omdat jy uit gehardloop het, 91 00:04:08,950 --> 00:04:10,645 dit gee jou terug 'n null pointer. 92 00:04:10,645 --> 00:04:15,282 Onthou jy wat gebeur as ons probeer dereference n null pointer? 93 00:04:15,282 --> 00:04:17,019 Ons ly onder 'n seg skuld, reg? 94 00:04:17,019 --> 00:04:18,060 Dit is waarskynlik nie goed nie. 95 00:04:18,060 --> 00:04:21,579 >> So elke keer as jy 'n oproep te maak om julle altyd malloc, altyd 96 00:04:21,579 --> 00:04:25,270 nodig om te kyk of die aanwijzer dit het jy terug is van nul. 97 00:04:25,270 --> 00:04:28,800 As dit is, moet jy jou program eindig want as jy probeer en dereference 98 00:04:28,800 --> 00:04:31,360 die nul pointer jy gaan 'n segmentering skuld ly 99 00:04:31,360 --> 00:04:34,380 en jou program is gaan in elk geval crash. 100 00:04:34,380 --> 00:04:37,190 So hoe kan ons staties kry 'n heelgetal? 101 00:04:37,190 --> 00:04:37,730 >> int x. 102 00:04:37,730 --> 00:04:40,010 Ons het waarskynlik gedoen 'n klomp van die tye, reg? 103 00:04:40,010 --> 00:04:43,480 Dit skep 'n veranderlike genoem x wat leef op die stapel. 104 00:04:43,480 --> 00:04:46,190 Hoe weet ons dinamiese 'n heelgetal te verkry? 105 00:04:46,190 --> 00:04:50,010 Int star px gelyk malloc 4. 106 00:04:50,010 --> 00:04:53,050 >> Of meer toepaslik ons wil sê int star px 107 00:04:53,050 --> 00:04:57,680 gelyk malloc grootte van int, net 'n paar minder gooi 108 00:04:57,680 --> 00:04:59,740 magic nommers om ons program. 109 00:04:59,740 --> 00:05:04,140 Dit gaan kry vir ons vier grepe van die geheue van die hoop, 110 00:05:04,140 --> 00:05:06,720 en die wyser kry ons terug na dit genoem px. 111 00:05:06,720 --> 00:05:08,430 En dan, net soos ons het voorheen gedoen ons 112 00:05:08,430 --> 00:05:13,966 kan dereference px om toegang wat die geheue. 113 00:05:13,966 --> 00:05:15,590 Hoe kry ons 'n heelgetal van die gebruiker? 114 00:05:15,590 --> 00:05:17,970 Ons kan sê int x gelyk te kry int. 115 00:05:17,970 --> 00:05:19,930 Dit is redelik eenvoudig. 116 00:05:19,930 --> 00:05:24,030 Wat as ons wil 'n skikking te skep van x dryf wat lewe op die stapel? 117 00:05:24,030 --> 00:05:28,210 dryf stack_array-- dit is die naam van ons array-- vierkantige hakies x. 118 00:05:28,210 --> 00:05:32,419 Dit sal skep vir ons 'n skikking van x dryf wat lewe op die stapel. 119 00:05:32,419 --> 00:05:34,960 Ons kan 'n verskeidenheid van dryf skep wat leef op die hoop, ook. 120 00:05:34,960 --> 00:05:37,330 Die sintaksis kan kyk 'n bietjie meer omslagtig, 121 00:05:37,330 --> 00:05:41,740 maar ons kan float sê star heap_array gelyk 122 00:05:41,740 --> 00:05:44,360 malloc x keer die grootte van die float. 123 00:05:44,360 --> 00:05:48,160 Ek moet genoeg ruimte om te hou x drywende punt waardes. 124 00:05:48,160 --> 00:05:51,560 So sê ek moet 100 dryf, of 1000 dryf. 125 00:05:51,560 --> 00:05:54,810 So in daardie geval sal dit 400 grepe vir 100 dryf, 126 00:05:54,810 --> 00:05:59,080 of 4000 grepe vir 1000 dryf, want elke float neem 127 00:05:59,080 --> 00:06:01,230 vier grepe van die ruimte. 128 00:06:01,230 --> 00:06:05,110 >> Nadat dit te doen wat ek kan gebruik om die vierkante bracket sintaksis op heap_array. 129 00:06:05,110 --> 00:06:08,970 Net soos ek sou op stack_array, ek kan sy elemente individueel toegang 130 00:06:08,970 --> 00:06:11,590 gebruik van heap_array nul, heap_array een. 131 00:06:11,590 --> 00:06:15,800 Maar onthou die rede kan ons dit doen is omdat die naam van 'n skikking in C 132 00:06:15,800 --> 00:06:19,990 is regtig 'n wyser na dat array eerste element. 133 00:06:19,990 --> 00:06:23,480 So die feit dat ons 'n verklaring verskeidenheid van dryf op die stapel hier 134 00:06:23,480 --> 00:06:24,810 is eintlik 'n bietjie misleidend. 135 00:06:24,810 --> 00:06:27,600 Ons werklik is in die tweede lyn van die kode is daar 136 00:06:27,600 --> 00:06:32,360 skep ook 'n verwysing na 'n stuk van geheue dat ons dan 'n paar werk met te doen. 137 00:06:32,360 --> 00:06:35,620 >> Hier is die groot probleem met dinamiese toegeken geheue alhoewel, 138 00:06:35,620 --> 00:06:38,360 en dit is die rede waarom dit is regtig belangrik om 'n paar goeie gewoontes te ontwikkel 139 00:06:38,360 --> 00:06:39,800 wanneer jy werk met dit. 140 00:06:39,800 --> 00:06:43,060 Anders staties verklaar geheue, jou geheue 141 00:06:43,060 --> 00:06:46,790 word nie outomaties terug na die stelsel as jou funksie word gedoen. 142 00:06:46,790 --> 00:06:49,280 So as ons belangrikste en hoof noem 'n funksie 143 00:06:49,280 --> 00:06:53,860 f, toe f afwerkings wat dit doen en opgawes beheer van die program 144 00:06:53,860 --> 00:06:58,810 Terug na die hoof, almal van die geheue f gebruik word terug gegee. 145 00:06:58,810 --> 00:07:01,250 Dit kan weer gebruik word deur 'n ander program, 146 00:07:01,250 --> 00:07:04,250 of 'n ander funksie wat kry genoem later in die belangrikste. 147 00:07:04,250 --> 00:07:06,970 Dit kan dieselfde geheue weer te gebruik oor. 148 00:07:06,970 --> 00:07:09,620 >> As jy dinamies toeken geheue al 149 00:07:09,620 --> 00:07:14,380 jy het om uitdruklik vertel die stelsel wat jy klaar is met dit. 150 00:07:14,380 --> 00:07:18,370 Dit sal vashou dit vir jou, wat kan lei tot 'n probleem van julle loop uit 151 00:07:18,370 --> 00:07:19,290 van die geheue. 152 00:07:19,290 --> 00:07:22,179 En in die feit dat ons soms verwys om dit as 'n geheue lek. 153 00:07:22,179 --> 00:07:24,970 En soms hierdie geheue lekkasies eintlik kan regtig verwoestende 154 00:07:24,970 --> 00:07:27,020 vir prestasie-stelsel. 155 00:07:27,020 --> 00:07:31,120 >> As jy 'n gereelde internet gebruikers jy kan gebruik sekere webblaaiers, 156 00:07:31,120 --> 00:07:35,630 en Ek sal nie hier name noem nie, maar daar is 'n paar webblaaiers daar buite 157 00:07:35,630 --> 00:07:39,150 wat berug vir eintlik het is geheue lekkasies wat nie vaste kry. 158 00:07:39,150 --> 00:07:44,570 En as jy laat jou browser oop vir 'n baie lang tydperk van die tyd, dae 159 00:07:44,570 --> 00:07:48,060 en dae of weke, het jy soms dalk agterkom dat jou stelsel 160 00:07:48,060 --> 00:07:49,790 is loop regtig, regtig stadig. 161 00:07:49,790 --> 00:07:54,640 En die rede daarvoor is dat die leser het geheue toegeken, 162 00:07:54,640 --> 00:07:57,320 maar dan nie die stelsel het dat dit gedoen is met dit. 163 00:07:57,320 --> 00:08:01,000 En sodat minder geheue laat beskikbaar vir al jou ander programme 164 00:08:01,000 --> 00:08:04,480 om te deel, want jy is leaking-- dat webblaaier 165 00:08:04,480 --> 00:08:06,755 program lek geheue. 166 00:08:06,755 --> 00:08:08,880 Hoe gee ons geheue terug wanneer ons klaar is met dit? 167 00:08:08,880 --> 00:08:10,838 Wel gelukkig is dit 'n baie maklike manier om dit te doen. 168 00:08:10,838 --> 00:08:11,710 Ons bevry is dit net. 169 00:08:11,710 --> 00:08:15,020 Daar is 'n funksie genoem vry, dit 'n wyser aanvaar om die geheue, 170 00:08:15,020 --> 00:08:16,010 en ons is goed om te gaan. 171 00:08:16,010 --> 00:08:18,310 >> So kom ons sê ons is in die middel van ons program, 172 00:08:18,310 --> 00:08:21,970 ons wil 50 karakters malloc. 173 00:08:21,970 --> 00:08:25,710 Ons wil 'n skikking wat kan malloc staat van die hou van 50 karakters. 174 00:08:25,710 --> 00:08:29,109 En wanneer ons 'n wyser terug na dat die naam van die wyser is woord. 175 00:08:29,109 --> 00:08:30,900 Ons doen wat ons gaan doen met die woord, 176 00:08:30,900 --> 00:08:33,440 en dan wanneer ons gedoen wat ons bevry is dit net. 177 00:08:33,440 --> 00:08:37,460 En nou het ons teruggekeer diegene 50 grepe van die geheue terug na die stelsel. 178 00:08:37,460 --> 00:08:40,147 'N ander funksie kan gebruik. 179 00:08:40,147 --> 00:08:43,480 Ons hoef nie te bekommerd wees oor die lyding van 'n geheugenlek omdat ons woord bevry. 180 00:08:43,480 --> 00:08:46,639 Ons het die geheue terug gegee, sodat ons klaar besig met dit. 181 00:08:46,639 --> 00:08:48,430 So is daar drie goue reëls dat indien 182 00:08:48,430 --> 00:08:51,700 in gedagte gehou word wanneer jy dinamiese toekenning geheue 183 00:08:51,700 --> 00:08:52,990 met malloc. 184 00:08:52,990 --> 00:08:56,480 Elke blok geheue wat jy moet malloc bevry 185 00:08:56,480 --> 00:08:58,430 voor jou program afwerkings hardloop. 186 00:08:58,430 --> 00:09:02,029 Nou weer in die toestel of in die IDE hierdie soort van gebeur vir jou in elk geval 187 00:09:02,029 --> 00:09:04,820 wanneer you-- dit in elk geval sal gebeur Wanneer jou program is beëindig, 188 00:09:04,820 --> 00:09:06,880 al die geheue vrygestel sal word. 189 00:09:06,880 --> 00:09:10,750 Maar dit is oor die algemeen goed kodering praktyk om altyd, wanneer jy klaar is, 190 00:09:10,750 --> 00:09:13,810 bevry wat jy mallocd. 191 00:09:13,810 --> 00:09:16,690 >> Dit gesê, enigste dinge wat jy het mallocd moet bevry. 192 00:09:16,690 --> 00:09:19,880 As jy 'n staties verklaar heelgetal, int x semi-kolon, 193 00:09:19,880 --> 00:09:23,500 wat leef op die stapel, jy nie dan wil bevry x. 194 00:09:23,500 --> 00:09:25,970 So enigste dinge wat jy het mallocd moet bevry. 195 00:09:25,970 --> 00:09:28,960 >> En laastens, moenie gratis iets twee keer. 196 00:09:28,960 --> 00:09:31,170 Wat kan lei tot 'n ander vreemde situasie. 197 00:09:31,170 --> 00:09:33,530 So alles wat jy het mallocd moet bevry. 198 00:09:33,530 --> 00:09:36,000 Enigste dinge wat jy het malloc moet bevry. 199 00:09:36,000 --> 00:09:38,730 En doen nie vry iets twee keer. 200 00:09:38,730 --> 00:09:43,660 >> So laat ons gaan deur 'n voorbeeld hier van wat sommige dinamiese toegeken 201 00:09:43,660 --> 00:09:46,122 geheue kan lyk gemengde met 'n paar statiese geheue. 202 00:09:46,122 --> 00:09:47,080 Wat kan hier gebeur? 203 00:09:47,080 --> 00:09:48,913 Kyk of jy kan volg saam en raai wat is 204 00:09:48,913 --> 00:09:51,720 gaan gebeur as ons gaan deur al hierdie reëls van die kode. 205 00:09:51,720 --> 00:09:53,980 >> So sê ons int m. 206 00:09:53,980 --> 00:09:54,840 Wat gebeur hier? 207 00:09:54,840 --> 00:09:56,339 Wel, dit is redelik eenvoudig. 208 00:09:56,339 --> 00:09:59,650 Ek skep 'n heelgetal veranderlike genoem m. 209 00:09:59,650 --> 00:10:01,400 Ek kleur dit groen, want dit is die kleur 210 00:10:01,400 --> 00:10:03,730 wat ek gebruik wanneer ek praat oor heelgetal veranderlikes. 211 00:10:03,730 --> 00:10:05,160 Dit is 'n boks. 212 00:10:05,160 --> 00:10:08,400 Dit is bekend m, en jy kan heelgetalle winkel binnekant van dit. 213 00:10:08,400 --> 00:10:12,400 >> Wat gebeur as ek dan sê int star a? 214 00:10:12,400 --> 00:10:13,530 Wel, dit is redelik soortgelyk. 215 00:10:13,530 --> 00:10:15,780 Ek is die skep van 'n boks genoem. 216 00:10:15,780 --> 00:10:19,100 Dit is in staat om van hou int sterre, verwysings na heelgetalle. 217 00:10:19,100 --> 00:10:21,570 So ek kleur dit groen-ish as well. 218 00:10:21,570 --> 00:10:24,140 >> Ek weet dit het iets te doen het met 'n heelgetal, 219 00:10:24,140 --> 00:10:25,852 maar dit is nie self 'n heelgetal. 220 00:10:25,852 --> 00:10:27,310 Maar dit is pretty much dieselfde idee. 221 00:10:27,310 --> 00:10:28,101 Ek het 'n boks geskep. 222 00:10:28,101 --> 00:10:30,070 Beide van hierdie reg woon nou op die stapel. 223 00:10:30,070 --> 00:10:32,520 Ek het aan hulle gegee albei name. 224 00:10:32,520 --> 00:10:36,750 >> int star b is gelyk aan malloc grootte van int. 225 00:10:36,750 --> 00:10:38,560 Hierdie een mag wees 'n bietjie lastig. 226 00:10:38,560 --> 00:10:44,110 Neem 'n tweede en dink oor wat jy sou verwag om te gebeur op hierdie diagram. 227 00:10:44,110 --> 00:10:50,210 int star b is gelyk aan malloc grootte van int. 228 00:10:50,210 --> 00:10:51,940 >> Wel, dit is nie net 'n boks. 229 00:10:51,940 --> 00:10:53,800 Dit skep eintlik twee bokse. 230 00:10:53,800 --> 00:10:58,670 En dit bande, dit stel ook 'n punt in 'n verhouding. 231 00:10:58,670 --> 00:11:02,240 Ons het 'n blok toegeken geheue op die hoop. 232 00:11:02,240 --> 00:11:05,940 Let daarop dat die kassie regs bo daar nie 'n naam. 233 00:11:05,940 --> 00:11:06,760 >> Ons mallocd dit. 234 00:11:06,760 --> 00:11:08,050 Dit bestaan ​​op die hoop. 235 00:11:08,050 --> 00:11:10,090 Maar b het 'n naam. 236 00:11:10,090 --> 00:11:11,950 Dit is 'n wyser veranderlike genoem b. 237 00:11:11,950 --> 00:11:13,910 Wat leef op die stapel. 238 00:11:13,910 --> 00:11:18,250 >> So dit is 'n stuk van die geheue wat verwys na 'n ander een. 239 00:11:18,250 --> 00:11:21,840 b die adres bevat van daardie blok van die geheue. 240 00:11:21,840 --> 00:11:23,757 Dit maak nie 'n naam het anders. 241 00:11:23,757 --> 00:11:24,590 Maar dit wys om dit te. 242 00:11:24,590 --> 00:11:29,760 So wanneer ons sê int star b is gelyk aan malloc grootte van int dat net daar, 243 00:11:29,760 --> 00:11:33,490 dat pyl wat inloer op die regterkant daar dat die hele ding, 244 00:11:33,490 --> 00:11:36,740 Ek sal dit voorkom weer, is wat gebeur. 245 00:11:36,740 --> 00:11:39,341 Al wat gebeur in dat enkele lyn van die kode. 246 00:11:39,341 --> 00:11:41,340 Nou sal ons bietjie meer te kry eenvoudig weer. 247 00:11:41,340 --> 00:11:43,330 'n gelyk ampersand m. 248 00:11:43,330 --> 00:11:46,280 Het jy onthou wat 'n gelyk ampersand m is? 249 00:11:46,280 --> 00:11:48,920 Wel, dit is 'n raak adres m se. 250 00:11:48,920 --> 00:11:54,150 Of sit meer diagrammaties 'n punte te m. 251 00:11:54,150 --> 00:11:56,360 >> 'n gelyk b. 252 00:11:56,360 --> 00:11:57,560 OK so hier is nog een. 253 00:11:57,560 --> 00:11:59,230 A is gelyk aan b. 254 00:11:59,230 --> 00:12:02,260 Wat gaan gebeur die diagram hierdie tyd? 255 00:12:02,260 --> 00:12:04,330 >> Wel onthou dat die opdrag operateur werke 256 00:12:04,330 --> 00:12:08,960 deur die toeken van die waarde van die reg om die waarde aan die linkerkant. 257 00:12:08,960 --> 00:12:14,820 So in plaas van 'n aanwysing te m, 'n nou wys na dieselfde plek wat b punte. 258 00:12:14,820 --> 00:12:18,900 'n nie wys B, A wys waar b punte. 259 00:12:18,900 --> 00:12:25,280 >> As 'n skerp om B wat sou het reeds 'n gelyk ampersand b. 260 00:12:25,280 --> 00:12:28,150 Maar eerder 'n gelyk b net beteken dat en b is nou 261 00:12:28,150 --> 00:12:31,770 wys na dieselfde adres, omdat binnekant van b is net 'n adres. 262 00:12:31,770 --> 00:12:35,004 En nou binnekant van 'n is dieselfde adres. 263 00:12:35,004 --> 00:12:37,170 m gelyk aan 10, waarskynlik die mees eenvoudige ding 264 00:12:37,170 --> 00:12:38,690 ons gedoen het in 'n bietjie. 265 00:12:38,690 --> 00:12:40,460 Sit die 10 in die boks. 266 00:12:40,460 --> 00:12:45,640 Star b is gelyk aan m plus 2, onthou uit ons wenke video wat star b beteken. 267 00:12:45,640 --> 00:12:50,230 Ons gaan dereference b en sit 'n bietjie waarde in daardie geheue plek. 268 00:12:50,230 --> 00:12:51,860 In hierdie geval 12. 269 00:12:51,860 --> 00:12:55,300 >> So wanneer ons dereference 'n punt daarvan onthou ons het net reis af in die pyl. 270 00:12:55,300 --> 00:12:58,205 Of 'n ander manier, ons gaan na die geheue adres 271 00:12:58,205 --> 00:12:59,580 en ons manipuleer dit in een of ander manier. 272 00:12:59,580 --> 00:13:00,830 Ons het 'n bietjie waarde in daar. 273 00:13:00,830 --> 00:13:03,960 In hierdie geval ster b gelyk m plus 2 is net 274 00:13:03,960 --> 00:13:08,230 gaan na die veranderlike wys na die b, gaan na die geheue verwys na deur b, 275 00:13:08,230 --> 00:13:11,750 en sit m plus 2 daar, 12. 276 00:13:11,750 --> 00:13:14,970 >> Nou vry ek b. 277 00:13:14,970 --> 00:13:16,490 Wat gebeur wanneer ek vry b? 278 00:13:16,490 --> 00:13:18,800 Onthou wat ek gesê het vry beteken. 279 00:13:18,800 --> 00:13:21,920 Wat sê ek toe ek bevry b? 280 00:13:21,920 --> 00:13:23,410 >> Ek is klaar besig met dit, reg? 281 00:13:23,410 --> 00:13:25,702 Ek wese gee die geheue. 282 00:13:25,702 --> 00:13:26,910 Ek gee dit terug na die stelsel. 283 00:13:26,910 --> 00:13:33,010 Ek het nie nodig hierdie meer is wat ek vir hulle vertel, OK? 284 00:13:33,010 --> 00:13:37,390 >> Nou as ek sê star n gelyk 11 kan jy waarskynlik 285 00:13:37,390 --> 00:13:40,460 reeds vertel dat iets sleg gaan hier gebeur nie, reg? 286 00:13:40,460 --> 00:13:44,160 En inderdaad as ek probeer dat ek waarskynlik sou 'n segmentering skuld ly. 287 00:13:44,160 --> 00:13:47,140 Want nou, hoewel voorheen dat deel van die geheue 288 00:13:47,140 --> 00:13:50,220 was iets wat ek moes toegang tot, op hierdie punt 289 00:13:50,220 --> 00:13:54,590 nou is ek toegang tot geheue wat is nie reg vir my om toegang te kry. 290 00:13:54,590 --> 00:13:57,330 >> En soos ons sal waarskynlik onthou, wanneer ons toegang geheue 291 00:13:57,330 --> 00:14:00,000 dat ons nie veronderstel is om te raak, dit is die mees algemene oorsaak 292 00:14:00,000 --> 00:14:01,860 van 'n segmentering fout. En so my program 293 00:14:01,860 --> 00:14:05,170 sou crash as ek probeer om dit te doen. 294 00:14:05,170 --> 00:14:09,910 So weer dis 'n goeie idee om 'n goeie kry praktyk en goeie gewoontes ingeburgerde 295 00:14:09,910 --> 00:14:12,920 wanneer daar met malloc en vry, sodat jy nie ly segmentering 296 00:14:12,920 --> 00:14:15,310 foute, en wat jy gebruik jou dinamiese toegeken 297 00:14:15,310 --> 00:14:17,370 geheue verantwoordelik. 298 00:14:17,370 --> 00:14:20,300 >> Ek is Doug Lloyd dit is CS50. 299 00:14:20,300 --> 00:14:21,947