1 00:00:00,000 --> 00:00:00,499 2 00:00:00,499 --> 00:00:01,395 [Muusika mängib] 3 00:00:01,395 --> 00:00:05,590 4 00:00:05,590 --> 00:00:07,940 >> DOUG LLOYD: OK nii soovitus Enne siin. 5 00:00:07,940 --> 00:00:11,660 Kui te ei ole vaatasin videot suunanäitajaks võiksite teha esimene. 6 00:00:11,660 --> 00:00:15,860 Kuna see video on teine töömeetod suunanäitajaks. 7 00:00:15,860 --> 00:00:17,574 >> Nii see läheb rääkima umbes mõned mõisted 8 00:00:17,574 --> 00:00:19,490 et me katta ka suunanäitajaks video, ja me oleme 9 00:00:19,490 --> 00:00:21,948 läheb ilustada neid nüüd eeldades, et nad on juba 10 00:00:21,948 --> 00:00:23,090 omamoodi aru. 11 00:00:23,090 --> 00:00:25,440 Nii et lihtsalt oma õiglane hoiatus et kui te näete seda videot 12 00:00:25,440 --> 00:00:27,814 ja sa ei ole näinud viiteid video, see võib omamoodi 13 00:00:27,814 --> 00:00:29,610 lennata üle oma pea natuke. 14 00:00:29,610 --> 00:00:32,080 Ja nii oleks parem seda vaadata selles järjekorras. 15 00:00:32,080 --> 00:00:34,710 >> Nii et me oleme juba näinud võimalus töötada koos suunanäitajaks, 16 00:00:34,710 --> 00:00:37,810 mis on meil välja kuulutada muutuv, ja siis me 17 00:00:37,810 --> 00:00:42,160 Kinnitan teise muutuja osuti muutuja, mis osutab ta. 18 00:00:42,160 --> 00:00:44,870 Nii oleme loonud muutuja nime, me oleme 19 00:00:44,870 --> 00:00:48,480 loodud teise muutuja nimi, ja juhime et teise muutuja 20 00:00:48,480 --> 00:00:50,220 sel esimesena. 21 00:00:50,220 --> 00:00:52,370 Selline on probleem küll, sest see 22 00:00:52,370 --> 00:00:54,650 nõuab, et me teame täpselt kui palju mälu oleme 23 00:00:54,650 --> 00:00:57,600 läheb vaja praegu Meie programm on koostatud. 24 00:00:57,600 --> 00:00:58,220 >> Miks nii? 25 00:00:58,220 --> 00:01:03,338 Sest me peame suutma nimetada või selgitada kõik võimalikud muutujad 26 00:01:03,338 --> 00:01:04,129 Me võime kohata. 27 00:01:04,129 --> 00:01:07,910 Oleksime massiivi, mis võivad olla suudab palju informatsiooni, 28 00:01:07,910 --> 00:01:10,110 aga see ei ole veel täpselt piisavalt täpne. 29 00:01:10,110 --> 00:01:12,640 Mis siis, kui me ei tea, Mis siis, kui me ei tea, 30 00:01:12,640 --> 00:01:14,370 kui palju me vajame kompileerimise ajal? 31 00:01:14,370 --> 00:01:17,020 Või mis siis, kui meie programm kestab väga kaua aega, 32 00:01:17,020 --> 00:01:19,810 vastu erinevate kasutajate andmed ja me ei saa 33 00:01:19,810 --> 00:01:23,170 hinnata, kas me oleme läheb vaja 1000 ühikut? 34 00:01:23,170 --> 00:01:26,060 >> See ei meeldi saame öelda käsureal 35 00:01:26,060 --> 00:01:28,040 sisestage kui palju punkte sa arvad, et sa pead. 36 00:01:28,040 --> 00:01:31,100 Noh, mis siis, kui see oletus on vale? 37 00:01:31,100 --> 00:01:34,300 Dünaamiline mälu eraldamise omamoodi lubab meile teed 38 00:01:34,300 --> 00:01:36,867 saada umbes seda probleemi. 39 00:01:36,867 --> 00:01:38,700 Ja kuidas ta seda teeb on kasutada vihjeid. 40 00:01:38,700 --> 00:01:42,140 >> Me saame kasutada viiteid pääse dünaamiliselt 41 00:01:42,140 --> 00:01:45,710 eraldatud mälu, mälu, mis on jaotatakse oma programm töötab. 42 00:01:45,710 --> 00:01:48,290 See ei ole eraldatud kompileerimise ajal. 43 00:01:48,290 --> 00:01:51,570 Kui dünaamiliselt eraldada mälu see pärineb bassein 44 00:01:51,570 --> 00:01:53,795 mälu tuntud kui hunnik. 45 00:01:53,795 --> 00:01:56,420 Varem kõik mälus me oleme töötanud käigus 46 00:01:56,420 --> 00:01:59,920 on pärit bassein mälu tuntakse virna. 47 00:01:59,920 --> 00:02:02,470 Hea võimalus üldiselt pidage mind-- ja see reegel 48 00:02:02,470 --> 00:02:04,720 alati ei pea paika, aga päris palju peaaegu 49 00:02:04,720 --> 00:02:09,940 alati hoiab true-- on see, et mis tahes kord, kui muutuja nime 50 00:02:09,940 --> 00:02:12,090 Tõenäoliselt elab virna. 51 00:02:12,090 --> 00:02:14,650 Ja iga kord, kui seda ei tee annab muutuja nimi, 52 00:02:14,650 --> 00:02:19,160 mida saate teha koos dünaamilise mälu jaotamist, see elab hunnik. 53 00:02:19,160 --> 00:02:22,190 >> Nüüd ma olen selline, esitades seda kas seal on need kaks basseinid mälu. 54 00:02:22,190 --> 00:02:24,740 Aga olete näinud seda diagramm, mis on üldiselt 55 00:02:24,740 --> 00:02:27,290 esindamine Mis mälu välja näeb, 56 00:02:27,290 --> 00:02:30,373 ja me ei kavatse hoolivad kõik kraami tipus ja allosas. 57 00:02:30,373 --> 00:02:33,580 Mida me hoolime on see osa Lähis siin, hunnik ja korstna. 58 00:02:33,580 --> 00:02:35,570 Nagu näete, mida Vaadates seda skeemi, 59 00:02:35,570 --> 00:02:38,390 Nende tegelikult ei ole kahe eraldi basseinid mälu. 60 00:02:38,390 --> 00:02:42,757 See on üks ühine bassein mälu kus hakkate, selle visuaalne 61 00:02:42,757 --> 00:02:44,590 hakkate allosas ja alustada tangivad 62 00:02:44,590 --> 00:02:48,040 alt koos virna ja sina teksti algusest ja alustada tangivad 63 00:02:48,040 --> 00:02:50,072 ülalt alla koos hunnik. 64 00:02:50,072 --> 00:02:51,780 Aga see on tõesti Sama pool, see on lihtsalt 65 00:02:51,780 --> 00:02:56,050 eri kohtades, erinevates kohtades mälu, mida jaotatakse. 66 00:02:56,050 --> 00:02:59,060 Ja saab otsa mälu, mis on kas 67 00:02:59,060 --> 00:03:01,240 hunnik minna kogu tee põhja või on 68 00:03:01,240 --> 00:03:05,440 virna minna kogu tee üles, või kellel on pinust 69 00:03:05,440 --> 00:03:06,740 kohtuda üksteise vastu. 70 00:03:06,740 --> 00:03:09,500 Kõik need võivad olla tingimused mis põhjustavad oma programmi 71 00:03:09,500 --> 00:03:11,030 otsa mälu. 72 00:03:11,030 --> 00:03:11,952 Nii et hoidke seda silmas pidades. 73 00:03:11,952 --> 00:03:13,660 Kui me räägime hunnik ja korstna 74 00:03:13,660 --> 00:03:17,880 me tegelikult räägime sama üldise patakas mälu, vaid 75 00:03:17,880 --> 00:03:21,930 erinevatel osadel, et mälu. 76 00:03:21,930 --> 00:03:24,910 >> Niisiis, kuidas me saame dünaamiliselt eraldatud mälu esimese koha? 77 00:03:24,910 --> 00:03:27,740 Kuidas meie programmi saada mälu nagu see töötab? 78 00:03:27,740 --> 00:03:32,660 Noh C on funktsioon, mida nimetatakse malloc, mälu eraldaja, mis 79 00:03:32,660 --> 00:03:36,810 Teile helistada ja sa liigu kui palju baiti mälu, mida soovite. 80 00:03:36,810 --> 00:03:39,940 Seega, kui teie programm töötab ja sa tahad täisarv runtime, 81 00:03:39,940 --> 00:03:46,040 võite mallock neljabaidilist mälu, malloc sulgudes neli. 82 00:03:46,040 --> 00:03:48,540 >> mallock läheb läbi Vaata läbi hunnik, 83 00:03:48,540 --> 00:03:50,750 sest me oleme dünaamiliselt eraldada mälu, 84 00:03:50,750 --> 00:03:53,500 ja siis tagasi sa kursor, et mälu. 85 00:03:53,500 --> 00:03:56,180 See ei anna teile, et memory-- see ei anna talle nime, 86 00:03:56,180 --> 00:03:57,950 see annab sulle viida seda. 87 00:03:57,950 --> 00:04:00,780 Ja seepärast ongi jälle ma ütlesin et see on oluline, et võibolla 88 00:04:00,780 --> 00:04:03,770 jälginud viiteid video enne kui me liiga palju sellesse. 89 00:04:03,770 --> 00:04:05,940 Nii malloc läheb teile tagasi pointer. 90 00:04:05,940 --> 00:04:08,950 >> Kui mallock ei anna teile mingit mälu, sest olete otsa, 91 00:04:08,950 --> 00:04:10,645 see annab sulle tagasi nullviida. 92 00:04:10,645 --> 00:04:15,282 Kas sa mäletad, mis juhtub, kui me proovida ja apparent nullviida? 93 00:04:15,282 --> 00:04:17,019 Me kannatavad seg süü, eks? 94 00:04:17,019 --> 00:04:18,060 See ilmselt ei ole hea. 95 00:04:18,060 --> 00:04:21,579 >> Nii et iga kord, kui helistada to malloc sa alati, alati 96 00:04:21,579 --> 00:04:25,270 on vaja kontrollida, kas pointer ta andis sulle tagasi on null. 97 00:04:25,270 --> 00:04:28,800 Kui see on, mida vaja lõpetada oma programmi sest kui sa püüad ja apparent 98 00:04:28,800 --> 00:04:31,360 null pointer sa lähed kannatavad killustatust süü 99 00:04:31,360 --> 00:04:34,380 ja teie programm on kukku niikuinii. 100 00:04:34,380 --> 00:04:37,190 Niisiis, kuidas me staatiliselt saada täisarv? 101 00:04:37,190 --> 00:04:37,730 >> int x. 102 00:04:37,730 --> 00:04:40,010 Me oleme ilmselt teinud kamp korda, eks? 103 00:04:40,010 --> 00:04:43,480 See loob muutuja nimega x, kes elab virna. 104 00:04:43,480 --> 00:04:46,190 Kuidas me dünaamiliselt saada täisarv? 105 00:04:46,190 --> 00:04:50,010 Int star px võrdub malloc 4. 106 00:04:50,010 --> 00:04:53,050 >> Või õigem me tahaks öelda int star px 107 00:04:53,050 --> 00:04:57,680 võrdub malloc suurus int, lihtsalt visata mõned vähem 108 00:04:57,680 --> 00:04:59,740 magic numbrid ümber meie programmi. 109 00:04:59,740 --> 00:05:04,140 See läheb saada meile nelja baiti mälu hunnik, 110 00:05:04,140 --> 00:05:06,720 ja kursor saame tagasi nimetatakse seda px. 111 00:05:06,720 --> 00:05:08,430 Ja siis nagu me oleme seda varem teinud oleme 112 00:05:08,430 --> 00:05:13,966 saab apparent px, et juurde, et mälu. 113 00:05:13,966 --> 00:05:15,590 Kuidas saada täisarv kasutaja? 114 00:05:15,590 --> 00:05:17,970 Me ei saa öelda, int x võrdub saada int. 115 00:05:17,970 --> 00:05:19,930 See on üsna lihtne. 116 00:05:19,930 --> 00:05:24,030 Mis siis, kui me tahame luua massiivi X ujukid, mis elada korstna? 117 00:05:24,030 --> 00:05:28,210 float stack_array-- see on nimi Meie array-- nurksulgudes x. 118 00:05:28,210 --> 00:05:32,419 See loob meile hulgaliselt X ujukid, mis elada virna. 119 00:05:32,419 --> 00:05:34,960 Me ei saa luua massiivi ujukid kes elab hunnik ka. 120 00:05:34,960 --> 00:05:37,330 Süntaks võib tunduda veidi kohmakas, 121 00:05:37,330 --> 00:05:41,740 kuid me ei saa öelda, float star heap_array võrdub 122 00:05:41,740 --> 00:05:44,360 malloc x korda suurem float. 123 00:05:44,360 --> 00:05:48,160 Mul on vaja piisavalt ruumi, et hoida x ujukoma väärtusi. 124 00:05:48,160 --> 00:05:51,560 Nii et mul on vaja 100 ujukite või 1000 ujukid. 125 00:05:51,560 --> 00:05:54,810 Nii et juhul oleks 400 baiti 100 ujukid, 126 00:05:54,810 --> 00:05:59,080 või 4000 baiti 1000 ujukid, sest iga float võtab 127 00:05:59,080 --> 00:06:01,230 neljabaidilist ruumi. 128 00:06:01,230 --> 00:06:05,110 >> Pärast seda ma ei kasuta nurksulg süntaksi kohta heap_array. 129 00:06:05,110 --> 00:06:08,970 Just nagu ma oleks edasi stack_array, ma pääseb selle elemendid eraldi 130 00:06:08,970 --> 00:06:11,590 kasutades heap_array null, heap_array üks. 131 00:06:11,590 --> 00:06:15,800 Aga meelde põhjus, miks me ei saa seda teha sellepärast, et nimi massiivi C 132 00:06:15,800 --> 00:06:19,990 on tõesti viit et massiivi esimene element. 133 00:06:19,990 --> 00:06:23,480 Nii, et me tunnistamise massiivi ujukeid stack siin 134 00:06:23,480 --> 00:06:24,810 on tegelikult natuke eksitav. 135 00:06:24,810 --> 00:06:27,600 Me tõesti on teine ​​rida koodi seal 136 00:06:27,600 --> 00:06:32,360 Samuti luua kursori patakas mälu, mis me siis teeme mõned tööd. 137 00:06:32,360 --> 00:06:35,620 >> Siin on suur probleem dünaamiliselt eraldatud mälu küll, 138 00:06:35,620 --> 00:06:38,360 ja see on põhjus, miks see on tõesti oluline arendada häid harjumusi 139 00:06:38,360 --> 00:06:39,800 kui te töötate koos sellega. 140 00:06:39,800 --> 00:06:43,060 Erinevalt staatiliselt deklareeritud mälu, mälu 141 00:06:43,060 --> 00:06:46,790 automaatselt ei tagastata süsteemi, kui teie ülesanne on teha. 142 00:06:46,790 --> 00:06:49,280 Nii et kui meil on peamine ja Peamised nõuab funktsiooni 143 00:06:49,280 --> 00:06:53,860 f, siis f viimistluse iganes seda teed ja naaseb kontroll programmi 144 00:06:53,860 --> 00:06:58,810 Tagasi, kõik mälu et f kasutatakse antakse tagasi. 145 00:06:58,810 --> 00:07:01,250 Seda saab kasutada jälle mõne muu programmi 146 00:07:01,250 --> 00:07:04,250 või mõni muu funktsioon, mis saab nimetada hiljem peamine. 147 00:07:04,250 --> 00:07:06,970 Seda saab kasutada sama mälu jälle. 148 00:07:06,970 --> 00:07:09,620 >> Kui teil dünaamiliselt mälu eraldada kuigi 149 00:07:09,620 --> 00:07:14,380 sa pead selgelt öelda süsteem, mis sa oled teinud seda. 150 00:07:14,380 --> 00:07:18,370 Seda saad hoida peale seda teile, mis võiks põhjustada probleeme teist otsa 151 00:07:18,370 --> 00:07:19,290 mälu. 152 00:07:19,290 --> 00:07:22,179 Ja tegelikult me ​​mõnikord viidata sellele nagu Mälulekke. 153 00:07:22,179 --> 00:07:24,970 Ja mõnikord need mälulekked võib tegelikult olla väga laastav 154 00:07:24,970 --> 00:07:27,020 süsteemi jõudlust. 155 00:07:27,020 --> 00:07:31,120 >> Kui teil on sagedased internetikasutaja võite kasutada teatud brausereid, 156 00:07:31,120 --> 00:07:35,630 ja ma ei nimeta nimesid siin, kuid seal on mõned veebibrauserid seal 157 00:07:35,630 --> 00:07:39,150 mis on tuntud oleks tegelikult mälulekked et ei saada fikseeritud. 158 00:07:39,150 --> 00:07:44,570 Ja kui sa jätad oma brauseri avatud väga pikka aega, päeva 159 00:07:44,570 --> 00:07:48,060 ja päeva või nädalat, mõnikord Võib märgata, et teie süsteem 160 00:07:48,060 --> 00:07:49,790 on töötab tõesti aeglaselt. 161 00:07:49,790 --> 00:07:54,640 Ja selle põhjuseks on see, et brauser on eraldatud mälu 162 00:07:54,640 --> 00:07:57,320 kuid siis ei rääkinud süsteemi et ta on teinud seda. 163 00:07:57,320 --> 00:08:01,000 Ja nii, et jätab vähem mälu saadaval kõik teie teised programmid 164 00:08:01,000 --> 00:08:04,480 on jagada, sest sa oled leaking-- et veebilehitseja 165 00:08:04,480 --> 00:08:06,755 Programm lekib mälu. 166 00:08:06,755 --> 00:08:08,880 Kuidas me anname mälu tagasi kui me teinud on? 167 00:08:08,880 --> 00:08:10,838 Noh õnneks on see väga lihtne viis seda teha. 168 00:08:10,838 --> 00:08:11,710 Me lihtsalt vaba ta. 169 00:08:11,710 --> 00:08:15,020 Seal on funktsioon nimega tasuta, ta võtab kursor mälu 170 00:08:15,020 --> 00:08:16,010 ja me oleme hea minna. 171 00:08:16,010 --> 00:08:18,310 >> Ütleme, et me oleme ka Keset meie programmi, 172 00:08:18,310 --> 00:08:21,970 tahame malloc 50 tähemärki. 173 00:08:21,970 --> 00:08:25,710 Tahame malloc massiivi, mis võivad mahub 50 tähemärki. 174 00:08:25,710 --> 00:08:29,109 Ja kui me osuti tagasi et see kursor nimi on sõna. 175 00:08:29,109 --> 00:08:30,900 Me teha mida iganes me kavatseb teha sõna, 176 00:08:30,900 --> 00:08:33,440 ja siis, kui me teinud me lihtsalt vaba ta. 177 00:08:33,440 --> 00:08:37,460 Ja nüüd oleme tagasi need 50 baiti mälu tagasi süsteemi. 178 00:08:37,460 --> 00:08:40,147 Mõned teised funktsiooni saab neid kasutada. 179 00:08:40,147 --> 00:08:43,480 Me ei pea muretsema kannatusi mäluleke sest oleme vabanenud sõna. 180 00:08:43,480 --> 00:08:46,639 Me andsime mälu tagasi, nii ongi kõik töötab ta. 181 00:08:46,639 --> 00:08:48,430 Nii on kolm kuldreeglit, mis tuleks 182 00:08:48,430 --> 00:08:51,700 tuleb silmas pidada, kui sa oled dünaamiliselt eraldada mälu 183 00:08:51,700 --> 00:08:52,990 koos malloc. 184 00:08:52,990 --> 00:08:56,480 Iga ploki mälu sa malloc tuleb vabastada 185 00:08:56,480 --> 00:08:58,430 Enne oma programmi lõpetab töötamise. 186 00:08:58,430 --> 00:09:02,029 Nüüd jälle, et seadme või IDE sellist juhtub nagunii 187 00:09:02,029 --> 00:09:04,820 kui Sa-- see juhtub niikuinii Kui teie programm on lõpetatud, 188 00:09:04,820 --> 00:09:06,880 kõik mälu ilmub. 189 00:09:06,880 --> 00:09:10,750 Aga see on üldiselt hea kodeerimine Praktikas on alati, kui sa oled teinud, 190 00:09:10,750 --> 00:09:13,810 tasuta mida olete mallocd. 191 00:09:13,810 --> 00:09:16,690 >> See tähendab, et ainsad asjad, mis olete mallocd tuleks vabastada. 192 00:09:16,690 --> 00:09:19,880 Kui te staatiliselt tunnistada täisarv, int x semikoolon, 193 00:09:19,880 --> 00:09:23,500 kes elab virna, siis ei, siis tahad, et vabastada x. 194 00:09:23,500 --> 00:09:25,970 Nii ainsad asjad, mis sa oled mallocd tuleks vabastada. 195 00:09:25,970 --> 00:09:28,960 >> Ja lõpuks, ärge tasuta midagi korda. 196 00:09:28,960 --> 00:09:31,170 See võib kaasa tuua teine ​​imelik olukord. 197 00:09:31,170 --> 00:09:33,530 Nii et kõik, mis sa oled mallocd tuleb vabastada. 198 00:09:33,530 --> 00:09:36,000 Ainult asju, mida olete malloc tuleks vabastada. 199 00:09:36,000 --> 00:09:38,730 Ja ärge tasuta midagi korda. 200 00:09:38,730 --> 00:09:43,660 >> Nii lähme näitena siin mida mõned dünaamiliselt eraldatud 201 00:09:43,660 --> 00:09:46,122 mälu tunduda segatud sisse mõned staatilised mälu. 202 00:09:46,122 --> 00:09:47,080 Mis võib juhtuda siin? 203 00:09:47,080 --> 00:09:48,913 Vaadake, kas saate jälgida mööda ja arvan, mida on 204 00:09:48,913 --> 00:09:51,720 juhtub, kui me läheme läbi kõik need rida koodi. 205 00:09:51,720 --> 00:09:53,980 >> Nii me ütleme int m. 206 00:09:53,980 --> 00:09:54,840 Mis juhtub siin? 207 00:09:54,840 --> 00:09:56,339 Jah, see on üsna lihtne. 208 00:09:56,339 --> 00:09:59,650 Ma loon täisarv muutuja nimega m. 209 00:09:59,650 --> 00:10:01,400 Ma värvi see roheline, sest see värv 210 00:10:01,400 --> 00:10:03,730 et ma kasutan, kui ma räägin umbes täisarv muutujad. 211 00:10:03,730 --> 00:10:05,160 See on kast. 212 00:10:05,160 --> 00:10:08,400 Seda nimetatakse m, ja te saate poest täisarvud sees on. 213 00:10:08,400 --> 00:10:12,400 >> Mis siis, kui ma siis ütlen int tärniga? 214 00:10:12,400 --> 00:10:13,530 Noh, et on päris sarnased. 215 00:10:13,530 --> 00:10:15,780 Ma koostan kasti nimega. 216 00:10:15,780 --> 00:10:19,100 See mahub int tähed, vihjeid täisarvud. 217 00:10:19,100 --> 00:10:21,570 Nii et ma värvimine see roheline-ish samuti. 218 00:10:21,570 --> 00:10:24,140 >> Ma tean, et see on midagi pistmist täisarv, 219 00:10:24,140 --> 00:10:25,852 kuid see ei ole iseenesest täisarv. 220 00:10:25,852 --> 00:10:27,310 Aga see on üsna sama mõte. 221 00:10:27,310 --> 00:10:28,101 Olen loonud kasti. 222 00:10:28,101 --> 00:10:30,070 Mõlemad õigus nüüd elan virna. 223 00:10:30,070 --> 00:10:32,520 Ma olen andnud neile mõlemad nimed. 224 00:10:32,520 --> 00:10:36,750 >> int star b võrdub malloc suurus int. 225 00:10:36,750 --> 00:10:38,560 See võiks olla natuke keeruline. 226 00:10:38,560 --> 00:10:44,110 Võtke hetk ja mõelda, mida sa ootaks juhtuda sellel skeemil. 227 00:10:44,110 --> 00:10:50,210 int star b võrdub malloc suurus int. 228 00:10:50,210 --> 00:10:51,940 >> Noh see ei ole lihtsalt luua üks kast. 229 00:10:51,940 --> 00:10:53,800 See loob tegelikult kaks kasti. 230 00:10:53,800 --> 00:10:58,670 Ja see haakub see sätestab ka punkt suhe. 231 00:10:58,670 --> 00:11:02,240 Me oleme eraldatud üks plokk mälu hunnik. 232 00:11:02,240 --> 00:11:05,940 Pange tähele, et üleval paremal kastis seal ei ole veel nime. 233 00:11:05,940 --> 00:11:06,760 >> Me mallocd ta. 234 00:11:06,760 --> 00:11:08,050 See on olemas hunnik. 235 00:11:08,050 --> 00:11:10,090 Aga b on nimi. 236 00:11:10,090 --> 00:11:11,950 See on pointer muutuja nimega b. 237 00:11:11,950 --> 00:11:13,910 See elab virna. 238 00:11:13,910 --> 00:11:18,250 >> Nii et see on tükk mälu mis osutab mõni teine. 239 00:11:18,250 --> 00:11:21,840 b sisaldab aadress Selle ploki mälu. 240 00:11:21,840 --> 00:11:23,757 See ei ole veel nime teisiti. 241 00:11:23,757 --> 00:11:24,590 Aga see juhib ta. 242 00:11:24,590 --> 00:11:29,760 Nii et kui me ütleme, int star b võrdub malloc suurus int, et seal, 243 00:11:29,760 --> 00:11:33,490 et nool, et hüppasid üles paremal pool seal, et kogu see asi, 244 00:11:33,490 --> 00:11:36,740 Võtan tundub uuesti, on see, mis juhtub. 245 00:11:36,740 --> 00:11:39,341 Kõik, mis juhtub et koodirida. 246 00:11:39,341 --> 00:11:41,340 Nüüd saad natuke rohkem lihtne uuesti. 247 00:11:41,340 --> 00:11:43,330 a on võrdne ampersand m. 248 00:11:43,330 --> 00:11:46,280 Kas te mäletate, milline võrdub ampersand m on? 249 00:11:46,280 --> 00:11:48,920 Noh, et on saab m aadressi. 250 00:11:48,920 --> 00:11:54,150 Või panna rohkem diagrammiliselt punktisüsteemi m. 251 00:11:54,150 --> 00:11:56,360 >> a on võrdne b. 252 00:11:56,360 --> 00:11:57,560 OK, nii et siin on veel üks. 253 00:11:57,560 --> 00:11:59,230 A on võrdne b. 254 00:11:59,230 --> 00:12:02,260 Mis juhtub skeemile seekord? 255 00:12:02,260 --> 00:12:04,330 >> Noh meelde tuletada, et omistamisoperaatorile tööd 256 00:12:04,330 --> 00:12:08,960 määrates väärtuse kohta õigus väärtus vasakul. 257 00:12:08,960 --> 00:12:14,820 Nii asemel osutades m, praeguseks juhib samas kohas, et b punkti. 258 00:12:14,820 --> 00:12:18,900 ei viita B, A lõikumispunktid b punkti. 259 00:12:18,900 --> 00:12:25,280 >> Kui terava b-, mis olnud võrdne ampersand b. 260 00:12:25,280 --> 00:12:28,150 Aga selle asemel võrdub b lihtsalt tähendab, et ja b on nüüd 261 00:12:28,150 --> 00:12:31,770 osutades samal aadressil, sest sees b on lihtsalt aadress. 262 00:12:31,770 --> 00:12:35,004 Ja nüüd sees on sama aadress. 263 00:12:35,004 --> 00:12:37,170 m võrdub 10, ilmselt Kõige lihtsam asi 264 00:12:37,170 --> 00:12:38,690 Me oleme teinud natuke. 265 00:12:38,690 --> 00:12:40,460 Pane 10 kasti. 266 00:12:40,460 --> 00:12:45,640 Star b võrdub m pluss 2, mäletate Meie viiteid video, mida täht b tähendab. 267 00:12:45,640 --> 00:12:50,230 Me läheme apparent b ja panna mingi väärtus, et mälu asukohta. 268 00:12:50,230 --> 00:12:51,860 Sel juhul 12. 269 00:12:51,860 --> 00:12:55,300 >> Nii et kui me apparent punkti, mäleta me lihtsalt sõita mööda nool. 270 00:12:55,300 --> 00:12:58,205 Või teisiti öeldes, me minna, et mälu aadress 271 00:12:58,205 --> 00:12:59,580 ja me manipuleerida seda mingil moel. 272 00:12:59,580 --> 00:13:00,830 Panime mingi väärtus seal. 273 00:13:00,830 --> 00:13:03,960 Sel juhul star b võrdub m pluss 2 on lihtsalt 274 00:13:03,960 --> 00:13:08,230 minna muutuja poolt esile tõstetud b, mine mälu, millele viitab b, 275 00:13:08,230 --> 00:13:11,750 ja panna m pluss 2 seal, 12. 276 00:13:11,750 --> 00:13:14,970 >> Nüüd ma vabaks b. 277 00:13:14,970 --> 00:13:16,490 Mis juhtub, kui ma vabaks b? 278 00:13:16,490 --> 00:13:18,800 Pea meeles, mida ma ütlesin tasuta vahendeid. 279 00:13:18,800 --> 00:13:21,920 Mida ma öelda, kui ma vabaks b? 280 00:13:21,920 --> 00:13:23,410 >> Ma olen teinud koostööd, eks? 281 00:13:23,410 --> 00:13:25,702 Ma sisuliselt loobuma mälu. 282 00:13:25,702 --> 00:13:26,910 Ma annan selle tagasi süsteemi. 283 00:13:26,910 --> 00:13:33,010 Ma ei pea seda enam on mida ma räägin nendega OK? 284 00:13:33,010 --> 00:13:37,390 >> Nüüd, kui ma ütlen, tärniga võrdub 11 saab ilmselt 285 00:13:37,390 --> 00:13:40,460 juba öelda, et midagi halba juhtub siin, eks? 286 00:13:40,460 --> 00:13:44,160 Ja tõepoolest, kui ma proovisin, et ma ilmselt kannaksid killustatust süü. 287 00:13:44,160 --> 00:13:47,140 Sest nüüd, kuigi varem, et patakas mälu 288 00:13:47,140 --> 00:13:50,220 oli midagi, mis mul oli juurdepääsu, sel hetkel 289 00:13:50,220 --> 00:13:54,590 nüüd ma juurdepääsu mälu ei ole õiguslikke mulle juurde. 290 00:13:54,590 --> 00:13:57,330 >> Ja nagu me ilmselt mäletate, kui me Access Memory 291 00:13:57,330 --> 00:14:00,000 et me ei peaks puudutama, see on kõige levinum põhjus 292 00:14:00,000 --> 00:14:01,860 on segmenteerimine süü. Ja nii minu programmi 293 00:14:01,860 --> 00:14:05,170 krahhi, kui ma püüdsin seda teha. 294 00:14:05,170 --> 00:14:09,910 Nii jälle, et see on hea mõte hea tavade ja heade harjumuste juurdunud 295 00:14:09,910 --> 00:14:12,920 töötamisel malloc ja tasuta, nii et sa ei kannata segmenteerimine 296 00:14:12,920 --> 00:14:15,310 vead, ja mida saate kasutada Sinu dünaamiliselt eraldatud 297 00:14:15,310 --> 00:14:17,370 mälu vastutustundlikult. 298 00:14:17,370 --> 00:14:20,300 >> Ma olen Doug Lloyd see on CS50. 299 00:14:20,300 --> 00:14:21,947