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 >> ڈوگ لایڈ: ٹھیک ہے، تو ایک تجویز یہاں شروع کرنے سے پہلے. 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 اسٹیک، سب سے اوپر پر تمام راستے جانے یا ڈھیر اور اسٹیک ہونے 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 ویسے سی نامی ایک تقریب فراہم کرتا ہے malloc، میموری allocator، جس 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 یہ ایک شہوت انگیز null پوائنٹر آپ کو واپس دے گا. 92 00:04:10,645 --> 00:04:15,282 آپ کو ہم تو کیا ہوتا ہے یاد ہے کوشش کریں اور ایک شہوت انگیز null پوائنٹر dereference؟ 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 جانچ پڑتال کرنے کی ضرورت ہے یا نہیں یہ آپ کو واپس شہوت انگیز null ہے دی پوائنٹر. 97 00:04:25,270 --> 00:04:28,800 اگر ایسا ہے تو، آپ کو آپ کے پروگرام کو ختم کرنے کی ضرورت ہے آپ dereference ہے کی کوشش کریں اور اگر اس کی وجہ 98 00:04:28,800 --> 00:04:31,360 تم جا رہے ہو، شہوت انگیز null پوائنٹر ایک انقطاع غلطی کا شکار کرنے 99 00:04:31,360 --> 00:04:34,380 اور آپ کے پروگرام ہے ویسے بھی کریش ہوا جا رہا. 100 00:04:34,380 --> 00:04:37,190 تو کس طرح سے Statically ہم کرتے ہیں ایک عددی حاصل؟ 101 00:04:37,190 --> 00:04:37,730 >> int ایکس. 102 00:04:37,730 --> 00:04:40,010 ہم شاید کہ کیا ہے اوقات کے ایک گروپ، ٹھیک ہے؟ 103 00:04:40,010 --> 00:04:43,480 یہ نامی ایک متغیر کی تخلیق اسٹیک پر رہتا ہے کہ ایکس. 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 >> یا اس سے زیادہ مناسب طریقے سے ہم int سٹار پکسلز کہونگا 107 00:04:53,050 --> 00:04:57,680 ، int کے malloc کا سائز برابر کچھ کم پھینک کرنے کے لئے 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 کر سکتے ہیں پکسلز dereference کی کہ میموری تک رسائی حاصل. 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 ہم ایک صف بنانے کے لئے چاہتے ہیں تو کیا کے اسٹیک پر رہتے ہیں کہ floats ایکس؟ 117 00:05:24,030 --> 00:05:28,210 اس کا نام ہے stack_array-- فلوٹ ہمارے صف مربع بریکٹ X کی. 118 00:05:28,210 --> 00:05:32,419 اس سے ہمیں ایک صف کے لئے پیدا کر دے گا کے اسٹیک پر رہتے ہیں کہ floats ایکس. 119 00:05:32,419 --> 00:05:34,960 ہم floats کی ایک سرنی تشکیل دے سکتے ہیں وہ بھی، ڈھیر پر رہتا ہے. 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 کی ضرورت ہے کا کہنا ہے کہ floats کے، یا 1،000 floats کے. 125 00:05:51,560 --> 00:05:54,810 تو اس صورت میں یہ ہو جائے گا 100 floats کے لئے 400 بائٹس، 126 00:05:54,810 --> 00:05:59,080 یا 1،000 floats کے لئے 4،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 ہم نے ایک اعلان کر رہے ہیں حقیقت یہ ہے کہ تو یہاں اسٹیک پر floats کی صف 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 سے Statically اعلان کے برعکس میموری، اپنی میموری 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 ہم 50 حروف malloc سے کرنا چاہتے ہیں. 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 آپ سے Statically اعلان تو ایک عددی، int ایکس نیم بڑی آنت، 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 یہ آپ کر سکتے ہیں میٹر کہتے ہیں، اور اس کے اندر سٹور integers کے. 213 00:10:08,400 --> 00:10:12,400 >> میں تو ایک int ستارہ کیا کہنا ہے؟ 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 کی صلاحیت رکھتی ہے ستاروں، integers کے پر اشارہ. 217 00:10:19,100 --> 00:10:21,570 تو میں نے اس کے ساتھ ساتھ سبز ISH رنگائ ہوں. 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 >> INT سٹار ب int کے malloc کا سائز برابر. 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 INT سٹار ب int کے malloc کا سائز برابر. 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 لیکن ب کا ایک نام ہے. 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 بی ایڈریس پر مشتمل ہے میموری کی اس بلاک سے. 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 تو ہم int سٹار ب برابر کہنا ہے کہ جب int کے malloc کا سائز، وہیں کہ، 243 00:11:29,760 --> 00:11:33,490 پر popped کہ تیر وہاں دائیں جانب، کہ پوری بات، 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 یا، زیادہ diagrammatically ڈال میٹر پوائنٹس. 251 00:11:54,150 --> 00:11:56,360 >> ایک بی کے برابر. 252 00:11:56,360 --> 00:11:57,560 ٹھیک ہے، تو یہاں ایک ہے. 253 00:11:57,560 --> 00:11:59,230 A B برابر. 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 پوائنٹس اشارہ. 259 00:12:18,900 --> 00:12:25,280 >> ایک نکیلی کہ بی کو تو کرے گا ایک ایمپرسینڈ ب کے برابر ہے کیا گیا ہے. 260 00:12:25,280 --> 00:12:28,150 بلکہ اس کی بجائے ایک بی برابر کا مطلب ہے کہ اور ب ہیں 261 00:12:28,150 --> 00:12:31,770 ، اسی ایڈریس کی وجہ سے کی طرف اشارہ ب کے اندر صرف ایک پتہ ہے. 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 سٹار ب میٹر کے برابر ہے 2، سے یاد ہمارے اشارہ ویڈیو کیا سٹار ب کا مطلب ہے. 267 00:12:45,640 --> 00:12:50,230 ہم dereference بی اور ڈال کرنے کے لئے جا رہے ہیں کہ میموری کی جگہ میں کچھ قدر. 268 00:12:50,230 --> 00:12:51,860 اس صورت میں 12. 269 00:12:51,860 --> 00:12:55,300 >> تو جب ہم کا ایک نقطہ dereference ہے ہم صرف تیر نیچے سفر یاد. 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 اور 12، وہاں میں M علاوہ 2 ڈال. 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