1 00:00:00,000 --> 00:00:00,499 2 00:00:00,499 --> 00:00:01,395 [MÜZİK OYUN] 3 00:00:01,395 --> 00:00:05,590 4 00:00:05,590 --> 00:00:07,940 >> Doug LLOYD: Tamam yani bir öneri Burada başlamadan önce. 5 00:00:07,940 --> 00:00:11,660 Videoyu izledim değilseniz Bunu ilk yapmak isteyebilirsiniz değineği. 6 00:00:11,660 --> 00:00:15,860 Bu videoyu Çünkü başka işaretçileri ile çalışma yolu. 7 00:00:15,860 --> 00:00:17,574 >> Yani konuşacak Bazı kavramlar hakkında 8 00:00:17,574 --> 00:00:19,490 Biz kapsayan Videoyu değineği ve biz konum 9 00:00:19,490 --> 00:00:21,948 Şimdi onlara geçiştirmeye gidiyor onlar zaten olduğunu varsayarak 10 00:00:21,948 --> 00:00:23,090 tür anladım. 11 00:00:23,090 --> 00:00:25,440 Yani bu sadece adil bir uyarı var Bu bu videoyu görüyorsanız eğer 12 00:00:25,440 --> 00:00:27,814 ve görmedim göstericiler, video, olabilir çeşit 13 00:00:27,814 --> 00:00:29,610 başınızın üzerinde biraz uçmak. 14 00:00:29,610 --> 00:00:32,080 Ve bu yüzden daha iyi olabilir sırayla izlemek için. 15 00:00:32,080 --> 00:00:34,710 >> Yani biz zaten bir gördük yol, işaretçileri ile çalışmak 16 00:00:34,710 --> 00:00:37,810 hangi bir beyan olduğunu Değişken, ve sonra biz 17 00:00:37,810 --> 00:00:42,160 Bir işaretçi başka bir değişken bildirmek Değişken, bunun işaret ediyor. 18 00:00:42,160 --> 00:00:44,870 Yani biz yarattık bir bir isimle değişken, biz ettik 19 00:00:44,870 --> 00:00:48,480 Bir isimde ikinci bir değişken yarattı ve ikinci değişken olduğunu işaret 20 00:00:48,480 --> 00:00:50,220 ilk başta. 21 00:00:50,220 --> 00:00:52,370 Bu tür olan sorun olsa, bunun nedeni 22 00:00:52,370 --> 00:00:54,650 Tam bilmek bize gerektirir ne kadar bellek biz konum 23 00:00:54,650 --> 00:00:57,600 anı ihtiyacımız olacak Program derlenmiştir. 24 00:00:57,600 --> 00:00:58,220 >> Neden? 25 00:00:58,220 --> 00:01:03,338 Biz isim gerekiyor çünkü ya olası tüm değişkenlerin belirlenmesi 26 00:01:03,338 --> 00:01:04,129 Biz karşılaşabilirsiniz. 27 00:01:04,129 --> 00:01:07,910 Biz olabilir bir dizi olabilir birçok bilgi tutabilir, 28 00:01:07,910 --> 00:01:10,110 ama yine de değil Yeterli tam kesin. 29 00:01:10,110 --> 00:01:12,640 Ne bilmiyorsanız, ne hiçbir fikrim varsa 30 00:01:12,640 --> 00:01:14,370 Ne kadar biz derleme zamanında gerekir? 31 00:01:14,370 --> 00:01:17,020 Ya da ne program olacak eğer gerçekten uzun bir süre için çalışacak, 32 00:01:17,020 --> 00:01:19,810 Çeşitli kullanıcı kabul Veri ve biz yapamam gerçekten 33 00:01:19,810 --> 00:01:23,170 Biz ister tahmin 1000 birimleri ihtiyacınız olacak? 34 00:01:23,170 --> 00:01:26,060 >> Biz can gibi değil Komut satırında söylemek 35 00:01:26,060 --> 00:01:28,040 Kaç öğe girmek Eğer gerekir düşünüyorum. 36 00:01:28,040 --> 00:01:31,100 Peki bu tahmin neyin olur? 37 00:01:31,100 --> 00:01:34,300 Dinamik bellek ayırma tür bize yol sağlar 38 00:01:34,300 --> 00:01:36,867 Bu özel sorunu aşmanın. 39 00:01:36,867 --> 00:01:38,700 Ve yolu yapar işaretçileri kullanmaktır. 40 00:01:38,700 --> 00:01:42,140 >> Biz işaretçileri için kullanabileceğiniz dinamik erişmek 41 00:01:42,140 --> 00:01:45,710 olduğunu ayrılan bellek, hafıza Programınızın olarak tahsis çalışıyor. 42 00:01:45,710 --> 00:01:48,290 Bu derleme zamanında tahsis değil. 43 00:01:48,290 --> 00:01:51,570 Ne zaman dinamik tahsis Bellek, bir havuzdan geliyor 44 00:01:51,570 --> 00:01:53,795 bellek yığın olarak da bilinir. 45 00:01:53,795 --> 00:01:56,420 Biz ettik daha önce tüm bellek derste birlikte çalışıyor 46 00:01:56,420 --> 00:01:59,920 Bir havuzdan gelecek olan bellek yığın olarak da bilinir. 47 00:01:59,920 --> 00:02:02,470 Iyi bir yolu genel olarak zihinli ve bu kural tutmak 48 00:02:02,470 --> 00:02:04,720 Her zaman, gerçek tutmaz ama hemen hemen neredeyse 49 00:02:04,720 --> 00:02:09,940 her bir true-- olmasıdır tutar zaman bir değişken adı o verin 50 00:02:09,940 --> 00:02:12,090 Muhtemelen yığını yaşıyor. 51 00:02:12,090 --> 00:02:14,650 Ve her zaman değil mi Bir değişkene bir ad verin, 52 00:02:14,650 --> 00:02:19,160 Dinamik bellek ile yapabileceğiniz hangi tahsisi, bu öbek üzerinde yaşıyor. 53 00:02:19,160 --> 00:02:22,190 >> Şimdi biraz bu takdim ediyorum belleğin bu iki havuzu varsa. 54 00:02:22,190 --> 00:02:24,740 Ama bu görmüş olabilirsiniz genellikle diyagramıdır, 55 00:02:24,740 --> 00:02:27,290 bir temsilini hangi bellek gibi görünüyor 56 00:02:27,290 --> 00:02:30,373 ve biz hakkında umurumda gitmiyorsun altta ve üstte şeyler. 57 00:02:30,373 --> 00:02:33,580 Ne umurumda Bu parçasıdır Burada orta yığın ve. 58 00:02:33,580 --> 00:02:35,570 Eğer görebileceğiniz gibi Bu diyagram bakarak, 59 00:02:35,570 --> 00:02:38,390 Bu aslında iki değil belleğin ayrı havuzlar. 60 00:02:38,390 --> 00:02:42,757 Bu belleğin bir ortak havuzu nerede bu görsel çalıştırma 61 00:02:42,757 --> 00:02:44,590 Eğer altta başlayacak ve dolduruyor başlayın 62 00:02:44,590 --> 00:02:48,040 yığını ile alt ve sizden üstünde başlangıç ​​ve dolduruyor başlayın 63 00:02:48,040 --> 00:02:50,072 öbek ile yukarıdan aşağı. 64 00:02:50,072 --> 00:02:51,780 Ama gerçekten Aynı havuz, bu sadece 65 00:02:51,780 --> 00:02:56,050 Farklı noktalar, farklı yerlerde bellekte ayrılan ediliyor. 66 00:02:56,050 --> 00:02:59,060 Ve dışarı çalıştırabilirsiniz Ya sahip bellek 67 00:02:59,060 --> 00:03:01,240 öbek tüm yol alt, ya da var 68 00:03:01,240 --> 00:03:05,440 yığını, üst tüm yol gitmek veya öbek ve yığını olan 69 00:03:05,440 --> 00:03:06,740 birbirlerine karşı buluşmak. 70 00:03:06,740 --> 00:03:09,500 Bunların tüm koşullar olabilir Bu programı neden 71 00:03:09,500 --> 00:03:11,030 bellek tükendi. 72 00:03:11,030 --> 00:03:11,952 Yani akılda tutmak. 73 00:03:11,952 --> 00:03:13,660 Biz hakkında konuşmak yığın ve 74 00:03:13,660 --> 00:03:17,880 biz gerçekten bahsediyoruz bellek aynı genel öbek, sadece 75 00:03:17,880 --> 00:03:21,930 Bu belleğin farklı bölümleri. 76 00:03:21,930 --> 00:03:24,910 >> Bu yüzden dinamik nasıl alabilirim ilk etapta bellek tahsis? 77 00:03:24,910 --> 00:03:27,740 Program olsun nasıl o çalışıyor gibi bellek? 78 00:03:27,740 --> 00:03:32,660 Peki C olarak adlandırılan bir işlev sağlar malloc, bellek ayırıcısı, hangi 79 00:03:32,660 --> 00:03:36,810 Eğer bir çağrı yapmak ve pass Kaç istediğiniz bellek bayt. 80 00:03:36,810 --> 00:03:39,940 Programınız çalışıyorsa yüzden ve bir tamsayı runtime istiyorum, 81 00:03:39,940 --> 00:03:46,040 Eğer dört bayt Mallock olabilir Bellek, malloc dört parantez. 82 00:03:46,040 --> 00:03:48,540 >> Mallock geçeceği yığın bakarak, 83 00:03:48,540 --> 00:03:50,750 Biz dinamik çünkü bellek ayrılırken, 84 00:03:50,750 --> 00:03:53,500 ve size dönecektir Bu belleğin bir gösterici. 85 00:03:53,500 --> 00:03:56,180 Size bu memory-- vermez o ona bir isim vermez, 86 00:03:56,180 --> 00:03:57,950 size bunu bir işaretçi verir. 87 00:03:57,950 --> 00:04:00,780 Yine dedim yüzden bu yüzden var belki önemli olduğunu 88 00:04:00,780 --> 00:04:03,770 işaretçileri video izledim Biz bu işin içine çok girmeden önce. 89 00:04:03,770 --> 00:04:05,940 Yani malloc gidiyor bir işaretçi size geri verir. 90 00:04:05,940 --> 00:04:08,950 >> Mallock size bir veremem Eğer bellek tükendi, çünkü 91 00:04:08,950 --> 00:04:10,645 Bir null işaretçi size geri vereceğiz. 92 00:04:10,645 --> 00:04:15,282 Eğer biz ne olur hatırlıyor musun denemek ve bir boş gösterici KQUEUE? 93 00:04:15,282 --> 00:04:17,019 Biz doğru bir seg arıza acı? 94 00:04:17,019 --> 00:04:18,060 Muhtemelen iyi değil. 95 00:04:18,060 --> 00:04:21,579 >> Yani her zaman bir arama yapmak Her zaman hep malloc 96 00:04:21,579 --> 00:04:25,270 kontrol etmeniz gerekir olsun veya olmasın o geri null verdi işaretçisi. 97 00:04:25,270 --> 00:04:28,800 Eğer öyleyse, sizin Programı sonlandırmak için gereken Eğer inceleyebilirsiniz denemek ve çünkü eğer 98 00:04:28,800 --> 00:04:31,360 Gittiğin null işaretçi bir segment hataya acı 99 00:04:31,360 --> 00:04:34,380 ve program Zaten çökmesine gidiyor. 100 00:04:34,380 --> 00:04:37,190 Peki nasıl statik biz bunu bir tamsayı elde? 101 00:04:37,190 --> 00:04:37,730 >> int x. 102 00:04:37,730 --> 00:04:40,010 Biz muhtemelen yaptık kez bir demet, değil mi? 103 00:04:40,010 --> 00:04:43,480 Bu adında bir değişken oluşturur yığının üzerinde yaşayan, x. 104 00:04:43,480 --> 00:04:46,190 Nasıl dinamik bir tamsayı alabilirim? 105 00:04:46,190 --> 00:04:50,010 Int Yıldız px malloc 4 eşittir. 106 00:04:50,010 --> 00:04:53,050 >> Ya da daha uygun Biz int yıldız px söyleyebilirim 107 00:04:53,050 --> 00:04:57,680 , int malloc boyutunu eşittir sadece bazı az atmak 108 00:04:57,680 --> 00:04:59,740 Bizim programı etrafında sihirli sayılar. 109 00:04:59,740 --> 00:05:04,140 Bu bizim için elde gidiyor yığından bellek dört bayt, 110 00:05:04,140 --> 00:05:06,720 ve işaretçi elde ederiz ona geri px denir. 111 00:05:06,720 --> 00:05:08,430 Ve sonra biz ettik gibi Daha önce yapılan 112 00:05:08,430 --> 00:05:13,966 can px inceleyebilirsiniz için Bu belleğe erişim. 113 00:05:13,966 --> 00:05:15,590 Nasıl kullanıcıdan bir tamsayı alabilirim? 114 00:05:15,590 --> 00:05:17,970 Biz int x int olsun eşittir söyleyebiliriz. 115 00:05:17,970 --> 00:05:19,930 Bu oldukça basittir. 116 00:05:19,930 --> 00:05:24,030 Biz bir dizi oluşturmak istiyorsanız ne yığınının üzerinde yaşadığımız yüzen x 117 00:05:24,030 --> 00:05:28,210 Bu isim stack_array-- yüzer Bizim array-- Köşeli parantezler x. 118 00:05:28,210 --> 00:05:32,419 Bu bizim bir dizi için yaratacak yığınının üzerinde yaşadığımız ilmiklere x. 119 00:05:32,419 --> 00:05:34,960 Biz yüzen bir dizi oluşturabilirsiniz bu da, öbek üzerinde yaşıyor. 120 00:05:34,960 --> 00:05:37,330 Sözdizimi bir görünebilir daha hantal küçük 121 00:05:37,330 --> 00:05:41,740 ama biz şamandıra diyebiliriz Yıldız heap_array eşittir 122 00:05:41,740 --> 00:05:44,360 malloc x kez şamandıra boyutu. 123 00:05:44,360 --> 00:05:48,160 Ben saklamak için yeterli oda gerekir x kayan nokta değeri. 124 00:05:48,160 --> 00:05:51,560 Yani 100 ihtiyacım demek şamandıralar veya 1000 yüzer. 125 00:05:51,560 --> 00:05:54,810 Yani bu durumda olurdu 100 yüzen için 400 bayt, 126 00:05:54,810 --> 00:05:59,080 veya 1000 yüzen için 4000 bayt, Her şamandıra kadar sürer, çünkü 127 00:05:59,080 --> 00:06:01,230 uzayın dört bayt. 128 00:06:01,230 --> 00:06:05,110 >> Bunu yaptıktan sonra kullanabilir miyim heap_array üzerinde köşeli ayraç sözdizimi. 129 00:06:05,110 --> 00:06:08,970 Sadece ben stack_array yaptığınız gibi, ben bireysel öğelerini erişebilirsiniz 130 00:06:08,970 --> 00:06:11,590 kullanılarak heap_array sıfır, heap_array on. 131 00:06:11,590 --> 00:06:15,800 Ama biz bunu yapabilirsiniz nedenini hatırlamak çünkü C bir dizinin adı 132 00:06:15,800 --> 00:06:19,990 Gerçekten bir göstericidir Bu dizinin ilk elemanı. 133 00:06:19,990 --> 00:06:23,480 Biz ilan ediyoruz gerçeği Yani Burada yığında yüzen dizi 134 00:06:23,480 --> 00:06:24,810 aslında biraz yanıltıcıdır. 135 00:06:24,810 --> 00:06:27,600 Biz gerçekten vardır Orada kod ikinci satırı 136 00:06:27,600 --> 00:06:32,360 Ayrıca bir yığın bir gösterici oluştururken biz o bazı işler yapmak bellek. 137 00:06:32,360 --> 00:06:35,620 >> Burada büyük bir sorun ile var dinamik olsa bellek ayrılmış, 138 00:06:35,620 --> 00:06:38,360 Gerçekten neden ve bu Bazı iyi alışkanlıklar geliştirmek için önemli 139 00:06:38,360 --> 00:06:39,800 ne zaman onunla çalışıyoruz. 140 00:06:39,800 --> 00:06:43,060 Statik ilan aksine Hafıza, Hafıza 141 00:06:43,060 --> 00:06:46,790 otomatik olarak iade edilmezse senin işlevi yapılır sistem. 142 00:06:46,790 --> 00:06:49,280 Ana var ve eğer öyleyse Ana bir işlevi çağıran 143 00:06:49,280 --> 00:06:53,860 f bitirir f o yapıyor olursa olsun ve programın kontrolünü döndürür 144 00:06:53,860 --> 00:06:58,810 sırt, ana bütün bellek kullanılan f geri verilir. 145 00:06:58,810 --> 00:07:01,250 Tekrar kullanılabilir başka bir program tarafından, 146 00:07:01,250 --> 00:07:04,250 ya da başka bir işlev olduğunu ana daha sonra çağrılır. 147 00:07:04,250 --> 00:07:06,970 Yine o aynı bellek üzerinden kullanabilirsiniz. 148 00:07:06,970 --> 00:07:09,620 >> Eğer dinamik gerçi bellek ayrılamadı 149 00:07:09,620 --> 00:07:14,380 açıkça söylemek zorundayım Onunla bitirdiniz sistemi. 150 00:07:14,380 --> 00:07:18,370 Hangi olabilir, sizin için bunun üzerine tutacağım Eğer dışarı çalışan bir soruna yol 151 00:07:18,370 --> 00:07:19,290 bellek. 152 00:07:19,290 --> 00:07:22,179 Ve aslında biz bazen atıfta Bir bellek sızıntısı olarak bu. 153 00:07:22,179 --> 00:07:24,970 Ve bazen bu bellek sızıntısı aslında gerçekten yıkıcı olabilir 154 00:07:24,970 --> 00:07:27,020 sistem performansı için. 155 00:07:27,020 --> 00:07:31,120 >> Eğer sık ​​bir internet kullanıcısıysanız Eğer belirli web tarayıcıları kullanabilirsiniz 156 00:07:31,120 --> 00:07:35,630 ve ben burada isim isim, ama olmaz Bazı web tarayıcıları orada vardır 157 00:07:35,630 --> 00:07:39,150 Aslında olması için azılı olduğunu Sabit alamadım bellek sızıntıları. 158 00:07:39,150 --> 00:07:44,570 Ve tarayıcınızın açık bırakırsanız zaman çok uzun bir süre boyunca, günde 159 00:07:44,570 --> 00:07:48,060 ve gün veya hafta, bazen Sisteminizde fark edebilirsiniz 160 00:07:48,060 --> 00:07:49,790 Gerçekten yavaş, gerçekten çalışıyor. 161 00:07:49,790 --> 00:07:54,640 Ve bunun sebebi olduğunu tarayıcı, bellek tahsis etmiştir 162 00:07:54,640 --> 00:07:57,320 ama sonra sistemi söylemedi o onunla bitti. 163 00:07:57,320 --> 00:08:01,000 Ve böylece daha az bellek bırakır Diğer tüm programlar için geçerli 164 00:08:01,000 --> 00:08:04,480 sen, çünkü paylaşmak zorunda Bu web tarayıcısı leaking-- 165 00:08:04,480 --> 00:08:06,755 Program belleği sızdırıyor. 166 00:08:06,755 --> 00:08:08,880 Biz geri bellek vermek nasıl biz onunla bitince? 167 00:08:08,880 --> 00:08:10,838 Peki neyse o var Bunu yapmak çok kolay bir yol. 168 00:08:10,838 --> 00:08:11,710 Biz sadece özgür. 169 00:08:11,710 --> 00:08:15,020 Ücretsiz adında bir işlev var, o, belleğe bir işaretçi kabul 170 00:08:15,020 --> 00:08:16,010 ve biz gitmek için iyi bir konum. 171 00:08:16,010 --> 00:08:18,310 >> Yani biz konum diyelim Programımızın orta 172 00:08:18,310 --> 00:08:21,970 Biz 50 karakter malloc istiyorum. 173 00:08:21,970 --> 00:08:25,710 Biz can bir dizi malloc istiyorum 50 karakter tutabilen. 174 00:08:25,710 --> 00:08:29,109 Ve biz geri bir işaretçi olsun Bu, o işaretçinin adı kelimedir. 175 00:08:29,109 --> 00:08:30,900 Biz konum ne yapmak kelime ile yapacaksın, 176 00:08:30,900 --> 00:08:33,440 ve sonra olduğunuzda biz sadece özgür yapılır. 177 00:08:33,440 --> 00:08:37,460 Ve şimdi biz bu 50 döndü sisteme geri bellek bayt. 178 00:08:37,460 --> 00:08:40,147 Diğer bazı işlev kullanabilirsiniz. 179 00:08:40,147 --> 00:08:43,480 Biz bir acı endişelenmenize gerek yok bellek sızıntısı kelimesini serbest çünkü. 180 00:08:43,480 --> 00:08:46,639 Biz geri hafıza verdik, bu yüzden onunla çalışmaya bittiğinde. 181 00:08:46,639 --> 00:08:48,430 Yani üç vardır O gereken altın kurallar 182 00:08:48,430 --> 00:08:51,700 sen ne zaman akılda tutulmalıdır dinamik bellek ayırma 183 00:08:51,700 --> 00:08:52,990 malloc ile. 184 00:08:52,990 --> 00:08:56,480 Bellek Her blok olduğunu Eğer Malloc serbest olmalıdır 185 00:08:56,480 --> 00:08:58,430 Programınızın önce çalýþmayý. 186 00:08:58,430 --> 00:09:02,029 Şimdi yine, cihazda veya IDE bu tür zaten sizin için olur 187 00:09:02,029 --> 00:09:04,820 Ve sizlere bu zaten olacak Programınız sona erdiğinde, 188 00:09:04,820 --> 00:09:06,880 Tüm bellek çıkacak. 189 00:09:06,880 --> 00:09:10,750 Ama genel olarak iyi bir kodlama var uygulama her zaman için, işiniz bittiğinde, 190 00:09:10,750 --> 00:09:13,810 Eğer mallocd ne özgür. 191 00:09:13,810 --> 00:09:16,690 >> O dedi, sadece şeyler o Eğer mallocd serbest bırakılmalıdır ettik. 192 00:09:16,690 --> 00:09:19,880 Eğer statik bildirirseniz bir tamsayı, int x noktalı virgül, 193 00:09:19,880 --> 00:09:23,500 O rafta yaşıyor, sen Daha sonra x serbest istemiyorum. 194 00:09:23,500 --> 00:09:25,970 Eğer ettik Yani tek şey mallocd serbest bırakılmalıdır. 195 00:09:25,970 --> 00:09:28,960 >> Ve son olarak, iki kez ücretsiz değil bir şey yapmak. 196 00:09:28,960 --> 00:09:31,170 Bu yol açabilir Başka bir garip bir durum. 197 00:09:31,170 --> 00:09:33,530 Eğer ettik Yani her şey mallocd serbest olması gerekir. 198 00:09:33,530 --> 00:09:36,000 Eğer ettik tek şey Malloc serbest bırakılmalıdır. 199 00:09:36,000 --> 00:09:38,730 Ve iki kez değil özgür bir şeyler yapmak. 200 00:09:38,730 --> 00:09:43,660 >> Yani burada bir örnek üzerinden gidelim Bazı dinamik olarak ayrılan ne 201 00:09:43,660 --> 00:09:46,122 Bellek karışık gibi görünebilir bazı statik bellek ile de. 202 00:09:46,122 --> 00:09:47,080 Burada ne olabilir? 203 00:09:47,080 --> 00:09:48,913 Takip edebilirsiniz varsa görün boyunca ve ne tahmin 204 00:09:48,913 --> 00:09:51,720 Biz giderken ne olacak kod tüm bu hatları ile. 205 00:09:51,720 --> 00:09:53,980 >> Yani biz int m söylüyorlar. 206 00:09:53,980 --> 00:09:54,840 Burada neler oluyor? 207 00:09:54,840 --> 00:09:56,339 Peki bu oldukça basittir. 208 00:09:56,339 --> 00:09:59,650 Ben m adında bir tamsayı değişken oluşturmak. 209 00:09:59,650 --> 00:10:01,400 Ben, yeşil renk bu renk çünkü 210 00:10:01,400 --> 00:10:03,730 Ben konuşurken ben kullandıkları yaklaşık tamsayı değişkenleri. 211 00:10:03,730 --> 00:10:05,160 Bu bir kutu. 212 00:10:05,160 --> 00:10:08,400 Bu yapabilirsiniz m denir, ve var bunun içinde mağaza tamsayı. 213 00:10:08,400 --> 00:10:12,400 >> Sonra bir int yıldızı ne derseniz? 214 00:10:12,400 --> 00:10:13,530 Peki bu oldukça benzer. 215 00:10:13,530 --> 00:10:15,780 Ben bir kutu olarak adlandırılan oluşturma. 216 00:10:15,780 --> 00:10:19,100 Bu tutma int yetenekli Yıldız tamsayılar işaretçileri. 217 00:10:19,100 --> 00:10:21,570 Yani ben de o yeşil-ish boyama ediyorum. 218 00:10:21,570 --> 00:10:24,140 >> Ben bir şey olduğunu biliyorum bir tamsayı ile yapmak, 219 00:10:24,140 --> 00:10:25,852 ama bu bir tamsayı değil kendisi değil. 220 00:10:25,852 --> 00:10:27,310 Ama hemen hemen aynı fikir. 221 00:10:27,310 --> 00:10:28,101 Ben bir kutu yarattım. 222 00:10:28,101 --> 00:10:30,070 Bu hakkın ikisi Şimdi yığını yaşıyor. 223 00:10:30,070 --> 00:10:32,520 Ben ikisini de isimlerini verdim. 224 00:10:32,520 --> 00:10:36,750 >> int yıldız b int malloc boyutunu eşittir. 225 00:10:36,750 --> 00:10:38,560 Bu bir biraz zor olabilir. 226 00:10:38,560 --> 00:10:44,110 İkinci alın ve size neyi düşünmek Bu diyagram üzerinde gerçekleşmesi beklenir. 227 00:10:44,110 --> 00:10:50,210 int yıldız b int malloc boyutunu eşittir. 228 00:10:50,210 --> 00:10:51,940 >> Peki bu sadece bir kutu yaratmaz. 229 00:10:51,940 --> 00:10:53,800 Bu aslında iki kutu oluşturur. 230 00:10:53,800 --> 00:10:58,670 Ve o da kurar, bağları Bir ilişkide bir nokta. 231 00:10:58,670 --> 00:11:02,240 Biz bir blok tahsis ettik öbek üzerinde bellek. 232 00:11:02,240 --> 00:11:05,940 Dikkat Sağ üst kutusu Bir isim var yok. 233 00:11:05,940 --> 00:11:06,760 >> Biz bunu mallocd. 234 00:11:06,760 --> 00:11:08,050 Bu öbek üzerinde bulunmaktadır. 235 00:11:08,050 --> 00:11:10,090 Ama b adı vardır. 236 00:11:10,090 --> 00:11:11,950 Bu b adında bir gösterici değişkeni var. 237 00:11:11,950 --> 00:11:13,910 Bu yığının yaşıyor. 238 00:11:13,910 --> 00:11:18,250 >> Yani belleğin bir parça başka birine işaret ediyor. 239 00:11:18,250 --> 00:11:21,840 b adresini içeren belleğin o bloğun. 240 00:11:21,840 --> 00:11:23,757 Aksi takdirde bir adı yok. 241 00:11:23,757 --> 00:11:24,590 Ama buna işaret ediyor. 242 00:11:24,590 --> 00:11:29,760 Yani biz int yıldız b eşittir derken int malloc boyutu, orada o, 243 00:11:29,760 --> 00:11:33,490 üzerine attı o ok Orada sağ tarafında, yani her şey, 244 00:11:33,490 --> 00:11:36,740 Ben görünmesi gerekecek Yine, ne olur. 245 00:11:36,740 --> 00:11:39,341 Tüm bu olur bu kod tek satır. 246 00:11:39,341 --> 00:11:41,340 Şimdi biraz daha alırsınız Yine basit. 247 00:11:41,340 --> 00:11:43,330 Bir işareti m eşittir. 248 00:11:43,330 --> 00:11:46,280 Ne bir hatırlıyor musun işareti m eşittir? 249 00:11:46,280 --> 00:11:48,920 Peki bu m adresini alır var. 250 00:11:48,920 --> 00:11:54,150 Ya da, daha şematik koymak m bir puan. 251 00:11:54,150 --> 00:11:56,360 >> Bir b eşittir. 252 00:11:56,360 --> 00:11:57,560 Tamam işte başka biri. 253 00:11:57,560 --> 00:11:59,230 Bir b eşittir. 254 00:11:59,230 --> 00:12:02,260 Ne olacak şemasına bu kez? 255 00:12:02,260 --> 00:12:04,330 >> Peki hatırlamak Atama operatörü işleri 256 00:12:04,330 --> 00:12:08,960 değerini atayarak Sağ soldaki değere. 257 00:12:08,960 --> 00:12:14,820 M Peki yerine bir işaret Mektup b noktaları aynı yere işaret ediyor. 258 00:12:14,820 --> 00:12:18,900 a, b bir işaret etmiyor b noktaları işaret ediyor. 259 00:12:18,900 --> 00:12:25,280 >> Sivri olduğunu b ise olur Bir işareti b eşittir olmuştur. 260 00:12:25,280 --> 00:12:28,150 Ama onun yerine adil b eşittir yani b şimdi 261 00:12:28,150 --> 00:12:31,770 , aynı adrese çünkü işaret b içinde sadece bir adres. 262 00:12:31,770 --> 00:12:35,004 Ve şimdi içinde aynı adresidir. 263 00:12:35,004 --> 00:12:37,170 m, muhtemelen, 10 eşittir En basit şey 264 00:12:37,170 --> 00:12:38,690 biz biraz yaptık. 265 00:12:38,690 --> 00:12:40,460 Kutuya 10 koyun. 266 00:12:40,460 --> 00:12:45,640 Yıldız b m eşittir artı 2, gelen çağırmak Bizim göstericiler, video hangi yıldız b anlamına gelir. 267 00:12:45,640 --> 00:12:50,230 Biz inceleyebilirsiniz b ve koymak için gidiyoruz Bu hafıza konumuna bazı değer. 268 00:12:50,230 --> 00:12:51,860 Bu durumda, 12,. 269 00:12:51,860 --> 00:12:55,300 >> Peki biz ne zaman bir noktaya inceleyebilirsiniz Biz sadece aşağı ok seyahat anımsıyorum. 270 00:12:55,300 --> 00:12:58,205 Ya da başka bir deyişle, biz Bu bellek adresine gidin 271 00:12:58,205 --> 00:12:59,580 ve biz bir şekilde manipüle. 272 00:12:59,580 --> 00:13:00,830 Biz orada bazı değer koymak. 273 00:13:00,830 --> 00:13:03,960 Bu durumda yıldız b m eşittir artı 2 adildir 274 00:13:03,960 --> 00:13:08,230 değişkene gidin, b işaret belleğe gidin b işaret 275 00:13:08,230 --> 00:13:11,750 ve 12, orada m artı 2 koyun. 276 00:13:11,750 --> 00:13:14,970 >> Şimdi ben b boşaltın. 277 00:13:14,970 --> 00:13:16,490 Ben b serbest zaman ne olur? 278 00:13:16,490 --> 00:13:18,800 Ben özgür anlamına gelir ne dediğini hatırla. 279 00:13:18,800 --> 00:13:21,920 Ben b serbest zaman ne diyorum? 280 00:13:21,920 --> 00:13:23,410 >> Ben onunla çalışmaya bıktım, değil mi? 281 00:13:23,410 --> 00:13:25,702 Ben temelde bellek vazgeçtim. 282 00:13:25,702 --> 00:13:26,910 Ben sisteme geri verir. 283 00:13:26,910 --> 00:13:33,010 Ben artık bu olduğunu gerekmez ne, tamam bunları söylüyorum? 284 00:13:33,010 --> 00:13:37,390 >> Şimdi diyorum eğer yıldızı 11 muhtemelen yapabilirsiniz eşittir 285 00:13:37,390 --> 00:13:40,460 Zaten kötü bir şey söylemek Tamam, işte ne olacak? 286 00:13:40,460 --> 00:13:44,160 Ve ben ben muhtemelen denedim gerçekten eğer bir segment hataya maruz kalacaktır. 287 00:13:44,160 --> 00:13:47,140 Çünkü artık, her ne kadar bellek daha önce bu öbek 288 00:13:47,140 --> 00:13:50,220 Ben vardı şey Bu noktada erişim, 289 00:13:50,220 --> 00:13:54,590 Şimdi belleğe erişim ediyorum Bana ulaşmak için yasal değildir. 290 00:13:54,590 --> 00:13:57,330 >> Ve biz muhtemelen olacaktır Biz belleğe erişirken, hatırlamak 291 00:13:57,330 --> 00:14:00,000 Biz dokunmak zorunda değilsin ki Bu en yaygın nedeni var 292 00:14:00,000 --> 00:14:01,860 Bir segmentasyon arıza. Ve bu yüzden benim programı 293 00:14:01,860 --> 00:14:05,170 Bunu yapmak için çalıştı kilitlenmesine. 294 00:14:05,170 --> 00:14:09,910 Yani yine iyi almak için iyi bir fikirdir uygulama ve iyi alışkanlıklar kökleşmiş 295 00:14:09,910 --> 00:14:12,920 malloc ve ücretsiz çalışırken, böylece segmentasyon olmaz bu 296 00:14:12,920 --> 00:14:15,310 Kullandığınız ve bu arızalar senin dinamik olarak ayrılan 297 00:14:15,310 --> 00:14:17,370 Hafıza sorumlu. 298 00:14:17,370 --> 00:14:20,300 >> Ben Doug Lloyd değilim bu CS50 olduğunu. 299 00:14:20,300 --> 00:14:21,947