1 00:00:00,000 --> 00:00:00,499 2 00:00:00,499 --> 00:00:01,395 [موسیقی] 3 00:00:01,395 --> 00:00:05,590 4 00:00:05,590 --> 00:00:07,940 >> داگ لوید: OK بنابراین یک پیشنهاد قبل از شروع در اینجا. 5 00:00:07,940 --> 00:00:11,660 اگر شما این ویدئو را تماشا نیست در علائم شما ممکن است بخواهید برای انجام این کار است. 6 00:00:11,660 --> 00:00:15,860 از آنجا که این فیلم یکی دیگر از روش کار با اشاره گر. 7 00:00:15,860 --> 00:00:17,574 >> بنابراین آن را به صحبت در مورد برخی از مفاهیم 8 00:00:17,574 --> 00:00:19,490 که ما در پوشش علائم ویدئو، و ما 9 00:00:19,490 --> 00:00:21,948 رفتن به پوشاندن آنها در حال حاضر، فرض کنید که آنها در حال حاضر 10 00:00:21,948 --> 00:00:23,090 مرتب کردن بر اساس درک شده است. 11 00:00:23,090 --> 00:00:25,440 به طوری که فقط هشدار خود را که اگر شما در حال دیدن این فیلم 12 00:00:25,440 --> 00:00:27,814 و شما را دیده اند، نه فیلم اشاره گر، ممکن است نوعی از 13 00:00:27,814 --> 00:00:29,610 پرواز بیش از سر خود را کمی. 14 00:00:29,610 --> 00:00:32,080 و پس از آن ممکن است بهتر باشد به تماشای آن در آن منظور. 15 00:00:32,080 --> 00:00:34,710 >> بنابراین ما در حال حاضر دیده یک راه به کار با اشاره گرها، 16 00:00:34,710 --> 00:00:37,810 که است که ما اعلام متغیر، و سپس ما 17 00:00:37,810 --> 00:00:42,160 اعلام متغیر دیگر، یک اشاره گر متغیر، که اشاره به آن است. 18 00:00:42,160 --> 00:00:44,870 بنابراین ما ایجاد کرده اید متغیر را با یک نام، ما 19 00:00:44,870 --> 00:00:48,480 یک متغیر دوم را با یک نام، و و ما اشاره است که متغیر دوم 20 00:00:48,480 --> 00:00:50,220 در که برای اولین بار. 21 00:00:50,220 --> 00:00:52,370 این نوع از یک مشکل هر چند، به دلیل آن 22 00:00:52,370 --> 00:00:54,650 ما را ملزم به دقیقا می دانند که چه مقدار حافظه ما 23 00:00:54,650 --> 00:00:57,600 نیاز به رفتن به لحظه برنامه های ما وارد شده است. 24 00:00:57,600 --> 00:00:58,220 >> چرا چنین است؟ 25 00:00:58,220 --> 00:01:03,338 از آنجا که ما باید قادر به نام یا شناسایی تمام متغیرهای ممکن 26 00:01:03,338 --> 00:01:04,129 ما ممکن است روبرو می شوند. 27 00:01:04,129 --> 00:01:07,910 ما ممکن است یک آرایه است که ممکن است داشته قادر به نگه داشتن بسیاری از اطلاعات، 28 00:01:07,910 --> 00:01:10,110 اما هنوز هم نمی دقیقا به اندازه کافی دقیق. 29 00:01:10,110 --> 00:01:12,640 اگر ما نمی دانیم، چه می شود اگر ما هیچ ایده 30 00:01:12,640 --> 00:01:14,370 چقدر ما به در زمان کامپایل نیاز دارید؟ 31 00:01:14,370 --> 00:01:17,020 و یا اگر برنامه های ما خواهد اجرا برای یک مدت واقعا طولانی، 32 00:01:17,020 --> 00:01:19,810 پذیرش کاربران مختلف داده ها، و ما نمی توانیم واقعا 33 00:01:19,810 --> 00:01:23,170 آیا ما در حال برآورد نیاز به رفتن به 1،000 واحد؟ 34 00:01:23,170 --> 00:01:26,060 >> آن را دوست ندارم ما می توانیم می گویند در خط فرمان 35 00:01:26,060 --> 00:01:28,040 چگونه بسیاری از موارد وارد کنید شما فکر می کنم شما نیاز دارید. 36 00:01:28,040 --> 00:01:31,100 خب چه می شود اگر که حدس اشتباه است؟ 37 00:01:31,100 --> 00:01:34,300 تخصیص حافظه پویا مرتب سازی بر ما اجازه می دهد تا راه 38 00:01:34,300 --> 00:01:36,867 برای حل این مشکل خاص است. 39 00:01:36,867 --> 00:01:38,700 و راه آن را به با استفاده از اشاره گر. 40 00:01:38,700 --> 00:01:42,140 >> ما می توانید اشاره گر به استفاده از دسترسی به صورت پویا 41 00:01:42,140 --> 00:01:45,710 حافظه اختصاص داده شده، حافظه است که اختصاص داده به عنوان برنامه خود را در حال اجرا است. 42 00:01:45,710 --> 00:01:48,290 آن را در زمان کامپایل اختصاص داده است. 43 00:01:48,290 --> 00:01:51,570 هنگامی که شما به صورت پویا تخصیص حافظه آن را از یک استخر می آید 44 00:01:51,570 --> 00:01:53,795 از حافظه به عنوان پشته شناخته شده است. 45 00:01:53,795 --> 00:01:56,420 پیش از تمام حافظه ام کار با در این دوره 46 00:01:56,420 --> 00:01:59,920 شده است که از یک استخر حافظه به عنوان پشته شناخته شده است. 47 00:01:59,920 --> 00:02:02,470 یک راه خوب برای به طور کلی در حکومت mind-- و این را 48 00:02:02,470 --> 00:02:04,720 همیشه نمی صادق است، اما بسیار تقریبا 49 00:02:04,720 --> 00:02:09,940 همیشه نگه می دارد این است که هر true-- زمان نام متغیر آن را به شما می دهد 50 00:02:09,940 --> 00:02:12,090 احتمالا در پشته زندگی می کند. 51 00:02:12,090 --> 00:02:14,650 و هر زمان به شما نمی کنند به یک متغیر یک نام، 52 00:02:14,650 --> 00:02:19,160 که شما می توانید با حافظه پویا تخصیص، آن را در پشته زندگی می کند. 53 00:02:19,160 --> 00:02:22,190 >> در حال حاضر من از ارائه این عنوان اگر این دو استخر از حافظه وجود دارد. 54 00:02:22,190 --> 00:02:24,740 اما ممکن است شما دیده می شود این نمودار، که به طور کلی 55 00:02:24,740 --> 00:02:27,290 یک نماینده از چه حافظه نظر می رسد، 56 00:02:27,290 --> 00:02:30,373 و ما قصد داریم در مورد مراقبت از همه مسائل در بالا و پایین. 57 00:02:30,373 --> 00:02:33,580 آنچه ما در مورد مراقبت از این بخش در است وسط در اینجا، پشته و پشته. 58 00:02:33,580 --> 00:02:35,570 همانطور که می بینید توسط به دنبال در این نمودار، 59 00:02:35,570 --> 00:02:38,390 این در واقع دو نیست استخرهای مجزا از حافظه است. 60 00:02:38,390 --> 00:02:42,757 این یکی مشترک از حافظه است که در آن شما شروع، در این تصویری 61 00:02:42,757 --> 00:02:44,590 شما در پایین شروع و شروع به پر کردن 62 00:02:44,590 --> 00:02:48,040 از پایین با پشته، و شما شروع در بالا و شروع به پر کردن تا 63 00:02:48,040 --> 00:02:50,072 از بالا به پایین با پشته. 64 00:02:50,072 --> 00:02:51,780 اما واقعا است همان استخر، آن را فقط 65 00:02:51,780 --> 00:02:56,050 نقاط مختلف، مکان های مختلف در حافظه که در حال اختصاص داده است. 66 00:02:56,050 --> 00:02:59,060 و شما می توانید از اجرا حافظه با هم داشتن 67 00:02:59,060 --> 00:03:01,240 پشته به تمام راه به پایین، و یا 68 00:03:01,240 --> 00:03:05,440 پشته به تمام راه را به بالا، و یا داشتن heap و stack 69 00:03:05,440 --> 00:03:06,740 ملاقات در برابر یکدیگر. 70 00:03:06,740 --> 00:03:09,500 همه کسانی که می تواند شرایط که باعث برنامه های خود را 71 00:03:09,500 --> 00:03:11,030 برای اجرا از حافظه است. 72 00:03:11,030 --> 00:03:11,952 طوری نگه دارید که در ذهن است. 73 00:03:11,952 --> 00:03:13,660 هنگامی که ما در مورد صحبت پشته و پشته 74 00:03:13,660 --> 00:03:17,880 ما واقعا در مورد صحبت کردن به طور کلی همان تکه از حافظه، فقط 75 00:03:17,880 --> 00:03:21,930 قسمت های مختلف که حافظه است. 76 00:03:21,930 --> 00:03:24,910 >> پس چگونه ما به صورت پویا گرفتن حافظه اختصاص داده شده در وهله اول؟ 77 00:03:24,910 --> 00:03:27,740 چگونه برنامه ما را دریافت کنید حافظه به عنوان آن در حال اجرا؟ 78 00:03:27,740 --> 00:03:32,660 خب C یک تابع به نام فراهم می کند از malloc، تخصیص حافظه، که 79 00:03:32,660 --> 00:03:36,810 شما یک تماس را به، و به شما منتقل در چگونه بسیاری از بایت از حافظه است که شما می خواهید. 80 00:03:36,810 --> 00:03:39,940 بنابراین اگر اجرای برنامه و شما می خواهید یک زمان اجرا عدد صحیح، 81 00:03:39,940 --> 00:03:46,040 شما ممکن است چهار بایت از mallock حافظه، از malloc پرانتز چهار. 82 00:03:46,040 --> 00:03:48,540 >> mallock را از طریق رفتن به دنبال از طریق پشته، 83 00:03:48,540 --> 00:03:50,750 چرا که ما به صورت پویا هستید تخصیص حافظه، 84 00:03:50,750 --> 00:03:53,500 و آن را به شما بازگشت اشاره گر به آن حافظه است. 85 00:03:53,500 --> 00:03:56,180 آن را به شما نمی دهد که حافظه آن آن یک نام را نمی دهد، 86 00:03:56,180 --> 00:03:57,950 آن را به شما می دهد یک اشاره گر به آن است. 87 00:03:57,950 --> 00:04:00,780 و به همین دلیل دوباره به من گفت که این مهم به شاید 88 00:04:00,780 --> 00:04:03,770 این ویدئو را تماشا کرده اند اشاره گر قبل از ما بیش از حد دریافت به این. 89 00:04:03,770 --> 00:04:05,940 بنابراین malloc را به شما یک اشاره گر است. 90 00:04:05,940 --> 00:04:08,950 >> اگر mallock می تواند به شما هر را حافظه به دلیل از شما اجرا از این، 91 00:04:08,950 --> 00:04:10,645 آن را به شما یک اشاره گر تهی است. 92 00:04:10,645 --> 00:04:15,282 آیا شما به یاد داشته باشید چه اتفاقی می افتد اگر ما امتحان کنید و ارجاع به یک اشاره گر خالی؟ 93 00:04:15,282 --> 00:04:17,019 ما رنج می برند گسل SEG، درست است؟ 94 00:04:17,019 --> 00:04:18,060 که احتمالا خوب نیست. 95 00:04:18,060 --> 00:04:21,579 >> بنابراین هر بار که شما یک تماس به شما malloc همیشه، همیشه 96 00:04:21,579 --> 00:04:25,270 نیاز به بررسی اینکه آیا یا نه اشاره گر آن به شما تماس تهی است. 97 00:04:25,270 --> 00:04:28,800 اگر از آن است، شما نیاز به پایان دادن به برنامه خود را چرا که اگر شما سعی می کنید و ارجاع 98 00:04:28,800 --> 00:04:31,360 اشاره گر تهی شما در حال رفتن به رنج می برند گسل تقسیم بندی 99 00:04:31,360 --> 00:04:34,380 و برنامه های خود را است رفتن به سقوط به هر حال. 100 00:04:34,380 --> 00:04:37,190 بنابراین ما چگونه استاتیک به دست آوردن یک عدد صحیح؟ 101 00:04:37,190 --> 00:04:37,730 >> نوع int x. 102 00:04:37,730 --> 00:04:40,010 ما احتمالا انجام داده ام که یک دسته از بار، درست است؟ 103 00:04:40,010 --> 00:04:43,480 این یک متغیر به نام ایجاد X که بر روی پشته زندگی می کند. 104 00:04:43,480 --> 00:04:46,190 چگونه ما به صورت پویا یک عدد صحیح به دست آوردن؟ 105 00:04:46,190 --> 00:04:50,010 INT پیکسل ستاره برابر از malloc 4. 106 00:04:50,010 --> 00:04:53,050 >> یا بیشتر مناسب ما می خواهم بگویم پیکسل ستاره بین المللی 107 00:04:53,050 --> 00:04:57,680 برابر اندازه از malloc از نوع int، فقط به پرتاب برخی از کمتر 108 00:04:57,680 --> 00:04:59,740 اعداد سحر و جادو در سراسر برنامه های ما. 109 00:04:59,740 --> 00:05:04,140 این است که برای به دست آوردن برای ما چهار بایت از حافظه پشته، 110 00:05:04,140 --> 00:05:06,720 و اشاره گر ما برگشت به آن را به نام پیکسل. 111 00:05:06,720 --> 00:05:08,430 و پس از آن فقط به عنوان ایم ما قبلا انجام داده 112 00:05:08,430 --> 00:05:13,966 می توانید ارجاع پیکسل به که حافظه دسترسی داشته باشید. 113 00:05:13,966 --> 00:05:15,590 چگونه یک عدد صحیح را از کاربر دریافت کنم؟ 114 00:05:15,590 --> 00:05:17,970 می توان گفت از نوع int x برابر گرفتن نوع int است. 115 00:05:17,970 --> 00:05:19,930 این خیلی سر راست است. 116 00:05:19,930 --> 00:05:24,030 اگر که می خواهید برای ایجاد یک آرایه از شناور که بر روی پشته زندگی می کنند X؟ 117 00:05:24,030 --> 00:05:28,210 شناور stack_array-- که نام این از آرایه ما براکت x است. 118 00:05:28,210 --> 00:05:32,419 که برای ما یک آرایه ایجاد خواهد شد از شناور که بر روی پشته زندگی می کنند X. 119 00:05:32,419 --> 00:05:34,960 ما می توانیم یک آرایه از شناور ایجاد که زندگی می کند در پشته، TOO. 120 00:05:34,960 --> 00:05:37,330 نحو ممکن است یک نگاه کمی دست و پا گیر، 121 00:05:37,330 --> 00:05:41,740 اما ما می توانیم شناور می گویند heap_array ستاره برابر 122 00:05:41,740 --> 00:05:44,360 بار از malloc X اندازه شناور. 123 00:05:44,360 --> 00:05:48,160 من نیاز به اتاق به اندازه کافی برای نگه داشتن X شناور ارزش نقطه. 124 00:05:48,160 --> 00:05:51,560 بنابراین می گویند من نیاز به 100 شناور، شناور خطوط و یا 1،000. 125 00:05:51,560 --> 00:05:54,810 بنابراین در این مورد از آن خواهد بود 400 بایت برای 100 شناور، 126 00:05:54,810 --> 00:05:59,080 و یا 4،000 بایت برای 1،000 شناور، زیرا هر یک از شناور طول می کشد تا 127 00:05:59,080 --> 00:06:01,230 چهار بایت از فضا. 128 00:06:01,230 --> 00:06:05,110 >> پس از انجام این من می توانم استفاده استفاده از دستور براکت در heap_array. 129 00:06:05,110 --> 00:06:08,970 همانطور که من را بر روی stack_array، من می توانید آن را به صورت جداگانه دسترسی به عناصر 130 00:06:08,970 --> 00:06:11,590 با استفاده از heap_array صفر، یک heap_array. 131 00:06:11,590 --> 00:06:15,800 اما به یاد دلیل ما می توانیم که این دلیل است که نام یک آرایه در C 132 00:06:15,800 --> 00:06:19,990 واقعا یک اشاره گر به اولین عنصر آرایه است. 133 00:06:19,990 --> 00:06:23,480 بنابراین این واقعیت است که ما در حال اعلام یک مجموعه ای از شناور بر روی پشته در اینجا 134 00:06:23,480 --> 00:06:24,810 است که در واقع کمی گمراه کننده. 135 00:06:24,810 --> 00:06:27,600 ما واقعا در می خط دوم کد وجود دارد 136 00:06:27,600 --> 00:06:32,360 همچنین ایجاد یک اشاره گر به یک تکه از حافظه است که ما پس از آن برخی از کار با انجام. 137 00:06:32,360 --> 00:06:35,620 >> در اینجا مشکل بزرگ با این پویا اختصاص داده حافظه هر چند، 138 00:06:35,620 --> 00:06:38,360 و این است که چرا آن را واقعا مهم برای توسعه برخی از عادات خوب 139 00:06:38,360 --> 00:06:39,800 زمانی که شما کار با آن. 140 00:06:39,800 --> 00:06:43,060 بر خلاف آماری اعلام کرد حافظه، حافظه خود را 141 00:06:43,060 --> 00:06:46,790 به طور خودکار به بازگشت نیست سیستم زمانی که عملکرد خود را انجام شده است. 142 00:06:46,790 --> 00:06:49,280 بنابراین اگر ما اصلی، و اصلی یک تابع فراخوانی 143 00:06:49,280 --> 00:06:53,860 F، وقتی f پس از اتمام هر چه آن را انجام و کنترل برنامه را برمی گرداند 144 00:06:53,860 --> 00:06:58,810 برگشت به بخش اصلی، همه از حافظه که f استفاده شده است تماس داده شده است. 145 00:06:58,810 --> 00:07:01,250 می توان آن را دوباره مورد استفاده قرار توسط برخی از برنامه های دیگر، 146 00:07:01,250 --> 00:07:04,250 و یا برخی از تابع دیگر که می شود بعد از آن در اصلی به نام. 147 00:07:04,250 --> 00:07:06,970 می توانید آن را که حافظه همان را دوباره و دوباره استفاده کنید. 148 00:07:06,970 --> 00:07:09,620 >> اگر شما به صورت پویا تخصیص حافظه هر چند 149 00:07:09,620 --> 00:07:14,380 شما باید به صراحت بگویم سیستم است که شما را با آن انجام می شود. 150 00:07:14,380 --> 00:07:18,370 آن را بر روی آن را برای شما نگه دارید، که می تواند منجر به مشکل شما در حال اجرا 151 00:07:18,370 --> 00:07:19,290 از حافظه است. 152 00:07:19,290 --> 00:07:22,179 و در واقع گاهی اوقات مراجعه ما به این به عنوان یک نشت حافظه. 153 00:07:22,179 --> 00:07:24,970 و بعضی اوقات این نشت حافظه در واقع می تواند واقعا ویرانگر باشد 154 00:07:24,970 --> 00:07:27,020 برای عملکرد سیستم. 155 00:07:27,020 --> 00:07:31,120 >> اگر شما یک کاربر اینترنت مکرر شما ممکن است مرورگر وب خاص استفاده کنید، 156 00:07:31,120 --> 00:07:35,630 و من نام نام نیست در اینجا، اما برخی از مرورگرهای وب وجود دارد 157 00:07:35,630 --> 00:07:39,150 که برای بدنام در واقع با داشتن هستند نشت حافظه که ثابت نشده است. 158 00:07:39,150 --> 00:07:44,570 و اگر شما را ترک مرورگر خود را باز برای یک دوره بسیار طولانی از زمان، روز 159 00:07:44,570 --> 00:07:48,060 و روز یا چند هفته، شما گاهی اوقات ممکن است متوجه سیستم شما 160 00:07:48,060 --> 00:07:49,790 در حال اجرا است واقعا، واقعا آرام است. 161 00:07:49,790 --> 00:07:54,640 و دلیل آن این است که مرورگر حافظه اختصاص داده است، 162 00:07:54,640 --> 00:07:57,320 اما پس از آن سیستم گفت که آن را با آن انجام می شود. 163 00:07:57,320 --> 00:08:01,000 و به طوری که برگ حافظه کمتر در دسترس برای همه برنامه های دیگر خود را 164 00:08:01,000 --> 00:08:04,480 به به اشتراک گذاشتن، چون تو leaking-- که مرورگر وب 165 00:08:04,480 --> 00:08:06,755 برنامه نشت حافظه است. 166 00:08:06,755 --> 00:08:08,880 چگونه حافظه ما به تماس زمانی که ما با آن انجام می شود؟ 167 00:08:08,880 --> 00:08:10,838 خب خوشبختانه آن را یک راه بسیار آسان برای انجام آن است. 168 00:08:10,838 --> 00:08:11,710 ما فقط آن را آزاد. 169 00:08:11,710 --> 00:08:15,020 یک تابع به نام رایگان وجود دارد، این یک اشاره گر را می پذیرد به حافظه، 170 00:08:15,020 --> 00:08:16,010 و ما خوب به آن بروید. 171 00:08:16,010 --> 00:08:18,310 >> بنابراین اجازه دهید می گویند که ما در حال وسط برنامه ما، 172 00:08:18,310 --> 00:08:21,970 ما می خواهیم به malloc 50 حرف می باشد. 173 00:08:21,970 --> 00:08:25,710 ما می خواهیم به malloc یک آرایه است که می توانید قادر به نگه داشتن 50 حرف می باشد. 174 00:08:25,710 --> 00:08:29,109 و هنگامی که ما یک اشاره گر به که، نام که اشاره گر به کلمه است. 175 00:08:29,109 --> 00:08:30,900 ما هر آنچه را که ما را به انجام با کلمه، 176 00:08:30,900 --> 00:08:33,440 و پس از آن زمانی که ما انجام ما فقط آن را آزاد. 177 00:08:33,440 --> 00:08:37,460 و در حال حاضر ما بازگشت آن 50 بایت حافظه به سیستم. 178 00:08:37,460 --> 00:08:40,147 برخی از عملکرد های دیگر می توانید آنها را استفاده کنید. 179 00:08:40,147 --> 00:08:43,480 ما لازم نیست که به نگرانی در مورد درد و رنج نشت حافظه از آنجا که ما کلمه آزاد شده است. 180 00:08:43,480 --> 00:08:46,639 ما در حافظه داده ام تماس، بنابراین ما در حال کار با انجام آن می. 181 00:08:46,639 --> 00:08:48,430 بنابراین سه وجود دارد قوانین طلایی که باید 182 00:08:48,430 --> 00:08:51,700 در ذهن نگه داشته هر زمان که شما تخصیص حافظه به صورت پویا 183 00:08:51,700 --> 00:08:52,990 با malloc. 184 00:08:52,990 --> 00:08:56,480 هر بلوک از حافظه که شما malloc آزاد باید گردد 185 00:08:56,480 --> 00:08:58,430 قبل از برنامه در حال اجرا پس از اتمام خود را. 186 00:08:58,430 --> 00:09:02,029 در حال حاضر دوباره، در دستگاه و یا در IDE این نوع از برای شما اتفاق می افتد به هر حال 187 00:09:02,029 --> 00:09:04,820 وقتی you-- این به هر حال اتفاق خواهد افتاد هنگامی که برنامه خود را خاتمه یافته است، 188 00:09:04,820 --> 00:09:06,880 تمام حافظه منتشر خواهد شد. 189 00:09:06,880 --> 00:09:10,750 اما آن را به طور کلی خوب برنامه نویسی عمل به همیشه، هنگامی که شما انجام می شود، 190 00:09:10,750 --> 00:09:13,810 رایگان چه شما mallocd اند. 191 00:09:13,810 --> 00:09:16,690 >> که گفت، تنها چیزهایی که شما در mallocd باید آزاد. 192 00:09:16,690 --> 00:09:19,880 اگر شما آماری اعلام عدد صحیح، نوع int x نیمه روده بزرگ، 193 00:09:19,880 --> 00:09:23,500 که زندگی می کند بر روی پشته، شما نمی کنند و سپس می خواهید به رایگان X. 194 00:09:23,500 --> 00:09:25,970 بنابراین تنها چیزهایی که شما را mallocd باید آزاد شود. 195 00:09:25,970 --> 00:09:28,960 >> و در آخر، انجام کاری دو بار رایگان است. 196 00:09:28,960 --> 00:09:31,170 که می تواند منجر وضعیت عجیب و غریب است. 197 00:09:31,170 --> 00:09:33,530 بنابراین همه چیز که شما را mallocd است آزاد شوند. 198 00:09:33,530 --> 00:09:36,000 تنها چیزهایی که شما را از malloc باید آزاد شود. 199 00:09:36,000 --> 00:09:38,730 و انجام کاری دو بار رایگان است. 200 00:09:38,730 --> 00:09:43,660 >> بنابراین اجازه دهید از طریق یک مثال به اینجا بروید از آنچه برخی از پویا اختصاص داده 201 00:09:43,660 --> 00:09:46,122 حافظه ممکن است مانند مخلوط نگاه با برخی از حافظه استاتیک می باشد. 202 00:09:46,122 --> 00:09:47,080 چه چیزی ممکن است در اینجا اتفاق می افتد؟ 203 00:09:47,080 --> 00:09:48,913 ببینید اگر شما می توانید به دنبال همراه و حدس بزنید چه چیزی 204 00:09:48,913 --> 00:09:51,720 رفتن به عنوان ما به از طریق تمام این خط کد. 205 00:09:51,720 --> 00:09:53,980 >> بنابراین ما می گویند INT متر. 206 00:09:53,980 --> 00:09:54,840 چه اتفاقی می افتد؟ 207 00:09:54,840 --> 00:09:56,339 خب این بسیار ساده است. 208 00:09:56,339 --> 00:09:59,650 من یک متغیر عدد صحیح به نام متر ایجاد کنید. 209 00:09:59,650 --> 00:10:01,400 رنگ آن سبز، چرا که این رنگ است 210 00:10:01,400 --> 00:10:03,730 که من استفاده از زمانی که من صحبت کردن در در مورد متغیر عدد صحیح است. 211 00:10:03,730 --> 00:10:05,160 این یک جعبه است. 212 00:10:05,160 --> 00:10:08,400 آن را به نام متر، و شما می توانید اعداد صحیح اینترنتی داخل آن است. 213 00:10:08,400 --> 00:10:12,400 >> اگر من پس بگو ستاره بین المللی A است؟ 214 00:10:12,400 --> 00:10:13,530 خوب است که بسیار مشابه است. 215 00:10:13,530 --> 00:10:15,780 من ایجاد یک جعبه به نام. 216 00:10:15,780 --> 00:10:19,100 آن را قادر به برگزاری INT ستاره ها، اشاره گر به اعداد است. 217 00:10:19,100 --> 00:10:21,570 بنابراین من آن را رنگ آمیزی سبز حرکت است. 218 00:10:21,570 --> 00:10:24,140 >> من می دانم آن را تا به چیزی برای انجام با یک عدد صحیح، 219 00:10:24,140 --> 00:10:25,852 اما آن را یک عدد صحیح نمی شده است. 220 00:10:25,852 --> 00:10:27,310 اما آن را بسیار بسیار همان ایده. 221 00:10:27,310 --> 00:10:28,101 من یک جعبه ایجاد کرده اید. 222 00:10:28,101 --> 00:10:30,070 هر دو از این حق در حال حاضر در پشته زندگی می کنند. 223 00:10:30,070 --> 00:10:32,520 من آنها را هر دو نام داده ام. 224 00:10:32,520 --> 00:10:36,750 >> ستاره بین المللی B برابر اندازه از malloc از نوع int است. 225 00:10:36,750 --> 00:10:38,560 این یکی ممکن است کمی مشکل است. 226 00:10:38,560 --> 00:10:44,110 یک دوم و فکر می کنم در مورد آنچه شما انتظار می رود که در این نمودار اتفاق می افتد. 227 00:10:44,110 --> 00:10:50,210 ستاره بین المللی B برابر اندازه از malloc از نوع int است. 228 00:10:50,210 --> 00:10:51,940 >> خب این نه تنها یک جعبه ایجاد کنید. 229 00:10:51,940 --> 00:10:53,800 این در واقع ایجاد دو جعبه. 230 00:10:53,800 --> 00:10:58,670 و روابط، آن را نیز ایجاد یک نقطه در یک رابطه. 231 00:10:58,670 --> 00:11:02,240 ما یک بلوک اختصاص داده ام حافظه در پشته. 232 00:11:02,240 --> 00:11:05,940 توجه داشته باشید که جعبه سمت راست بالای صفحه وجود دارد یک نام ندارد. 233 00:11:05,940 --> 00:11:06,760 >> ما آن را mallocd. 234 00:11:06,760 --> 00:11:08,050 آن را بر روی پشته وجود دارد. 235 00:11:08,050 --> 00:11:10,090 ولی B یک نام است. 236 00:11:10,090 --> 00:11:11,950 این یک متغیر اشاره گر به نام B است. 237 00:11:11,950 --> 00:11:13,910 که زندگی در پشته. 238 00:11:13,910 --> 00:11:18,250 >> پس از آن یک قطعه از حافظه که اشاره به یکی دیگر. 239 00:11:18,250 --> 00:11:21,840 B شامل آدرس از آن بلوک از حافظه است. 240 00:11:21,840 --> 00:11:23,757 این کار یک نام ندارد در غیر این صورت. 241 00:11:23,757 --> 00:11:24,590 اما آن را به آن اشاره می کند. 242 00:11:24,590 --> 00:11:29,760 بنابراین، هنگامی که ما می گویند ستاره بین المللی B برابر اندازه از malloc از نوع int، که سمت راست وجود دارد، 243 00:11:29,760 --> 00:11:33,490 که فلش است که تا ظهور سمت راست وجود دارد، که همه چیز، 244 00:11:33,490 --> 00:11:36,740 من باید آن را به نظر می رسد دوباره، چه اتفاقی می افتد. 245 00:11:36,740 --> 00:11:39,341 همه از آن اتفاق می افتد در که خط از کد. 246 00:11:39,341 --> 00:11:41,340 در حال حاضر ما کمی بیشتر دریافت کنید دوباره سر راست است. 247 00:11:41,340 --> 00:11:43,330 برابر علامت متر. 248 00:11:43,330 --> 00:11:46,280 آیا شما به یاد چه برابر علامت متر است؟ 249 00:11:46,280 --> 00:11:48,920 خوب است که یک می شود آدرس متر است. 250 00:11:48,920 --> 00:11:54,150 و یا قرار دادن بصورت هندسی تر، امتیاز به متر. 251 00:11:54,150 --> 00:11:56,360 >> برابر ب. 252 00:11:56,360 --> 00:11:57,560 OK بنابراین در اینجا یکی دیگر است. 253 00:11:57,560 --> 00:11:59,230 برابر ب. 254 00:11:59,230 --> 00:12:02,260 چه اتفاقی خواهد افتاد به نمودار این زمان؟ 255 00:12:02,260 --> 00:12:04,330 >> خوب به یاد دارند که آثار عملگر انتساب 256 00:12:04,330 --> 00:12:08,960 با اختصاص ارزش در راست به ارزش در سمت چپ. 257 00:12:08,960 --> 00:12:14,820 بنابراین به جای یک اشاره به متر، در حال حاضر اشاره به همان جایی که نقطه B. 258 00:12:14,820 --> 00:12:18,900 کند اشاره به B، A امتیاز امتیاز که در آن ب. 259 00:12:18,900 --> 00:12:25,280 >> اگر یک با اشاره به B است که می شده اند برابر علامت ب. 260 00:12:25,280 --> 00:12:28,150 اما به جای آن برابر B فقط بدان معنی است که در حال حاضر و B 261 00:12:28,150 --> 00:12:31,770 اشاره به همان آدرس، به دلیل داخل B فقط یک آدرس است. 262 00:12:31,770 --> 00:12:35,004 و در حال حاضر در داخل یک آدرس همان است. 263 00:12:35,004 --> 00:12:37,170 m برابر با 10، احتمالا ترین چیز ساده 264 00:12:37,170 --> 00:12:38,690 ما را در کمی انجام می شود. 265 00:12:38,690 --> 00:12:40,460 قرار دادن 10 در جعبه. 266 00:12:40,460 --> 00:12:45,640 ستاره B برابر متر به همراه 2، از یاد ما اشاره گر، فیلم و ستاره B به معنی. 267 00:12:45,640 --> 00:12:50,230 ما قصد داریم به ارجاع B قرار داده و برخی از ارزش در آن محل حافظه است. 268 00:12:50,230 --> 00:12:51,860 در این مورد 12. 269 00:12:51,860 --> 00:12:55,300 >> تا زمانی که ما ارجاع یک نقطه از به یاد ما فقط سفر کردن فلش. 270 00:12:55,300 --> 00:12:58,205 یا به عبارت دیگر، ما رفتن به آن آدرس حافظه 271 00:12:58,205 --> 00:12:59,580 و ما آن را در برخی از راه دستکاری. 272 00:12:59,580 --> 00:13:00,830 ما برخی از ارزش در آن وجود دارد قرار داده است. 273 00:13:00,830 --> 00:13:03,960 در این مورد ستاره ب به علاوه 2 برابر متر است که فقط 274 00:13:03,960 --> 00:13:08,230 رفتن به متغیر به اشاره شده توسط B، رفتن به حافظه به اشاره شده توسط B، 275 00:13:08,230 --> 00:13:11,750 قرار داده و به علاوه 2 متر در آن وجود دارد، 12. 276 00:13:11,750 --> 00:13:14,970 >> در حال حاضر من رایگان B. 277 00:13:14,970 --> 00:13:16,490 وقتی که من رایگان B چه اتفاقی می افتد؟ 278 00:13:16,490 --> 00:13:18,800 به یاد داشته باشید آنچه که من معنی رایگان است. 279 00:13:18,800 --> 00:13:21,920 چه هستم من گفت وقتی که من رایگان B؟ 280 00:13:21,920 --> 00:13:23,410 >> من کار با انجام آن می، درست است؟ 281 00:13:23,410 --> 00:13:25,702 من اساسا دهد تا حافظه است. 282 00:13:25,702 --> 00:13:26,910 من آن را به سیستم. 283 00:13:26,910 --> 00:13:33,010 من لازم نیست این دیگر است چه من می گویم، خوب است؟ 284 00:13:33,010 --> 00:13:37,390 >> در حال حاضر اگر من می گویم ستاره برابر 11 شما احتمالا می تواند 285 00:13:37,390 --> 00:13:40,460 در حال حاضر که چیزی بد به در حال رفتن به اینجا اتفاق می افتد، درست است؟ 286 00:13:40,460 --> 00:13:44,160 و در واقع اگر من سعی کردم که من احتمالا یک گسل تقسیم رنج می برند. 287 00:13:44,160 --> 00:13:47,140 چون در حال حاضر، اگر چه قبلا آن تکه از حافظه 288 00:13:47,140 --> 00:13:50,220 چیزی بود که من تا به حال دسترسی به، در این نقطه 289 00:13:50,220 --> 00:13:54,590 در حال حاضر من دسترسی به حافظه است که است نه قانونی است برای من به دسترسی داشته باشید. 290 00:13:54,590 --> 00:13:57,330 >> و همانطور که ما احتمالا به یاد، زمانی که ما دسترسی به حافظه 291 00:13:57,330 --> 00:14:00,000 که ما قرار نیست به لمس، که شایع ترین علت است 292 00:14:00,000 --> 00:14:01,860 یک تقسیم بندی گسل. و به این ترتیب برنامه من 293 00:14:01,860 --> 00:14:05,170 سقوط اگر من سعی کردم به انجام این کار. 294 00:14:05,170 --> 00:14:09,910 بنابراین دوباره آن را یک ایده خوب برای گرفتن خوب است تمرین و عادات خوب ریشه دوانده 295 00:14:09,910 --> 00:14:12,920 در هنگام کار با malloc و رایگان، به طوری که شما تقسیم بندی رنج می برند نیست 296 00:14:12,920 --> 00:14:15,310 گسل ها، و که شما با استفاده خود را به صورت پویا اختصاص داده 297 00:14:15,310 --> 00:14:17,370 حافظه مسئولانه. 298 00:14:17,370 --> 00:14:20,300 >> من داگ لوید هستم این CS50. 299 00:14:20,300 --> 00:14:21,947