1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Valgrind] 2 00:00:02,000 --> 00:00:05,000 [نیٹ Hardison، ہارورڈ یونیورسٹی] 3 00:00:05,000 --> 00:00:07,000 یہ CS50 ہے، CS50.TV] 4 00:00:07,000 --> 00:00:10,000 C پروگراموں میں سب سے زیادہ مشکل کیڑے کچھ 5 00:00:10,000 --> 00:00:13,000 میموری کی بدانتظامی سے آتے ہیں. 6 00:00:13,000 --> 00:00:15,000 چیزوں کو نچوڑنا کے طریقوں کی ایک بڑی تعداد میں ہیں، 7 00:00:15,000 --> 00:00:17,000 میموری کی غلط رقم کا آونٹن بھی شامل 8 00:00:17,000 --> 00:00:20,000 متغیر ابتدا بھول 9 00:00:20,000 --> 00:00:23,000 سے پہلے یا اس کے بعد ایک بفر کے اختتام پر لکھنے، 10 00:00:23,000 --> 00:00:25,000 آزاد اور میموری ایک سے زیادہ اوقات رکھنے. 11 00:00:25,000 --> 00:00:28,000 علامات وقفے وقفے سے گر کر تباہ سے لے 12 00:00:28,000 --> 00:00:30,000 مشکوک ادلیکھت اقدار، 13 00:00:30,000 --> 00:00:34,000 اکثر مقامات اور اوقات تک اصل غلطی سے ہٹا دیا. 14 00:00:34,000 --> 00:00:37,000 پایا مسئلہ بنیادی جڑ تخریھن واپس 15 00:00:37,000 --> 00:00:39,000 چیلنج کیا جا سکتا ہے، 16 00:00:39,000 --> 00:00:42,000 لیکن خوش قسمتی سے ایک مددگار بلایا Valgrind پروگرام ہے 17 00:00:42,000 --> 00:00:44,000 وہ بہت کی مدد کر سکتے ہیں. 18 00:00:44,000 --> 00:00:47,000 >> آپ Valgrind کے تحت ایک پروگرام کو چالو کرنے کے چلاتے ہیں 19 00:00:47,000 --> 00:00:50,000 ڈھیر میموری کے آونٹن اور رسائی کی وسیع چیکنگ. 20 00:00:50,000 --> 00:00:53,000 جب Valgrind ایک مسئلہ کا پتہ لگاتا ہے، تو آپ کو فوری طور پر فراہم کرتا ہے، 21 00:00:53,000 --> 00:00:56,000 براہ راست معلومات جو آپ کو کرنے کی اجازت دیتا ہے 22 00:00:56,000 --> 00:00:58,000 زیادہ آسانی سے اور اس مسئلہ کو حل تلاش کریں. 23 00:00:58,000 --> 00:01:01,000 بھی کم مہلک میموری کے مسائل پر Valgrind، 24 00:01:01,000 --> 00:01:04,000 جیسا کہ میموری لیک، ڈھیر میموری آونٹن 25 00:01:04,000 --> 00:01:07,000 اور اسے آزاد بھول ہے. 26 00:01:07,000 --> 00:01:10,000 ہمارے debugger سنکلک، بجنا، GDB، طرح 27 00:01:10,000 --> 00:01:14,000 Valgrind مفت سافٹ ویئر ہے، اور اس آلے پر نصب کیا جاتا ہے. 28 00:01:14,000 --> 00:01:16,000 Valgrind اپنے بائنری کارکردگی پر چلتا ہے، 29 00:01:16,000 --> 00:01:20,000 نہیں سی. یا H منبع کوڈ فائلوں، 30 00:01:20,000 --> 00:01:23,000 تو اس بات کا یقین کر لیں کہ آپ کو آپ کے پروگرام کی ایک کاپی کو اپ ڈیٹ مرتب کی ہے 31 00:01:23,000 --> 00:01:25,000 بجنا کا استعمال کرتے ہوئے یا بنائیں. 32 00:01:25,000 --> 00:01:28,000 اس کے بعد، Valgrind کے تحت اپنے پروگرام چلا رہا ہو سکتا ہے 33 00:01:28,000 --> 00:01:32,000 نے صرف لفظ Valgrind کے ساتھ معیاری پروگرام کمان prefixing کے طور پر کے طور پر آسان، 34 00:01:32,000 --> 00:01:35,000 جو شروع ہوتا ہے Valgrind ہے اور اس کے اندر پروگرام چلاتی ہے. 35 00:01:35,000 --> 00:01:38,000 Valgrind جب شروع، کچھ پیچیدہ ہے 36 00:01:38,000 --> 00:01:41,000 میموری چیک کے لئے کارکردگی قابل تشکیل jiggering 37 00:01:41,000 --> 00:01:44,000 تو یہ تھوڑا سا حاصل کرنے کے لئے اور چلانے سکتے ہیں. 38 00:01:44,000 --> 00:01:48,000 پروگرام عام طور پر تو، یہ بہت زیادہ آہستہ آہستہ قتل، 39 00:01:48,000 --> 00:01:52,000 اور جب وہ فارغ ہو جائے، اس کی میموری استعمال کی Valgrind خلاصہ پرنٹ گا. 40 00:01:52,000 --> 00:01:58,000 اگر سب کچھ اچھی طرح سے جاتا ہے، یہ کچھ اس طرح نظر آئے گا: 41 00:01:58,000 --> 00:02:01,000 اس صورت میں، / clean_program. 42 00:02:01,000 --> 00:02:04,000 پروگرام میں چلانا چاہتے ہیں، اس کے پاس راستہ ہے. 43 00:02:04,000 --> 00:02:06,000 اور جب اس سے کوئی بحث نہیں ہے، 44 00:02:06,000 --> 00:02:09,000 اگر یہ میں نے صرف انہیں ہمیشہ کی طرح حکم کے اختتام پر سمت تھا. 45 00:02:09,000 --> 00:02:12,000 صاف پروگرام صرف ایک پاگل سی پروگرام میں پیدا 46 00:02:12,000 --> 00:02:15,000 جو ڈھیر پر ints کا ایک بلاک کے لئے جگہ مختص، 47 00:02:15,000 --> 00:02:19,000 کچھ اقدار ان کے اندر ڈال دیا، اور پورے بلاک آزاد ہے. 48 00:02:19,000 --> 00:02:23,000 اس کا ہے جو آپ کے لئے کوئی غلطیوں اور کوئی لیک شوٹنگ کر رہے ہیں. 49 00:02:23,000 --> 00:02:27,000 >> ایک اور اہم میٹرک مختص بائٹس کی کل تعداد ہے. 50 00:02:27,000 --> 00:02:32,000 پروگرام کی بنیاد پر، اگر آپ کے آونٹن میگا بائٹ یا اس سے زیادہ میں ہیں، 51 00:02:32,000 --> 00:02:34,000 آپ شاید کچھ غلط کر رہے ہیں. 52 00:02:34,000 --> 00:02:37,000 کیا آپ بیکار میں نقلیں ذخیرہ کرنے؟ 53 00:02:37,000 --> 00:02:40,000 کیا آپ کو ذخیرہ کرنے کے لیے ڈھیر کا استعمال کرتے ہوئے، جب یہ بہتر ہو گا اسٹیک استعمال کرنے کے لئے کرے گا؟ 54 00:02:40,000 --> 00:02:43,000 لہذا، میموری کی غلطیوں کو واقعی برا ہو سکتا ہے. 55 00:02:43,000 --> 00:02:46,000 زیادہ ظاہر ہوتے شاندار گر کر تباہ کی وجہ سے، 56 00:02:46,000 --> 00:02:49,000 لیکن پھر بھی یہ مشکل اشارہ اب بھی ہو سکتا ہے 57 00:02:49,000 --> 00:02:51,000 کیا بالکل حادثے کی وجہ سے. 58 00:02:51,000 --> 00:02:54,000 ایک میموری کی خرابی کے ساتھ مزید insidiously ایک پروگرام 59 00:02:54,000 --> 00:02:56,000 cleanly اب بھی مرتب کر سکتے ہیں 60 00:02:56,000 --> 00:02:58,000 اور پھر بھی صحیح طریقے سے کام کرنے کے لئے لگ رہے ہو کر سکتے ہیں 61 00:02:58,000 --> 00:03:01,000 کیونکہ آپ نے خوش وقت کے سب سے زیادہ حاصل کرنے کے لئے. 62 00:03:01,000 --> 00:03:04,000 کئی کے بعد "کامیاب نتائج" 63 00:03:04,000 --> 00:03:07,000 آپ نے ابھی لگتا ہے کہ ہو سکتا ہے کہ کمپیوٹر کے ایک حادثے میں ایک عارضی ہے، 64 00:03:07,000 --> 00:03:10,000 لیکن کمپیوٹر کبھی غلط نہیں ہے. 65 00:03:10,000 --> 00:03:13,000 >> Valgrind چل رہا ہے میں آپ کی مدد نظر آئے میموری کی غلطیوں کی وجہ سے ٹریک کر سکتے ہیں 66 00:03:13,000 --> 00:03:18,000 کے ساتھ ساتھ غلطیاں lurking تلاش آپ کے بارے میں بھی ابھی تک پتہ نہیں ہے. 67 00:03:18,000 --> 00:03:22,000 ہر بار Valgrind ایک مسئلہ کا پتہ لگاتا ہے، جو یہ دیکھا اس کے بارے میں کے بارے میں معلومات پرنٹ. 68 00:03:22,000 --> 00:03:24,000 ہر آئٹم کو کافی terse ہے - 69 00:03:24,000 --> 00:03:27,000 اذيت ہدایات کا ذریعہ، لائن، کیا مسئلہ ہے، 70 00:03:27,000 --> 00:03:30,000 ملوث میموری کے بارے میں اور ایک چھوٹی سی معلومات - 71 00:03:30,000 --> 00:03:34,000 لیکن اکثر یہ صحیح جگہ پر آپ کی توجہ کو کافی معلومات ہے. 72 00:03:34,000 --> 00:03:37,000 Valgrind کی ایک مثال ہے ایک چھوٹی گاڑی پروگرام چل رہے ہیں 73 00:03:37,000 --> 00:03:40,000 جو ڈھیر میموری کی ایک جعلی پڑھیں کرتا ہے. 74 00:03:40,000 --> 00:03:49,000 ہم تالیف میں غلطیاں یا انتباہ دیکھتے ہیں. 75 00:03:49,000 --> 00:03:53,000 اہ اوہ، غلطی کی سمری میں کہا گیا ہے کہ دو غلطیاں ہیں - 76 00:03:53,000 --> 00:03:56,000 دو 4 سائز کے جعلی کتابیں - شراکت، ہے. 77 00:03:56,000 --> 00:04:01,000 دونوں خراب کتابیں invalid_read.c کے مرکزی تقریب میں ہوا، 78 00:04:01,000 --> 00:04:04,000 16 لائن اور 19 لائن پر دوسری سب سے پہلے ہے. 79 00:04:04,000 --> 00:04:06,000 کوڈ نظر دو 80 00:04:06,000 --> 00:04:11,000 پہلے printf ہماری میموری بلاک کے آخر پچھلے ایک int کو پڑھنے کے لئے کی کوشش کرتا ہے کال کی طرح لگتا ہے. 81 00:04:11,000 --> 00:04:13,000 اگر ہم Valgrind پیداوار میں واپس دیکھو، 82 00:04:13,000 --> 00:04:16,000 ہم دیکھتے ہیں کہ Valgrind نے ہمیں بتایا بالکل وہی. 83 00:04:16,000 --> 00:04:19,000 ایڈریس پر ہم سے پڑھنے کی کوشش کر رہے ہیں وہ شروع ہوتا 0 بائٹس 84 00:04:19,000 --> 00:04:22,000 حجم 16 بائٹس کی بلاک کے آخر ماضی - 85 00:04:22,000 --> 00:04:25,000 چار ints 32 بٹ کہ ہم مختص. 86 00:04:25,000 --> 00:04:29,000 پتہ ہم پڑھنے کی کوشش کر رہے تھے اور یہی وجہ ہے کہ ہمارے بلاک کے آخر میں شروع ہوتا ہے، 87 00:04:29,000 --> 00:04:32,000 بالکل اسی طرح جیسے ہم نے ہمارے برے printf کال میں دیکھتے ہیں. 88 00:04:32,000 --> 00:04:36,000 اب ہے کہ ایک معاہدے کے بڑے کی طرح جعلی کتابیں لگتا نہیں ہو سکتا ہے، 89 00:04:36,000 --> 00:04:39,000 لیکن اگر آپ نے اس کے اعداد و شمار کا استعمال کرتے ہوئے آپ کے پروگرام کے بہاؤ کو کنٹرول کر رہے ہیں - 90 00:04:39,000 --> 00:04:42,000 مثال کے طور پر، ایک کے حصے کے طور پر اگر بیان یا لوپ - 91 00:04:42,000 --> 00:04:45,000 تو حالات خراب خاموشی سے جا سکتے ہیں. 92 00:04:45,000 --> 00:04:47,000 دیکھو کس طرح میں invalid_read پروگرام چلا سکتے ہیں 93 00:04:47,000 --> 00:04:50,000 اور عام سے باہر کچھ بھی نہیں ہوتا ہے. 94 00:04:50,000 --> 00:04:52,000 ڈراونا، ہہ؟ 95 00:04:52,000 --> 00:04:56,000 >> اب، غلطیوں کے کچھ اور قسم کی ہے کہ آپ اپنے کوڈ میں سامنا ہو سکتا ہے کو دیکھو، 96 00:04:56,000 --> 00:04:59,000 ہم دیکھتے ہیں اور کتنا Valgrind ان کا پتہ لگاتا ہوں گے. 97 00:04:59,000 --> 00:05:01,000 ہم صرف ایک invalid_read کے ایک مثال کے طور پر دیکھا، 98 00:05:01,000 --> 00:05:04,000 تو اب ہم باہر ایک invalid_write چیک کرنے کے لیے. 99 00:05:04,000 --> 00:05:09,000 ایک بار پھر، تالیف میں غلطیاں یا انتباہ. 100 00:05:09,000 --> 00:05:12,000 ٹھیک ہے، Valgrind کا کہنا ہے کہ ہے کہ اس پروگرام میں دو غلطیاں ہیں - 101 00:05:12,000 --> 00:05:15,000 invalid_write اور ایک invalid_read. 102 00:05:15,000 --> 00:05:18,000 آو اس کوڈ کو چیک کرنے کے لیے ہے. 103 00:05:18,000 --> 00:05:21,000 جیسا کہ ہم نے کلاسک strlen کے علاوہ ایک بگ کی ایک مثال ہے لگتا ہے. 104 00:05:21,000 --> 00:05:24,000 کوڈ ہے malloc جگہ کی ایک اضافی بائٹ 105 00:05:24,000 --> 00:05:26,000 0 / حروف کے لئے، 106 00:05:26,000 --> 00:05:30,000 تو جب STR نقل ssubstrlen میں لکھ گئے "cs50 پتھروں!" 107 00:05:30,000 --> 00:05:33,000 یہ ہمارے بلاک کے آخر ماضی 1 بائٹ لکھا. 108 00:05:33,000 --> 00:05:36,000 اس invalid_read آتا ہے جب ہم printf ہماری کال کرنے کے. 109 00:05:36,000 --> 00:05:40,000 Printf ختم جعلی میموری کو پڑھنے کے جب تم میں سے کسی ایک کو یہ کردار 0 / کتابیں 110 00:05:40,000 --> 00:05:43,000 کے طور پر اس اس E سٹرنگ کے آخر میں لگتا ہے یہ پرنٹنگ ہے. 111 00:05:43,000 --> 00:05:45,000 لیکن اس میں سے کوئی بھی Valgrind فرار ہو گئے. 112 00:05:45,000 --> 00:05:48,000 ہم STR کاپی کے ایک حصے کے کے طور پر دیکھتے ہیں کہ یہ invalid_write پکڑ لیا 113 00:05:48,000 --> 00:05:51,000 اہم 11 لائن پر، اور invalid_read printf کا حصہ ہے. 114 00:05:51,000 --> 00:05:54,000 راک، Valgrind. 115 00:05:54,000 --> 00:05:57,000 ایک بار پھر ایک بڑا سودا کی طرح یہ لگتا، نہیں ہو سکتا ہے. 116 00:05:57,000 --> 00:06:00,000 ہم اور اس سے زیادہ Valgrind سے باہر اس پروگرام چلا سکتے ہیں 117 00:06:00,000 --> 00:06:03,000 اور کسی بھی خرابی کی علامات نہیں دیکھا. 118 00:06:03,000 --> 00:06:06,000 >> تاہم، اس کا ایک معمولی تبدیلی میں دیکھو 119 00:06:06,000 --> 00:06:09,000 چیزیں بہت برا کس طرح حاصل کر سکتے ہیں. 120 00:06:09,000 --> 00:06:14,000 تو عطا کی گئی، ہم چیزیں صرف اس کوڈ میں تھوڑا سا سے کوس رہے ہیں. 121 00:06:14,000 --> 00:06:17,000 ہم صرف ڈھیر پر دو ڈور کے لئے کر رہے ہیں خلا آونٹن 122 00:06:17,000 --> 00:06:19,000 cs50 پتھروں کی لمبائی، 123 00:06:19,000 --> 00:06:22,000 اس وقت، کردار 0 / یاد ہے. 124 00:06:22,000 --> 00:06:25,000 لیکن اس وقت ہم نے ایک بہت طویل سٹرنگ میں میموری بلاک میں پھینک 125 00:06:25,000 --> 00:06:27,000 کہ S اشارہ کر رہا ہے. 126 00:06:27,000 --> 00:06:30,000 کیا اثر میموری بلاک پر پڑے گا کہ T پوائنٹس ہے؟ 127 00:06:30,000 --> 00:06:34,000 ٹھیک ہے، اگر، یاد T بتاتے ہیں کہ صرف S سے ملحق ہے 128 00:06:34,000 --> 00:06:37,000 بعد آنے والے 129 00:06:37,000 --> 00:06:39,000 تو ہم T. کا حصہ پر لکھا ہو سکتا ہے 130 00:06:39,000 --> 00:06:41,000 چلو اس کوڈ کو چلانے کے. 131 00:06:41,000 --> 00:06:43,000 دیکھو کیا ہوا. 132 00:06:43,000 --> 00:06:47,000 ڈور ہم ہماری ڈھیر بلاکس دونوں میں جمع طباعت درست شائع. 133 00:06:47,000 --> 00:06:49,000 کچھ غلط نہیں بالکل لگتا ہے. 134 00:06:49,000 --> 00:06:52,000 تاہم، اپنے کوڈ میں واپس جاؤ اور 135 00:06:52,000 --> 00:06:55,000 لائن تبصرہ جہاں ہم نے cs50 پتھروں کاپی کرنے کے 136 00:06:55,000 --> 00:06:59,000 دوسری میموری بلاک میں، ٹی کی طرف سے کی طرف اشارہ ہے. 137 00:06:59,000 --> 00:07:02,000 اب، جب ہم اس کوڈ کو چلاتے ہیں، ہم کرنا چاہیے 138 00:07:02,000 --> 00:07:06,000 صرف دیکھ کر پہلی میموری بلاک کی پرنٹ. 139 00:07:06,000 --> 00:07:09,000 واہ، اگرچہ ہم نے STR کاپی نہیں 140 00:07:09,000 --> 00:07:12,000 دوسری ڈھیر بلاک میں کسی بھی حروف، T کی طرف سے ایک کی طرف اشارہ کیا، 141 00:07:12,000 --> 00:07:15,000 ہم نے ایک پرنٹ باہر لے جائیں. 142 00:07:15,000 --> 00:07:18,000 بے شک، سٹرنگ ہم ہماری پہلی بلاک میں بھرے 143 00:07:18,000 --> 00:07:21,000 پہلے بلاک اور دوسرے بلاک میں overran، 144 00:07:21,000 --> 00:07:23,000 سب کچھ ٹھیک لگ رہے ہو. 145 00:07:23,000 --> 00:07:26,000 Valgrind، اگرچہ، ہمیں سچی کہانی بتاتا ہے. 146 00:07:26,000 --> 00:07:28,000 ہم وہاں جا رہے ہیں. 147 00:07:28,000 --> 00:07:32,000 ان جعلی سب پڑھتا اور لکھتا ہے. 148 00:07:32,000 --> 00:07:36,000 >> غلطی کی ایک اور قسم کی ایک مثال کے طور پر نظر آتے ہیں. 149 00:07:36,000 --> 00:07:39,000 یہاں ہم بلکہ بدقسمتی سے کچھ کرتے ہیں. 150 00:07:39,000 --> 00:07:41,000 ہم ڈھیر پر ایک int کے لئے جگہ پر قبضہ، 151 00:07:41,000 --> 00:07:45,000 P - - اس جگہ کی طرف اشارہ ہے اور ہم ایک int پوائنٹر ابتدا. 152 00:07:45,000 --> 00:07:48,000 تاہم، جبکہ ہماری پوائنٹر initialized ہے 153 00:07:48,000 --> 00:07:52,000 اعداد و شمار ہے کہ اس کی طرف اشارہ ہے جو کچھ بھی ردی ڈھیر کے اس حصے میں ہے. 154 00:07:52,000 --> 00:07:55,000 ، تو جب ہم int میں میں ڈیٹا لوڈ 155 00:07:55,000 --> 00:07:57,000 ہم تکنیکی طور پر میں، ابتدا 156 00:07:57,000 --> 00:08:00,000 لیکن ہم ردی اعداد و شمار کے ساتھ ایسا کرتے ہیں. 157 00:08:00,000 --> 00:08:03,000 کال، زور جو ایک ہاتھ بگ میکرو ہے 158 00:08:03,000 --> 00:08:06,000 aptly نام لائبریری زور میں وضاحت کی گئی ہے 159 00:08:06,000 --> 00:08:09,000 اسقاط حمل پروگرام اگر اس کے ٹیسٹ حالت ناکام ہو جاتا ہے. 160 00:08:09,000 --> 00:08:11,000 یہ ہے، اگر میں 0 نہیں ہے. 161 00:08:11,000 --> 00:08:14,000 ڈھیر کی جگہ میں کیا تھا پر منحصر ہے، پی کی طرف سے کی طرف اشارہ، 162 00:08:14,000 --> 00:08:18,000 اس پروگرام کو کبھی کبھی کام اور دیگر اوقات میں ناکام ہو سکتا ہے. 163 00:08:18,000 --> 00:08:20,000 اگر یہ کام کرتا ہے، ہم صرف خوش ہو رہے ہیں. 164 00:08:20,000 --> 00:08:24,000 سنکلک اس خامی کو پکڑنے، لیکن اس بات کا یقین مرضی Valgrind. 165 00:08:24,000 --> 00:08:28,000 وہاں ہم اس ردی کے ڈیٹا کی ہماری کے استعمال کے نتیجے میں پڑنے والے غلطی دیکھیں. 166 00:08:28,000 --> 00:08:32,000 >> ، جب آپ کو ڈھیر میموری مختص لیکن یہ deallocate نہیں یا یہ مفت 167 00:08:32,000 --> 00:08:34,000 جو ایک لیک کہا جاتا ہے. 168 00:08:34,000 --> 00:08:37,000 ، ایک چھوٹا سا پروگرام ہے، الپکالک چلتا ہے اور فوری طور پر exits کے لئے، 169 00:08:37,000 --> 00:08:39,000 لیک کافی نقصان نہیں پہنچاتی ہیں، 170 00:08:39,000 --> 00:08:42,000 لیکن بڑے سائز اور / یا لمبی عمر کا ایک منصوبہ کے لئے، 171 00:08:42,000 --> 00:08:46,000 بھی ایک چھوٹی سی درار اہم کچھ میں کمپاؤنڈ کر سکتے ہیں. 172 00:08:46,000 --> 00:08:49,000 CS50 کے لئے، ہم آپ سے امید رکھتے ہیں 173 00:08:49,000 --> 00:08:51,000 ڈھیر میموری کہ آپ مختص کی سب آزاد کی دیکھ بھال، 174 00:08:51,000 --> 00:08:54,000 کیونکہ ہم آپ کو مہارت دستی عمل کو مناسب طریقے سے سنبھال کی تعمیر کرنا چاہتے ہیں 175 00:08:54,000 --> 00:08:56,000 سی کی طرف سے کی ضرورت 176 00:08:56,000 --> 00:08:59,000 ایسا کرنے کے لئے، آپ کے پروگرام میں ایک عین مطابق ہونا چاہئے 177 00:08:59,000 --> 00:09:03,000 malloc اور مفت کال کے درمیان ایک ایک خط و کتابت. 178 00:09:03,000 --> 00:09:06,000 خوش قسمتی سے، Valgrind میموری لیک کے ساتھ تم بھی مدد کر سکتے ہیں. 179 00:09:06,000 --> 00:09:09,000 نامی ایک leaky leak.c پروگرام ہے کہ مختص 180 00:09:09,000 --> 00:09:13,000 ڈھیر پر جگہ، اس پر لکھتے ہیں، لیکن اس کی نہیں آزاد. 181 00:09:13,000 --> 00:09:16,000 ہم اس Valgrind کے تحت اسے چلانے بنائیں کے ساتھ مرتب، 182 00:09:16,000 --> 00:09:18,000 اور ہم دیکھتے ہیں کہ، جب ہم کوئی میموری کی غلطیوں، 183 00:09:18,000 --> 00:09:20,000 ہم ایک لیک ہے. 184 00:09:20,000 --> 00:09:23,000 16 بائٹس یقینی طور پر کھو ہیں، 185 00:09:23,000 --> 00:09:27,000 کا مطلب یہ ہے کہ اس یاد پوائنٹر دائرہ کار میں نہیں تھا جب پروگرام سے باہر ہے. 186 00:09:27,000 --> 00:09:30,000 اب، Valgrind ہمیں نہیں دے لیک کے بارے میں معلومات کے ایک ٹن، 187 00:09:30,000 --> 00:09:35,000 لیکن اگر ہم اس چھوٹی سی بات کو نوٹ کیجیئے کی پیروی ہے کہ وہ اپنی رپورٹ کے سب سے نیچے دیئے کی طرف نیچے دیتا ہے 188 00:09:35,000 --> 00:09:38,000 ساتھ rerun - لیک چیک کرنے کے لیے مکمل = 189 00:09:38,000 --> 00:09:41,000 لیک میموری کی مکمل تفصیلات کو دیکھنے کے لئے، 190 00:09:41,000 --> 00:09:44,000 ہم مزید معلومات حاصل کریں گے. 191 00:09:44,000 --> 00:09:46,000 اب،، ڈھیر کے خلاصے میں 192 00:09:46,000 --> 00:09:50,000 Valgrind ہمیں بتاتا ہے جہاں میموری جو کھو گیا تھا ابتدائی طور پر مختص کیا گیا ہے. 193 00:09:50,000 --> 00:09:52,000 ، جیسا کہ ہم منبع کوڈ میں تلاش کرنے سے جانتے ہیں 194 00:09:52,000 --> 00:09:55,000 Valgrind ہمیں مطلع کہ ہم نے میموری لیک 195 00:09:55,000 --> 00:09:58,000 malloc leak.c 8 لائن پر کال کے ساتھ مختص 196 00:09:58,000 --> 00:10:00,000 مرکزی تقریب میں. 197 00:10:00,000 --> 00:10:02,000 خوبصورت نفٹی. 198 00:10:02,000 --> 00:10:04,000 >> Valgrind ان اصطلاحات کا استعمال کرتے ہوئے لیک categorizes: 199 00:10:04,000 --> 00:10:07,000 یقینی طور پر کھو - اس ڈھیر مختص میموری ہے 200 00:10:07,000 --> 00:10:10,000 جو پروگرام نہیں رہ پوائنٹر ہے. 201 00:10:10,000 --> 00:10:14,000 Valgrind جانتا ہے کہ تم نے ایک بار پوائنٹر تھا لیکن کے بعد سے اس کے ٹریک کھو دیا ہے. 202 00:10:14,000 --> 00:10:17,000 یقینی طور پر یہ میموری لیک ہے. 203 00:10:17,000 --> 00:10:20,000 بالواسطہ طور پر کھو - اس ڈھیر مختص میموری ہے 204 00:10:20,000 --> 00:10:24,000 جس میں اس کا صرف اشارہ بھی کھو رہے ہیں. 205 00:10:24,000 --> 00:10:27,000 مثال کے طور پر، اگر آپ کو ایک لنک کی فہرست کا پہلا نوڈ اپنے پوائنٹر کھو دیا ہے، 206 00:10:27,000 --> 00:10:30,000 تو پہلے نوڈ خود یقینی طور پر ختم ہو جائے گا، 207 00:10:30,000 --> 00:10:34,000 جبکہ ابھی بعد نوڈس بالواسطہ طور پر ختم ہو جائے گی. 208 00:10:34,000 --> 00:10:37,000 شاید کھو - اس ڈھیر مختص میموری ہے 209 00:10:37,000 --> 00:10:41,000 جس Valgrind اس بات کا یقین کر لیں کہ کہ کیا پوائنٹر ہے یا نہیں نہیں ہو سکتا. 210 00:10:41,000 --> 00:10:44,000 پھر بھی لگ رہا ڈھیر مختص میموری ہے 211 00:10:44,000 --> 00:10:47,000 جو پروگرام اب بھی باہر نکلیں پوائنٹر ہے، 212 00:10:47,000 --> 00:10:50,000 جس کا عام طور پر مطلب یہ ہے کہ ایک عالمی متغیر پوائنٹس. 213 00:10:50,000 --> 00:10:53,000 ان لیک کی جانچ پڑتال کرنے کے لئے، آپ کو اختیار کو شامل کرنے کے لئے بھی پڑے گا 214 00:10:53,000 --> 00:10:55,000 - اب بھی لگ رہا = ہاں 215 00:10:55,000 --> 00:10:58,000 Valgrind کی فریاد میں. 216 00:10:58,000 --> 00:11:01,000 >> یہ مختلف مقدمات میں ان کی صفائی کرنے کے لئے مختلف حکمت عملی کی ضرورت سکتے ہیں، 217 00:11:01,000 --> 00:11:05,000 لیکن لیک کو ختم کیا جانا چاہئے. 218 00:11:05,000 --> 00:11:08,000 بدقسمتی سے، لیک کا تعین کرنا مشکل ہو سکتا ہے، 219 00:11:08,000 --> 00:11:11,000 مزید مفت غلط کال اپنے پروگرام کو اڑا کر سکتے ہیں. 220 00:11:11,000 --> 00:11:14,000 مثال کے طور پر، اگر ہم invalid_free.c میں دیکھو، 221 00:11:14,000 --> 00:11:18,000 ہم خراب میموری deallocation کی ایک مثال کے طور پر دیکھتے ہیں. 222 00:11:18,000 --> 00:11:21,000 پورے بلاک کو آزاد کرنے کے لئے ایک کال کیا ہونا چاہئے 223 00:11:21,000 --> 00:11:24,000 میموری کا int_block کی طرف سے کی طرف اشارہ، 224 00:11:24,000 --> 00:11:27,000 بجائے ایک int درجے کے ہر حصے کو آزاد کرنے کی کوشش بن 225 00:11:27,000 --> 00:11:29,000 انفرادی طور پر میموری کی. 226 00:11:29,000 --> 00:11:32,000 یہ catastrophically ناکام ہو جائے گا. 227 00:11:32,000 --> 00:11:34,000 بوم! کیا میں ایک خرابی ہے. 228 00:11:34,000 --> 00:11:36,000 یہ ضرور اچھی نہیں ہے. 229 00:11:36,000 --> 00:11:39,000 اگر آپ نے غلطی کی اس قسم کے ساتھ پھنس گئے، اگرچہ، کر رہے ہیں اور آپ کہاں دیکھنا نہیں جانتے، 230 00:11:39,000 --> 00:11:41,000 اپنے نئے سب سے اچھے دوست پر واپس آتے ہیں. 231 00:11:41,000 --> 00:11:44,000 تم نے یہ اندازہ لگایا - Valgrind. 232 00:11:44,000 --> 00:11:47,000 ، Valgrind ہمیشہ کی طرح جانتا ہے، بالکل کیا ہے. 233 00:11:47,000 --> 00:11:50,000 alloc اور آزاد شمار سے مماثل نہیں ہے. 234 00:11:50,000 --> 00:11:52,000 ہم 1 alloc اور 4 آزاد ہے. 235 00:11:52,000 --> 00:11:55,000 Valgrind بھی ہمیں بتاتا ہے جہاں پہلے بری مفت کال - 236 00:11:55,000 --> 00:11:58,000 وہ جو blowup کو متحرک - سے آ رہا ہے - 237 00:11:58,000 --> 00:12:00,000 16 لائن. 238 00:12:00,000 --> 00:12:03,000 جیسا کہ آپ دیکھ، برا مفت کالیں واقعی بہت خراب ہیں، 239 00:12:03,000 --> 00:12:05,000 تاکہ ہم آپ کے پروگرام لیک دے مشورہ ہے 240 00:12:05,000 --> 00:12:08,000 جبکہ آپ کو فعالیت درست ہونے پر کام کر رہے ہیں. 241 00:12:08,000 --> 00:12:12,000 لیک کے لئے تلاش شروع کر کے بعد ہی اپنے پروگرام کو مناسب طریقے سے کام کر رہا ہے، 242 00:12:12,000 --> 00:12:14,000 بغیر کسی دوسرے کی غلطیوں کو. 243 00:12:14,000 --> 00:12:16,000 >> اور یہ کہ ہم نے اس ویڈیو کے لئے مل گیا ہے. 244 00:12:16,000 --> 00:12:18,000 اب کیا آپ کے لئے انتظار کر رہے ہیں؟ 245 00:12:18,000 --> 00:12:21,000 چلانے کے آپ کے پروگراموں پر ابھی Valgrind جاؤ. 246 00:12:21,000 --> 00:12:25,000 میرا نام نیٹ Hardison ہے. یہ CS50 ہے. [CS50.TV]