1 00:00:00,000 --> 00:00:00,499 2 00:00:00,499 --> 00:00:01,395 [Mūzikas atskaņošanai] 3 00:00:01,395 --> 00:00:05,590 4 00:00:05,590 --> 00:00:07,940 >> Doug LLOYD: Labi, tāpēc ieteikums pirms sākas šeit. 5 00:00:07,940 --> 00:00:11,660 Ja neesat noskatījos video norādes jūs varētu vēlēties darīt vispirms. 6 00:00:11,660 --> 00:00:15,860 Tāpēc, ka šis video ir vēl viens veids, kā strādāt ar norādes. 7 00:00:15,860 --> 00:00:17,574 >> Tātad, tas notiek, lai runātu par dažiem jēdzieniem 8 00:00:17,574 --> 00:00:19,490 ka mēs apdrošināt norādes video, un mēs esam 9 00:00:19,490 --> 00:00:21,948 gatavojas spīdums pār viņiem tagad, pieņemot, ka viņi jau 10 00:00:21,948 --> 00:00:23,090 veida saprata. 11 00:00:23,090 --> 00:00:25,440 Tātad tas ir tikai jūsu godīgi brīdinājums ka, ja jūs redzēt šo video 12 00:00:25,440 --> 00:00:27,814 un neesat redzējuši norādes video, tas varētu veida 13 00:00:27,814 --> 00:00:29,610 lidot virs galvas mazliet. 14 00:00:29,610 --> 00:00:32,080 Un tā tas varētu būt labāks skatīties tā minētajā secībā. 15 00:00:32,080 --> 00:00:34,710 >> Tātad mēs jau esam redzējuši vienu veids, kā strādāt ar norādes, 16 00:00:34,710 --> 00:00:37,810 kas ir mēs deklarēt mainīgs, un tad mēs 17 00:00:37,810 --> 00:00:42,160 atzīt citu mainīgo, rādītāju mainīgais, kas norāda uz to. 18 00:00:42,160 --> 00:00:44,870 Tāpēc mēs esam izveidojuši mainīgs ar nosaukumu, mēs esam 19 00:00:44,870 --> 00:00:48,480 izveidoja otru mainīgo ar nosaukumu, un mēs norāda, ka otrais mainīgais 20 00:00:48,480 --> 00:00:50,220 Tajā pirmo reizi. 21 00:00:50,220 --> 00:00:52,370 Šī veida has a problēma, lai gan, jo tas 22 00:00:52,370 --> 00:00:54,650 prasa, lai mēs precīzi zinātu cik daudz atmiņas mēs esam 23 00:00:54,650 --> 00:00:57,600 būs nepieciešama mirkli Mūsu programma ir apkopota. 24 00:00:57,600 --> 00:00:58,220 >> Kāpēc ir tā, ka? 25 00:00:58,220 --> 00:01:03,338 Jo mums ir jāspēj nosaukt vai identificēt visus iespējamos mainīgajiem 26 00:01:03,338 --> 00:01:04,129 mēs varētu saskarties. 27 00:01:04,129 --> 00:01:07,910 Mēs varētu būt masīva, kas varētu būt spēj turēt daudz informācijas, 28 00:01:07,910 --> 00:01:10,110 bet tas vēl nav tieši pietiekami precīza. 29 00:01:10,110 --> 00:01:12,640 Ko darīt, ja mēs nezinām, Ko darīt, ja mums nav ne jausmas 30 00:01:12,640 --> 00:01:14,370 cik daudz mums būs nepieciešams kompilēšanas laikā? 31 00:01:14,370 --> 00:01:17,020 Vai ko, ja mūsu programma būs palaist patiešām ilgu laiku, 32 00:01:17,020 --> 00:01:19,810 pieņemot dažādām lietotāju dati, un mēs nevaram īsti 33 00:01:19,810 --> 00:01:23,170 novērtēt, vai mēs esam būs nepieciešama 1000 vienības? 34 00:01:23,170 --> 00:01:26,060 >> Tas nav tāpat kā mēs varam saka pie komandrindas 35 00:01:26,060 --> 00:01:28,040 ievadiet, cik daudz priekšmetus Jūs domājat, ka jums ir nepieciešams. 36 00:01:28,040 --> 00:01:31,100 Nu ko tad, ja tas minējums ir nepareizi? 37 00:01:31,100 --> 00:01:34,300 Dinamiskā atmiņas sadali veida ļauj mums ceļu 38 00:01:34,300 --> 00:01:36,867 lai iegūtu ap šo konkrēto problēmu. 39 00:01:36,867 --> 00:01:38,700 Un kā tas tiek darīts ir, izmantojot norādes. 40 00:01:38,700 --> 00:01:42,140 >> Mēs varam izmantot norādes uz piekļūt dinamiski 41 00:01:42,140 --> 00:01:45,710 piešķirti atmiņas, atmiņas, kas ir piešķirti kā jūsu programma darbojas. 42 00:01:45,710 --> 00:01:48,290 Tas nav piešķirts kompilēšanas laikā. 43 00:01:48,290 --> 00:01:51,570 Kad jūs dinamiski piešķirt atmiņu tas nāk no baseina 44 00:01:51,570 --> 00:01:53,795 atmiņas pazīstams kā kaudzes. 45 00:01:53,795 --> 00:01:56,420 Agrāk visi atmiņas mēs esam strādājusi ar gaitā 46 00:01:56,420 --> 00:01:59,920 ir nāk no baseina atmiņas pazīstams kā kaudze. 47 00:01:59,920 --> 00:02:02,470 Labs veids, kā parasti paturiet mind-- un šā noteikuma 48 00:02:02,470 --> 00:02:04,720 ne vienmēr būt taisnība, bet diezgan daudz gandrīz 49 00:02:04,720 --> 00:02:09,940 vienmēr uzskata true-- ir tas, ka jebkurš laiks jūs piešķirat mainīgā nosaukums it 50 00:02:09,940 --> 00:02:12,090 iespējams, dzīvo uz skursteņa. 51 00:02:12,090 --> 00:02:14,650 Un jebkurā laikā jums nav dot dažādu nosaukumu, 52 00:02:14,650 --> 00:02:19,160 ko jūs varat darīt ar dinamisko atmiņu sadali, tas dzīvo uz kaudzes. 53 00:02:19,160 --> 00:02:22,190 >> Tagad es esmu veida uzrādot to kā ja tur ir šie divi baseini atmiņas. 54 00:02:22,190 --> 00:02:24,740 Bet jums var būt redzējis šo diagramma, kas ir parasti 55 00:02:24,740 --> 00:02:27,290 pārstāvību kāda atmiņa izskatās, 56 00:02:27,290 --> 00:02:30,373 un mēs nebrauksim, lai rūpētos par visiem sīkumi augšā un apakšā. 57 00:02:30,373 --> 00:02:33,580 Ko mēs rūpējamies par to ir šī daļa vidū šeit, kaudze un kaudze. 58 00:02:33,580 --> 00:02:35,570 Kā jūs varat redzēt, ko meklē šajā diagrammā, 59 00:02:35,570 --> 00:02:38,390 tie faktiski nav divi atsevišķi baseini atmiņas. 60 00:02:38,390 --> 00:02:42,757 Tā ir viena kopīga baseins atmiņas kur jūs sākat, šajā vizuālā 61 00:02:42,757 --> 00:02:44,590 sākat apakšā un sākt iepildot 62 00:02:44,590 --> 00:02:48,040 no apakšas ar krāvuma, un jums sākas augšā un sākt iepildot 63 00:02:48,040 --> 00:02:50,072 no augšas uz leju ar kaudzes. 64 00:02:50,072 --> 00:02:51,780 Bet tas tiešām ir pats baseins, tas ir tikai 65 00:02:51,780 --> 00:02:56,050 dažādās vietās, dažādās vietās atmiņā, kas tiek piešķirti. 66 00:02:56,050 --> 00:02:59,060 Un jūs varat palaist no atmiņa vai nu ar 67 00:02:59,060 --> 00:03:01,240 kaudze iet visu ceļu uz leju, vai ir 68 00:03:01,240 --> 00:03:05,440 kaudze iet visu ceļu uz augšu, vai kam ir kaudze un kaudze 69 00:03:05,440 --> 00:03:06,740 satiekas pret otru. 70 00:03:06,740 --> 00:03:09,500 Visi no tiem var būt apstākļi kas izraisa savu programmu 71 00:03:09,500 --> 00:03:11,030 palaist no atmiņas. 72 00:03:11,030 --> 00:03:11,952 Lai saglabātu, ka prātā. 73 00:03:11,952 --> 00:03:13,660 Kad mēs runājam par kaudze un kaudze 74 00:03:13,660 --> 00:03:17,880 mēs tiešām runājam par pats vispār rieciens atmiņas, tikai 75 00:03:17,880 --> 00:03:21,930 dažādas porcijas šīs atmiņas. 76 00:03:21,930 --> 00:03:24,910 >> Tātad, kā mēs dinamiski piešķirti atmiņu pirmajā vietā? 77 00:03:24,910 --> 00:03:27,740 Kā mūsu programma nokļūt atmiņa kā tas darbojas? 78 00:03:27,740 --> 00:03:32,660 Nu C nodrošina funkciju sauc malloc, atmiņas dalītāju, kas 79 00:03:32,660 --> 00:03:36,810 Jūs piezvanītu, un jums iet uz cik daudz atmiņas baiti, ko vēlaties. 80 00:03:36,810 --> 00:03:39,940 Tātad, ja jūsu programma darbojas un jūs vēlaties skaitlim runtime, 81 00:03:39,940 --> 00:03:46,040 jūs varētu mallock četri baiti atmiņa, malloc iekavas četri. 82 00:03:46,040 --> 00:03:48,540 >> mallock iet cauri skatoties caur kaudzes, 83 00:03:48,540 --> 00:03:50,750 jo mēs esam dinamiski piešķirot atmiņu, 84 00:03:50,750 --> 00:03:53,500 un tas atgriezīsies pie jums rādītājs uz šo atmiņu. 85 00:03:53,500 --> 00:03:56,180 Tas nedod jums, ka memory-- tas nav arī tā nosaukumu, 86 00:03:56,180 --> 00:03:57,950 tas dod jums rādītāju uz to. 87 00:03:57,950 --> 00:04:00,780 Un tā tas ir iemesls, kāpēc atkal es teicu ka tas ir svarīgi varbūt 88 00:04:00,780 --> 00:04:03,770 ir noskatījos norādes video pirms mēs pārāk tālu šis. 89 00:04:03,770 --> 00:04:05,940 Tātad malloc gatavojas jums atpakaļ rādītāju. 90 00:04:05,940 --> 00:04:08,950 >> Ja mallock nevar sniegt jums jebkādu atmiņas, jo jūs esat izsīkšanai, 91 00:04:08,950 --> 00:04:10,645 tas došu jums atpakaļ null rādītāju. 92 00:04:10,645 --> 00:04:15,282 Vai atceraties, kas notiek, ja mēs mēģināt un dereference null rādītāju? 93 00:04:15,282 --> 00:04:17,019 Mēs cieš SEG vaina, vai ne? 94 00:04:17,019 --> 00:04:18,060 Tas ir iespējams, nav labs. 95 00:04:18,060 --> 00:04:21,579 >> Tātad, katru reizi, kad jūs veicat zvanu lai malloc tevi vienmēr, vienmēr 96 00:04:21,579 --> 00:04:25,270 nepieciešams, lai pārbaudītu, vai rādītājs tas deva jums atpakaļ ir nulle. 97 00:04:25,270 --> 00:04:28,800 Ja tā ir, jums ir nepieciešams, lai izbeigtu savu programmu jo, ja jūs mēģināt un dereference 98 00:04:28,800 --> 00:04:31,360 Nulles rādītājs jūs gatavojas ciest segmentāciju vaina 99 00:04:31,360 --> 00:04:34,380 un jūsu programma ir gatavojas crash anyway. 100 00:04:34,380 --> 00:04:37,190 Tātad, kā mēs statiski iegūt vesels skaitlis? 101 00:04:37,190 --> 00:04:37,730 >> int x. 102 00:04:37,730 --> 00:04:40,010 Mēs, iespējams, esam darījuši ķekars reizes, vai ne? 103 00:04:40,010 --> 00:04:43,480 Tas rada mainīgo sauc x, kas dzīvo uz skursteņa. 104 00:04:43,480 --> 00:04:46,190 Kā mēs dinamiski iegūt skaitli? 105 00:04:46,190 --> 00:04:50,010 Int zvaigzne px vienāds malloc 4. 106 00:04:50,010 --> 00:04:53,050 >> Vai pareizāk mēs teiktu int zvaigzne px 107 00:04:53,050 --> 00:04:57,680 vienāds malloc lielumu int, tikai mest daži mazāk 108 00:04:57,680 --> 00:04:59,740 burvju numurus ap mūsu programmā. 109 00:04:59,740 --> 00:05:04,140 Tas ir gatavojas saņemt par mums četri baiti atmiņas no kaudzes, 110 00:05:04,140 --> 00:05:06,720 un rādītāju mēs atpakaļ uz to sauc px. 111 00:05:06,720 --> 00:05:08,430 Un tad tāpat kā mēs esam iepriekš darīts mēs 112 00:05:08,430 --> 00:05:13,966 var dereference px uz piekļūt šo atmiņu. 113 00:05:13,966 --> 00:05:15,590 Kā mēs varam iegūt veselu skaitli no lietotājs? 114 00:05:15,590 --> 00:05:17,970 Mēs varam teikt, int x vienāds saņemt int. 115 00:05:17,970 --> 00:05:19,930 Tas ir diezgan vienkārši. 116 00:05:19,930 --> 00:05:24,030 Ko darīt, ja mēs gribam izveidot masīvu X plosti, kas dzīvo uz skursteņa? 117 00:05:24,030 --> 00:05:28,210 peldēt stack_array-- tas ir vārds Mūsu array-- kvadrātiekavās x. 118 00:05:28,210 --> 00:05:32,419 Tas radīs mums masīva X plosti, kas dzīvo uz skursteņa. 119 00:05:32,419 --> 00:05:34,960 Mēs varam izveidot masīvu pludiņi kas dzīvo uz kaudzes, too. 120 00:05:34,960 --> 00:05:37,330 Sintakse varētu izskatīties nedaudz vairāk apgrūtinoša, 121 00:05:37,330 --> 00:05:41,740 bet mēs varam teikt pludiņu star heap_array vienāds 122 00:05:41,740 --> 00:05:44,360 malloc x reizes lielāka pludiņa. 123 00:05:44,360 --> 00:05:48,160 Man vajag pietiekami daudz vietas, lai noturētu x peldošā punkta vērtības. 124 00:05:48,160 --> 00:05:51,560 Tā teikt, man ir nepieciešams 100 pludiņiem, vai 1000 pludiņi. 125 00:05:51,560 --> 00:05:54,810 Tātad, šajā gadījumā tas būtu 400 baiti par 100 pludiņiem, 126 00:05:54,810 --> 00:05:59,080 vai 4000 baiti par 1000 pludiņiem, jo katra float aizņem 127 00:05:59,080 --> 00:06:01,230 četri baiti telpā. 128 00:06:01,230 --> 00:06:05,110 >> Pēc darot es varu izmantot kvadrātiekava sintakse uz heap_array. 129 00:06:05,110 --> 00:06:08,970 Tāpat kā es darītu stack_array, es var piekļūt tās elementus atsevišķi 130 00:06:08,970 --> 00:06:11,590 izmantojot heap_array nulle, heap_array viens. 131 00:06:11,590 --> 00:06:15,800 Bet atgādināt iemeslu, mēs varam darīt, ka ir tāpēc, ka nosaukums masīva C 132 00:06:15,800 --> 00:06:19,990 ir patiešām rādītājs šī masīva pirmais elements. 133 00:06:19,990 --> 00:06:23,480 Tātad tas, ka mēs esam atzīts par masīvs pludiņiem uz skursteņa šeit 134 00:06:23,480 --> 00:06:24,810 ir faktiski mazliet maldinošs. 135 00:06:24,810 --> 00:06:27,600 Mēs patiešām esam Otrajā rindā kodu tur 136 00:06:27,600 --> 00:06:32,360 arī radot rādītāju uz rieciens Atmiņas ka mēs tad darīt kādu darbu ar. 137 00:06:32,360 --> 00:06:35,620 >> Lūk liela problēma ar dinamiski piešķirta atmiņu, lai gan, 138 00:06:35,620 --> 00:06:38,360 un tas ir iemesls, kāpēc tas ir patiešām svarīgi attīstīt dažas labas ieradumus 139 00:06:38,360 --> 00:06:39,800 ja jūs strādājat ar to. 140 00:06:39,800 --> 00:06:43,060 Atšķirībā statiski deklarēta atmiņa, atmiņas 141 00:06:43,060 --> 00:06:46,790 netiek automātiski atpakaļ uz Sistēma, kad jūsu funkcija tiek darīts. 142 00:06:46,790 --> 00:06:49,280 Tātad, ja mums ir galvenais, un Galvenais aicina funkciju 143 00:06:49,280 --> 00:06:53,860 f, kur f apdari kāds tas dara un atgriež programmas kontroles 144 00:06:53,860 --> 00:06:58,810 atpakaļ uz galveno, visi no atmiņas ka f lieto tiek dota atpakaļ. 145 00:06:58,810 --> 00:07:01,250 To var izmantot atkārtoti ar kādu citu programmu, 146 00:07:01,250 --> 00:07:04,250 vai kādu citu funkciju, kas izpaužas sauc vēlāk pamatdarbā. 147 00:07:04,250 --> 00:07:06,970 To var izmantot to pašu atmiņu atkal. 148 00:07:06,970 --> 00:07:09,620 >> Ja jums dinamiski piešķirt atmiņu though 149 00:07:09,620 --> 00:07:14,380 Jums ir skaidri pateikt sistēma, kas esat pabeidzis ar to. 150 00:07:14,380 --> 00:07:18,370 Tas būs turēt uz to, lai jūs, kas varētu novest pie problēmai jūs pietrūkt 151 00:07:18,370 --> 00:07:19,290 atmiņas. 152 00:07:19,290 --> 00:07:22,179 Un patiesībā mēs dažreiz atsaukties uz to kā atmiņas noplūde. 153 00:07:22,179 --> 00:07:24,970 Un reizēm šie atmiņas noplūdes patiesībā var būt ļoti postoša 154 00:07:24,970 --> 00:07:27,020 par sistēmas veiktspēju. 155 00:07:27,020 --> 00:07:31,120 >> Ja jūs bieži interneta lietotājs jūs varētu izmantot dažus tīmekļa pārlūkprogrammas, 156 00:07:31,120 --> 00:07:35,630 un es nenosaukšu vārdus šeit, bet ir dažas tīmekļa pārlūkprogrammas, kas tur 157 00:07:35,630 --> 00:07:39,150 kas ir pazīstami faktiski ņemot atmiņas noplūdes, kas nesaņem fiksēto. 158 00:07:39,150 --> 00:07:44,570 Un, ja jūs atstāt jūsu pārlūkprogramma atvērts uz ļoti ilgu laiku, dienas 159 00:07:44,570 --> 00:07:48,060 un dienās, vai nedēļas, jūs dažreiz ievērosiet, ka jūsu sistēmā 160 00:07:48,060 --> 00:07:49,790 darbojas ļoti, ļoti lēni. 161 00:07:49,790 --> 00:07:54,640 Un iemesls tam ir tas, ka pārlūks ir piešķīrusi atmiņu, 162 00:07:54,640 --> 00:07:57,320 bet tad nav teicis sistēmu ka tas ir darīts ar to. 163 00:07:57,320 --> 00:08:01,000 Un tā tas atstāj mazāk atmiņas pieejams visiem jūsu citām programmām 164 00:08:01,000 --> 00:08:04,480 ir dalīties, jo tu esi leaking-- ka tīmekļa pārlūkprogrammu 165 00:08:04,480 --> 00:08:06,755 Programma ir sūce atmiņu. 166 00:08:06,755 --> 00:08:08,880 Kā mēs dot atmiņu atpakaļ kad mēs esam darījuši ar to? 167 00:08:08,880 --> 00:08:10,838 Nu par laimi tas ir ļoti vienkāršs veids, kā to darīt. 168 00:08:10,838 --> 00:08:11,710 Mēs vienkārši atbrīvot to. 169 00:08:11,710 --> 00:08:15,020 Tur ir funkcija sauc bezmaksas, tā pieņem rādītāju uz atmiņu, 170 00:08:15,020 --> 00:08:16,010 un mēs esam labi iet. 171 00:08:16,010 --> 00:08:18,310 >> Tātad pieņemsim, ka mēs esi vidū mūsu programmas, 172 00:08:18,310 --> 00:08:21,970 mēs gribam malloc 50 rakstzīmes. 173 00:08:21,970 --> 00:08:25,710 Mēs vēlamies, lai malloc masīvu, kas var spēj noturēt 50 rakstzīmes. 174 00:08:25,710 --> 00:08:29,109 Un, kad mēs rādītāju atpakaļ ka šīs rādītājs vārds ir vārds. 175 00:08:29,109 --> 00:08:30,900 Mēs darām visu, mēs esam darīsim ar vārdu, 176 00:08:30,900 --> 00:08:33,440 un tad, kad mēs esam darīts mēs vienkārši atbrīvot to. 177 00:08:33,440 --> 00:08:37,460 Un tagad mēs esam atgriezušies tiem 50 atmiņas baiti atpakaļ sistēmai. 178 00:08:37,460 --> 00:08:40,147 Dažas citas funkcijas var tos izmantot. 179 00:08:40,147 --> 00:08:43,480 Mums nav jāuztraucas par ciešanas atmiņas noplūde tāpēc, ka mēs esam atbrīvojušies vārdu. 180 00:08:43,480 --> 00:08:46,639 Mēs esam rūpīgi atmiņu atpakaļ, tāpēc mēs esam darīts strādāt ar to. 181 00:08:46,639 --> 00:08:48,430 Tātad ir trīs zelta likumi, kas būtu 182 00:08:48,430 --> 00:08:51,700 jāpatur prātā, kad jūs esat dinamiski piešķirot atmiņu 183 00:08:51,700 --> 00:08:52,990 ar malloc. 184 00:08:52,990 --> 00:08:56,480 Katrs atmiņas bloks, kas Jums malloc jānoņem 185 00:08:56,480 --> 00:08:58,430 pirms savu programmu beidz darboties. 186 00:08:58,430 --> 00:09:02,029 Tagad atkal, ierīces vai arī IDE šāda veida notiek Jums vienalga 187 00:09:02,029 --> 00:09:04,820 kad you-- tas notiks vienalga ja jūsu programma ir izbeigta, 188 00:09:04,820 --> 00:09:06,880 visi atmiņas tiks atbrīvota. 189 00:09:06,880 --> 00:09:10,750 Bet tas parasti ir labs kodēšana prakse, lai vienmēr, kad tas ir paveikts, 190 00:09:10,750 --> 00:09:13,810 atbrīvotu ko esat mallocd. 191 00:09:13,810 --> 00:09:16,690 >> Tas nozīmē, ka tikai lietas, jūs esat mallocd būtu jāatbrīvo. 192 00:09:16,690 --> 00:09:19,880 Ja jūs statiski pasludināt skaitlis, int x semikols, 193 00:09:19,880 --> 00:09:23,500 kas dzīvo uz steku, jūs nav, tad gribu bezmaksas X. 194 00:09:23,500 --> 00:09:25,970 Tātad tikai lietas, ko jūs esat mallocd būtu jāatbrīvo. 195 00:09:25,970 --> 00:09:28,960 >> Un visbeidzot, nav brīvu kaut divreiz. 196 00:09:28,960 --> 00:09:31,170 Tas var novest pie cits dīvaini situācija. 197 00:09:31,170 --> 00:09:33,530 Tātad viss, kas jūs esat mallocd ir jāatbrīvo. 198 00:09:33,530 --> 00:09:36,000 Tikai lietas, kas jūs esat malloc būtu jāatbrīvo. 199 00:09:36,000 --> 00:09:38,730 Un nav brīvu kaut divreiz. 200 00:09:38,730 --> 00:09:43,660 >> So iesim cauri piemēru šeit no tā, ko daži dinamiski piešķirta 201 00:09:43,660 --> 00:09:46,122 atmiņa varētu izskatīties jaukts ar kādu statisko atmiņu. 202 00:09:46,122 --> 00:09:47,080 Kas varētu notikt šeit? 203 00:09:47,080 --> 00:09:48,913 Skat, ja jūs varat sekot kopā un uzminēt, kas ir 204 00:09:48,913 --> 00:09:51,720 notiks, kā mums iet cauri visām šīm līnijām kodu. 205 00:09:51,720 --> 00:09:53,980 >> Tāpēc mēs sakām int m. 206 00:09:53,980 --> 00:09:54,840 Kas notiek šeit? 207 00:09:54,840 --> 00:09:56,339 Nu tas ir diezgan vienkārši. 208 00:09:56,339 --> 00:09:59,650 Es izveidot veselu mainīgo sauc m. 209 00:09:59,650 --> 00:10:01,400 Es krāsu tā zaļa, jo tas ir krāsu 210 00:10:01,400 --> 00:10:03,730 ka es izmantot, kad es runāju Par skaitlim mainīgie. 211 00:10:03,730 --> 00:10:05,160 Tas ir kaste. 212 00:10:05,160 --> 00:10:08,400 To sauc m, un jūs varat veikals skaitļu iekšpusē no tā. 213 00:10:08,400 --> 00:10:12,400 >> Ko darīt, ja es tad saku int zvaigznīti? 214 00:10:12,400 --> 00:10:13,530 Nu tas ir diezgan līdzīgs. 215 00:10:13,530 --> 00:10:15,780 Es veidoju kastē sauc. 216 00:10:15,780 --> 00:10:19,100 Tas spēj noturēt int zvaigznes, norādes uz veseliem skaitļiem. 217 00:10:19,100 --> 00:10:21,570 Tāpēc es esmu krāsošana to zaļo ish, kā arī. 218 00:10:21,570 --> 00:10:24,140 >> Es zinu, tas ir kaut kas darīt ar veselam skaitlim, 219 00:10:24,140 --> 00:10:25,852 bet tas pats par sevi nav vesels skaitlis. 220 00:10:25,852 --> 00:10:27,310 Bet tas ir diezgan daudz to pašu ideju. 221 00:10:27,310 --> 00:10:28,101 Esmu izveidojis lodziņu. 222 00:10:28,101 --> 00:10:30,070 Abas šīs tiesības tagad dzīvo uz skursteņa. 223 00:10:30,070 --> 00:10:32,520 Es esmu devis viņiem abiem nosaukumiem. 224 00:10:32,520 --> 00:10:36,750 >> int zvaigzne b vienāds malloc lielumu int. 225 00:10:36,750 --> 00:10:38,560 Tas varētu būt nedaudz grūts. 226 00:10:38,560 --> 00:10:44,110 Paņem otru un domāt par to, ko jūs varētu gaidīt, lai notiktu šajā diagrammā. 227 00:10:44,110 --> 00:10:50,210 int zvaigzne b vienāds malloc lielumu int. 228 00:10:50,210 --> 00:10:51,940 >> Nu tas nav tikai izveidot vienu kasti. 229 00:10:51,940 --> 00:10:53,800 Tas patiesībā rada divas kastes. 230 00:10:53,800 --> 00:10:58,670 Un tā saista, tas arī nosaka punkts attiecībās. 231 00:10:58,670 --> 00:11:02,240 Mēs esam piešķirts viens bloks atmiņas par kaudzes. 232 00:11:02,240 --> 00:11:05,940 Ievērojiet, ka augšējā labajā box tur nav vārdu. 233 00:11:05,940 --> 00:11:06,760 >> Mēs mallocd to. 234 00:11:06,760 --> 00:11:08,050 Tā pastāv uz kaudzes. 235 00:11:08,050 --> 00:11:10,090 Bet b ir nosaukums. 236 00:11:10,090 --> 00:11:11,950 Tas ir rādītājs mainīgais sauc b. 237 00:11:11,950 --> 00:11:13,910 Kas dzīvo uz skursteņa. 238 00:11:13,910 --> 00:11:18,250 >> Tātad, tas ir gabals atmiņas kas norāda uz citu. 239 00:11:18,250 --> 00:11:21,840 b satur adresi Minētā bloka atmiņas. 240 00:11:21,840 --> 00:11:23,757 Tas nav vārds citādi. 241 00:11:23,757 --> 00:11:24,590 Bet tas norāda uz to. 242 00:11:24,590 --> 00:11:29,760 Tātad, kad mēs sakām int zvaigzne b vienāds malloc lielums int, ka tieši tur, 243 00:11:29,760 --> 00:11:33,490 ka bulta, kas popped up uz labajā pusē tur, ka viss, 244 00:11:33,490 --> 00:11:36,740 Es ņemšu to, šķiet atkal, ir tas, kas notiek. 245 00:11:36,740 --> 00:11:39,341 Visi, kas notiek ka nevienu koda rindu. 246 00:11:39,341 --> 00:11:41,340 Tagad mēs nokļūt mazliet vairāk vienkārši vēlreiz. 247 00:11:41,340 --> 00:11:43,330 vienāds aizvieto & zīmes m. 248 00:11:43,330 --> 00:11:46,280 Vai jūs atceraties, ko vienāds Ampersand m ir? 249 00:11:46,280 --> 00:11:48,920 Nu tas ir izpaužas M adresi. 250 00:11:48,920 --> 00:11:54,150 Vai nodot vairāk shematiski, A līdz m. 251 00:11:54,150 --> 00:11:56,360 >> vienāds b. 252 00:11:56,360 --> 00:11:57,560 Labi, tāpēc šeit ir vēl viens. 253 00:11:57,560 --> 00:11:59,230 Vienāds b. 254 00:11:59,230 --> 00:12:02,260 Kas notiks diagrammā, šoreiz? 255 00:12:02,260 --> 00:12:04,330 >> Nu atgādināt, ka Piešķiršanas operators darbi 256 00:12:04,330 --> 00:12:08,960 uzticot šo vērtību Tiesības uz šādu vērtību pa kreisi. 257 00:12:08,960 --> 00:12:14,820 Tāpēc tā vietā, lai, kas vērsta uz M, A tagad norāda uz to pašu vietu, ka B punktiem. 258 00:12:14,820 --> 00:12:18,900 nenorāda uz B, A norāda kur B punktus. 259 00:12:18,900 --> 00:12:25,280 >> Ja norādīja uz B, kas būtu bijis vienāds aizvieto & zīmes b. 260 00:12:25,280 --> 00:12:28,150 Bet tā vietā vienāds b tikko nozīmē, ka un b ir tagad 261 00:12:28,150 --> 00:12:31,770 norādot uz to pašu adresi, jo iekšā B ir tikai adrese. 262 00:12:31,770 --> 00:12:35,004 Un tagad iekšpusē no a ir tāda pati adrese. 263 00:12:35,004 --> 00:12:37,170 m ir 10, iespējams, visvienkāršākais lieta 264 00:12:37,170 --> 00:12:38,690 mēs esam darīts mazliet. 265 00:12:38,690 --> 00:12:40,460 Ielieciet 10 lodziņā. 266 00:12:40,460 --> 00:12:45,640 Star b vienāds m plus 2, atsaukt no Mūsu norādes video, ko zvaigzne b nozīmē. 267 00:12:45,640 --> 00:12:50,230 Mēs ejam, lai dereference b un nodot daži vērtība šajā atmiņas vietā. 268 00:12:50,230 --> 00:12:51,860 Šajā gadījumā 12. 269 00:12:51,860 --> 00:12:55,300 >> Tātad, kad mēs dereference kādu vietu atgādināt mēs vienkārši ceļot uz leju bultiņu. 270 00:12:55,300 --> 00:12:58,205 Vai citiem vārdiem sakot, mēs iet uz šo atmiņas adresi 271 00:12:58,205 --> 00:12:59,580 un mēs manipulēt ar to kaut kādā veidā. 272 00:12:59,580 --> 00:13:00,830 Mēs ieliekam kādu vērtību tur. 273 00:13:00,830 --> 00:13:03,960 Šajā gadījumā zvaigžņu b vienāds m plus 2 ir tikai 274 00:13:03,960 --> 00:13:08,230 iet uz mainīgo norādīja uz B, iet uz atmiņas norādīja uz B, 275 00:13:08,230 --> 00:13:11,750 un nodot m plus 2 tur, 12. 276 00:13:11,750 --> 00:13:14,970 >> Tagad es bez b. 277 00:13:14,970 --> 00:13:16,490 Kas notiek, kad es bez b? 278 00:13:16,490 --> 00:13:18,800 Atceries, ko es teicu bezmaksas līdzekļus. 279 00:13:18,800 --> 00:13:21,920 Ko es esmu sevi saprotams, kad es bez b? 280 00:13:21,920 --> 00:13:23,410 >> Esmu beidzis strādāt ar to, labi? 281 00:13:23,410 --> 00:13:25,702 Es būtībā atmest atmiņu. 282 00:13:25,702 --> 00:13:26,910 Es dodu to atpakaļ uz sistēmu. 283 00:13:26,910 --> 00:13:33,010 Man nevajag tas vairs nav ko es esmu stāsta viņiem, OK? 284 00:13:33,010 --> 00:13:37,390 >> Tagad, ja es saku zvaigznīti vienāds 11 jūs varat droši 285 00:13:37,390 --> 00:13:40,460 jau pateikt, ka kaut kas slikts notiks šeit, vai ne? 286 00:13:40,460 --> 00:13:44,160 Un tiešām, ja es mēģināju, ka es, iespējams, ciestu segmentāciju vaina. 287 00:13:44,160 --> 00:13:47,140 Jo tagad, lai gan iepriekš ka rieciens atmiņas 288 00:13:47,140 --> 00:13:50,220 bija kaut kas man bija piekļuve, šajā brīdī 289 00:13:50,220 --> 00:13:54,590 tagad es esmu piekļuvei atmiņa, kas nav juridiska man piekļūt. 290 00:13:54,590 --> 00:13:57,330 >> Un kā mēs, iespējams, atceros, kad mēs piekļūt atmiņas 291 00:13:57,330 --> 00:14:00,000 ka mēs neesam vajadzēja pieskarties, kas ir visbiežākais 292 00:14:00,000 --> 00:14:01,860 no segmentācijas vaina. Un tā mana programma 293 00:14:01,860 --> 00:14:05,170 būtu crash ja es centos to darīt. 294 00:14:05,170 --> 00:14:09,910 Tātad vēlreiz, tā ir laba ideja, lai saņemtu labu prakses un labas paradumiem iesakņojusies 295 00:14:09,910 --> 00:14:12,920 strādājot ar malloc un bez maksas, tā, ka jums nav jācieš segmentāciju 296 00:14:12,920 --> 00:14:15,310 defekti, un ka jūs izmantojat Jūsu dinamiski piešķirta 297 00:14:15,310 --> 00:14:17,370 atmiņa atbildīgi. 298 00:14:17,370 --> 00:14:20,300 >> Es esmu Doug Lloyd tas ir CS50. 299 00:14:20,300 --> 00:14:21,947