[موسیقی بجانے] DAVID J. MALAN: ٹھیک ہے. یہ CS50 ہے. اور اس ہفتے 5 کا آغاز ہے. اور آپ کو محسوس کیا ہو سکتا کے طور پر، مال کی کچھ تھوڑا زیادہ ہو رہی ہے پیچیدہ، تھوڑا denser کی. اور یہ خاص طور پر اگر، بہت آسان ہے آپ کو کچھ وقت کے لئے کی عادت میں رہا ہوں سب سے زیادہ نیچے scribble کرنے کی کوشش کرنے کے لئے ہم ایسا کچھ بھی، ہم کلاس میں کہہ رہے ہیں. لیکن یہ شاید نہیں ہے، احساس مثالی تعلیمی نقطہ نظر مواد کے اس قسم کے سیکھنے کے لئے، اور مواد کی عام طور پر. اور اس طرح ہم خوش ہیں کہ CS50 اپنے Gheng اعلان گونگ تیار کرنے کے لئے شروع کر دیا ہے نوٹوں کی وہیت سیٹ کورس کے لئے، کی امید جس میں ان،، میں سے ایک ہے نہ صرف ایک کے طور پر کام حوالہ اور وسائل مواد کا جائزہ لینے اور جانے کے لئے واپس مواد کے ذریعے ہو سکتا ہے کہ ، آپ کے ارد گرد پہلی بار فرار لیکن بھی تو ہے کہ اپنے سروں جا سکتا ہے نیچے، جب اس سے زیادہ لیکچر کے لئے وقت آتا ہے، آپ کو مشغول کر سکتے ہیں تاکہ زیادہ سوچ، کے طور پر زیادہ scribbly کی مخالفت. ساتھ اس نے کہا، تم پر تلاش کر لیں گے کیا ویب سائٹ کے طور پر اس طرح کے دستاویزات ہے. اور نوٹس، سب سے اوپر بائیں میں، وہاں ہے نہ صرف مواد کی ایک میز، بلکہ وقت کوڈ کہ فوری طور پر آپ کود جائے گا مناسب حصہ ویڈیو میں آن لائن. اور یہاں کیا چانگ کیا ہے ، بنیادی طور پر، دستاویزی ہے کیا اس میں ہوا خاص طور پر لیکچر. اور لیکچر کے بہت سے ہیں پہلے سے ہی اب اس یو آر ایل کے ساتھ. اور ہم باقی پوسٹ کرنے کے لیے جاری رکھیں گے اس ہفتے کے آخر تک ان میں سے، تاکہ وسائل کا فائدہ اٹھانے ہے. تو مزید ado کے بغیر، ہم واپس چھیل کرنا شروع کر دیا کیا گیا ہے کہ پرت کچھ وقت کے لئے تار. اور ہم نے ایک تار کیا کہا اصل میں گزشتہ ہفتے ہے؟ تو چار ستارہ. اور چار ستارہ، ٹھیک ہے، کہ واقعی مطلب تھا؟ ویسے، اس وقت، ہم نے کیا ہے تو ایک تقریب بلا گیا، GetString کے، اور ذخیرہ کرنے کی طرح نام نہاد واپسی ایک میں GetString کی قدر متغیر یہ کہا جاتا ہے ہم لکھ رہا ہوں تار کی قسم وہاں اوپر کوڈ کے مطابق. میں دیکھ رہا ہوں اور جب یہ صرف میری لکھاوٹ یہاں بڑائی میں یہ ہے کہ کس طرح ظالمانہ احساس کرتے. تاہم، کی ہے کہ فرض، دائیں ہاتھ کی طرف پر ، بہر حال، ایک مناسب ہے کیا کی عکاسی یہ سب چل رہا GetString کے ساتھ وقت. GetString کے، کورس کے، ایک تار ہو جاتا ہے. لیکن کیا یہ واقعی مطلب ہے؟ اس کا ایک حصہ ہو جاتا ہے کا مطلب ہے کہ آپریٹنگ سسٹم سے میموری ایک تقریب بلا کی طرف سے، malloc کہا. لیکن اس پر میں بعد. اور پھر یہ معمور میموری کے اس حصہ خط کے ساتھ صارف ، میں ٹائپ کی طرف سے کے بعد، کورس کے، شہوت انگیز null کردار، یا الٹا سلیش آخر میں صفر. دریں اثنا، بائیں ہاتھ کی طرف پر اس کہانی کا، اس وقت، ہم کی طرح، ایک متغیر کا اعلان کر دیا گیا ہے. اور یہ کہ متغیر اب کیا ہے ایک پوائنٹر بلا شروع ہو جائے گا. جس کے اندر ایک باکس نہیں ہے ہم سٹرنگ ڈال، Daven، SE فی، بلکہ ہم اس چوک میں ڈال دیا بائیں بالکل وہی باکس؟ جی ہاں؟ سامعین: کا پتہ جہاں یہ یاد میں واقع ہے. DAVID J. MALAN: بالکل. Daven جہاں کا پتہ میموری میں واقع ہے. اور Daven تمام، واقع ہے جہاں فی SE، لیکن خاص طور پر پتہ کیا؟ جی ہاں؟ سامعین: پہلا کردار. DAVID J. MALAN: پہلا کردار اس معاملے میں Daven، جس میں، میں منمانے تھا تجویز اور unrealistically 1، Ox1، جس میں صرف کا مطلب ہے کہ 1 شش اعشاری نمبر. لیکن یہ شاید جا رہا ہے ایک بہت بڑی تعداد ہو جائے ہم اپنی طرف متوجہ ہو سکتا ہے کہ سابقہ ​​کے طور پر ایک 0x سے، ایک شش اعشاری کے کردار کی نمائندگی. اور ہم جہاں معلوم کرنے کی ضرورت نہیں ہے کیونکہ Daven کے حروف کے باقی کی وجہ سے، کیا ہیں سادہ ڈیزائن فیصلہ کئی سال پہلے بنایا گیا تھا کہ؟ جی ہاں؟ سامعین: الٹا سلیش 0. DAVID J. MALAN: جی ہاں، بالکل. الٹا سلیش 0 میں اگرچہ، اگر آپ کی اجازت دیتا ہے لکیری وقت، سٹرنگ گزرنا، بائیں سے دائیں جانب چلنا، لوپ کے لئے، یا ایک وقت کے ساتھ لوپ، یا کچھ اور طرح کہ، اور یہاں، اوہ، کا تعین یہ خاص طور پر تار کے آخر ہے. میں صرف پتے کے ساتھ تو ایک تار کا آغاز، ہم مکمل طور پر حاصل کر سکتے ہیں یہ، یہ سب کیونکہ جبکہ، ایک تار صرف ایک چار ستارہ رہا ہے. تو اس کا استعمال کرتے ہوئے جاری رکھنے کے لئے یقینی طور پر ٹھیک ہے CS50 لائبریری اور اس کا اس تجرید، تو بات، لیکن ہم لیں گے بالکل دیکھنے کے لئے شروع کیا چل رہا ہے اس پورے وقت کے نیچے. تو آپ کو اس مثال کو یاد کر سکتے، بھی، آخری وقت سے، 0 کا موازنہ، جو دراصل موازنہ نہیں کیا. لیکن ہم اس کو حل کرنے کے لئے شروع. لیکن شاید ایک رفریشر، میں نے کسی کو دلچسپی ہو سکتی ہے گلابی ہاتھی میں آج، بھی چانگ کی طرف سے بنایا؟ کس طرح سامنے آپ کے بارے میں؟ [اشراوی]. پر چلو. اور اس دوران میں، آپ کو آنے کے طور پر، چلو صرف ایک لمحے کے لئے غور کیا اس کوڈ کو اصل کر رہا تھا. یہ دو متغیر کو اعلان ہے سب سے اوپر، اور ٹی، اور GetString بلا. یہ ایک بہت صارف دوستانہ پروگرام نہیں ہے یہ آپ کو بتا نہیں ہے کیا کرنا ہے. لیکن صرف ہم ہیں فرض کرتے ہیں رسیلی حصہ پر توجہ مرکوز کی. کے برابر ہے اور پھر ہم کیا کریں ، اس printf کہنا چاہئے T برابر، آپ ایک ہی بات ٹائپ. ہیلو. آپ کا نام کیا ہے؟ سے Janelle: سے Janelle. DAVID J. MALAN: سے Janelle، آپ سے مل کر اچھا لگا. میں آپ کا چیلنج تو اس ہاتھی کے لئے ہاتھ سب سے پہلے ہم کیا کی ایک تصویر کو اپنی طرف متوجہ کرنے کے لئے ہے ان کی پہلی دو میں نمائندگی کیا جا رہا ہے لائنوں. تو اور ٹی ہو سکتا ہے کس طرح کی سکرین پر کی نمائندگی کی؟ اور آپ کو صرف کے ساتھ اس کو اپنی طرف متوجہ کر سکتے ہیں اس بڑے پردے پر اپنی انگلی. تو کرنے دو حصوں ہے اس مساوات کی دونوں اطراف. تو وہاں بائیں طرف کی ہے، اور تو حق پر GetString کے. اور پھر T، بائیں پر ہے اور پھر حق پر GetString کے. تو ہم کس طرح شروع کر سکتے ہیں ایک تصویر ڈرائنگ کہ کیا ہو رہا ہے کی نمائندگی کرتا ہے یہاں یاد میں، آپ کو کہیں گے؟ اور مجھے آپ کی وضاحت کی اجازت دیں آپ کے طور پر آپ کیا کر رہے ہیں. سے Janelle: ٹھیک ہے. ویسے، سب سے پہلے، اس سے پوچھ کیا جائے گا آپ کو ان پٹ سٹرنگ حاصل کرنے کے لئے. اور یہ معذرت، اوہ store-- گا. DAVID J. MALAN: ٹھیک ہے. اچھا. اور یہ کیا کہا جاتا ہے؟ ٹھیک ہے، اوہ. بڑھتے رہو. میں رکاوٹ کا مطلب نہیں تھا. سے Janelle: معذرت. تو یہ ان پٹ اس میں کریں گے ایڈریس یقین نہیں of--. میں بالکل نمبر یاد نہیں کر سکتے ہیں، لیکن میں یہ 0 کے ساتھ شروع کیا گیا تھا یقین ہے. DAVID J. MALAN: یہ، ٹھیک ہے میں تعداد کی وجہ سے، تو کوئی درست جواب نہیں ہے. سے Janelle: 0 آرک کے ساتھ شروع ہو رہا ہے. DAVID J. MALAN: ٹھیک ہے، تو عنصر 0. اس بات کا یقین. سے Janelle: اور پھر اگر صرف ایک دو خط کی طرح DAVID J. MALAN: ٹھیک ہے، آپ کو واپس. سے Janelle: تو عنصر 0، اور تو عنصر 1 یا 2 عنصر. جس ٹکڑا اور DAVID J. MALAN: تصویر آپ ابھی ڈرائنگ کر رہے ہیں؟ GetString کی کال؟ یا S کا اعلان؟ سے Janelle: اعلان ے کی، مجھے یقین ہے. اوہ، GetString کے، یہ کیونکہ ہر [میں inputted رکھا جائے؟ علاقے. ؟] DAVID J. MALAN: اچھا. بالکل ٹھیک. یہاں تک کہ یہ مؤثر طریقے سے اگرچہ ایک سرنی، یاد واپس، ہم ایک تار واپس جب، ہم کر سکتے ہیں 01 اور 2 کا استعمال کرتے ہوئے کہ سٹرنگ میں انڈیکس. تکنیکی طور پر، یہ شاید ہے انفرادی پتوں کی طرف سے نمائندگی، لیکن وہ ٹھیک ہے. تو، لگتا ہے کہ اگر میں صرف تیزی سے کر سکتے ہیں ہم نے چھوڑ دیا جہاں پر آگے آخری بار، میں سے ایک ڈور، ایک بی ای G تھا الٹا سلیش 0، اس طرح کی نمائندگی کے بغیر کی ان پٹ، ہم کس طرح اب کی نمائندگی کر سکتے ہیں؟ یہ ہے کہ میموری ہے GetString کی طرف سے واپس کیا گیا؟ سے Janelle: یہ ہو جائے گا ایک آرک کی طرف سے نمائندگی؟ DAVID J. MALAN: ایک آرک کی طرف سے؟ نہیں، ٹھیک ہے. ، صرف pictorially کا، کا کہنا ہے کہ مجھے آگے بڑھو اس کی ہے تو،، اس تجویز GetString کی واپسی کی قیمت ہے. اور تم 0، 1، 2، کے طور پر یہ تیار کی ہے جس میں ، بالکل مناسب ہے کیونکہ ہم اس طرح کے طور پر سٹرنگ میں انڈیکس، کر سکتے ہیں. لیکن صرف کے ساتھ مطابقت کرنے کے لئے آخری بار، مجھے جانے دو آگے اور منمانے اس تجویز ایڈریس 1 ہے، یہ پتہ ہے 2، یہ تو آگے ایڈریس 3، اور ہے. اور اس طرح، صرف سپر ہونا واضح، کیا جا رہا ہے اس کا ایک نتیجہ کے طور پر میں جانے کے لئے کوڈ کی پہلی لائن، آپ کو کہیں گے؟ سے Janelle: ایڈریس 1؟ DAVID J. MALAN: بالکل. تو 0x1 حل. اور اس دوران، مجھے جانے دو آگے اور آپ نے کیا کیا ہے کے زیادہ سے زیادہ نقل اور یہاں اپنے اپنے ٹی شامل. میں Gabe کی میں ٹائپ کرنے کے لئے تھے پھر، ایک دوسری بار، GetString کے ساتھ حوصلہ افزائی کی جب، جہاں، کورس کے، کے بغیر جانے کے لئے جا رہا ہے؟ ویسے، presumably-- سے Janelle: یہاں پر کی طرح؟ DAVID J. MALAN: جی ہاں. سے Janelle: یا یہ ایک ہی خانوں میں بھی ہے؟ DAVID J. MALAN:، مجھے جی ہاں، تجویز کرتے ہیں بالکل، ان اضافی خانوں میں تو. لیکن اب کیا اہم ہے، یہاں تک کہ، یہ ہے کہ میں ان بہت قریب تیار کی ہے اگرچہ مل کر 0x1، اس حقیقت میں 0x2-- ہے، اب یہ، ایڈریس 0x10 ہو سکتا ہے مثال کے طور پر، اور 0x11، اور 0x12، اور تو آگے. اور اس طرح، اگر یہ بات ہے، کیا ٹی میں یہاں ختم کرنے کے لئے جا رہا ہے؟ سے Janelle: 0x10؟ DAVID J. MALAN: بالکل. تو 0x10. اور تو اب، آخری سوال. آپ، دور کی طرف سے، کام کرنے کے لئے تھا اس طرح اب تک ایک ہاتھی کے لئے سب سے مشکل. اب تک، میں نے کوڈ ھیںچو پھر، میں جب، لائن تین میں، کے برابر ہے T برابر ہے، میں واقعی میں کیا ہوں ہم یہاں تیار کی ہے موازنہ ہے؟ سے Janelle: دو پتے؟ DAVID J. MALAN: بالکل. تو میں ٹی کے برابر برابر ہے ہے کہہ رہا ہوں؟ دوسرے الفاظ میں، 10 کے برابر برابر 1 ہے؟ اور کورس کے، واضح جواب اب کوئی، ہے. اور اس طرح اس پروگرام کے آخر میں ہے آپ کیا کہیں گے، پرنٹ کرنے کے لئے جا رہے ہیں؟ سے Janelle: یہ، ہو جائے گا آپ ایک ہی بات ٹائپ؟ DAVID J. MALAN: تو 1 ہے اور ٹی 10 ہے؟ سے Janelle: آپ مختلف چیزیں ٹائپ. DAVID J. MALAN: بالکل. آپ کو مختلف چیزیں ٹائپ. ٹھیک ہے. تو تعریف کی ایک گول، یہاں، اگر ہم کر سکتے. [تالیاں] یہ دردناک تھا. میں جانتا ہوں. اچھی طرح سے کیا. تو اب چلو دیکھتے ہیں اگر ہم نہیں کر سکتے ہیں طے کیا تھا کے علاوہ چڑھاو. اور ظاہر کی، ہم this-- مقرر جب جس میں اب green-- میں نمائندگی کریں گے ہم یہاں اضافہ کے ایک جوڑے کے کیا. سب سے پہلے، صرف ایک وویک کے طور پر میں سب سے پہلے جانچ پڑتال کر رہا ہوں، چیک کے برابر شہوت انگیز null اور ٹی شہوت انگیز null برابر ہے. اور صرف صاف ہو جائے، جب ہو سکتا ہے یا T اس طرح کے کوڈ میں نل ہو؟ جب یا T نل ہو سکتا ہے. جی ہاں؟ سامعین: [اشراوی]. DAVID J. MALAN: بالکل. سٹرنگ صارف ہے کہ تو میں ٹائپ راستہ بہت طویل ہے میموری میں فٹ، یا کچھ کرنے کے لئے اس طرح عجیب کونے کیس، ہم دیکھیں گے کے طور پر لفظی،، GetString کے آج، اس کی دستاویزات میں، اس کے طور پر شہوت انگیز null واپس آ جائیں گے کا کہنا ہے کہ ایک خصوصی سینٹینل قیمت، یا صرف کی طرح ایک خاص علامت کہ کچھ غلط ہو گیا ہے. تو ہم نے کے لئے جانچ کرنا چاہتے ہیں یہ باہر کر دیتا ہے، کیونکہ کہ کہ شہوت انگیز null ایک بہت ہی خطرناک قیمت ہے. اکثر ایسا ہوتا ہے، آپ کے ساتھ کچھ کرنے کی کوشش کرتا ہے تو شہوت انگیز null گزر ایک تقریب شامل ان پٹ کے طور پر، اس تقریب instance-- لئے بہت اس کے ساتھ، حادثے اور گا کر سکتے ہیں، اپنے پورے پروگرام کو نیچے لے. تو اس تیسری لائن اب صرف ایک وویک ہے اگر آپ،، غلطی چیکنگ چیک. اس کے لئے اب ایک اچھی عادت ہے ہمیں کسی بھی وقت میں حاصل کرنے کے لئے ہم ایک قیمت استعمال کرنے کی کوشش ہے کہ ، ممکنہ طور پر، نل ہو سکتا ہے. اب، یہاں چوتھی لائن میں، "اگر strcmp کے (ے، T)،" ٹھیک ہے، کا حوالہ دیتے ہوئے ہے؟ ٹھیک ہے، ہم اس کے بہت اور succinctly ایک تھا تار کے مقابلے کے لئے نام کی تقریب. اور زندگی میں اس کا مقصد آپس میں موازنہ کرنے کے لئے ہے دوسرا اس کے خلاف اپنی پہلی دلیل، لیکن نہیں ان کے پتوں کی شرائط میں، ہم ایک لمحے غیر ارادی طور پر کیا پہلے سرخ کوڈ کے ساتھ، لیکن بلکہ ان دونوں کا آپس میں موازنہ انسانی بدیہی میں تاروں اس کے خلاف، اس کا موازنہ کی طرف سے راستہ، یہ، اس کے خلاف، اور اس کے خلاف تو روکنے کے جب ایک اور اگر یا میری انگلیوں کے دونوں ایک الٹا سلیش 0 مار دیتی ہے. تو کسی سال پہلے نافذ strcmp کے فعالیت ہمارے لئے لاگو کرنے کے لئے ہم ملا کریں گے امید ہے کہ صرف دو سادہ اقدار کا موازنہ کر کے. اب واضح طور سے، میں نے ڈرائنگ رکھو ان مختلف تعداد کے. لیکن حقیقت میں کیا گیا ہے، ہے پورے وقت ان کی قضاء. اور تو مجھے آگے بڑھو اور ان باہر Scribble کی ایک نقطہ بنانے کے لئے کہ، آخر میں دن اور آگے بڑھنے، ہم واقعی پرواہ نہیں کر رہے ہیں کیا چیزیں اصل میں ہیں سے خطاب یاد میں. تو میں نے ان کو اپنی طرف متوجہ کرنے کے لئے نہیں جا رہا ہوں اتنا اب نمبروں کی قسم، میں دور ایک یہ صرف ایک خلاصہ ہوں صرف تیر کے ساتھ زیادہ دوستانہ تھوڑا. دوسرے الفاظ میں، ایک پوائنٹر ہے، ٹھیک ہے،، صرف لفظی، اسے اپنی طرف متوجہ کرتے ہیں ایک پوائنٹر کے طور پر، ایک تیر کی طرف اشارہ ، کچھ خود سے اور کے بارے میں بھی بہت زیادہ فکر نہیں ان پتوں کی minutia جس، پھر، میں ویسے بھی بنا. لیکن ہم ان پتوں کو دیکھ لیں گے، کبھی کبھی، کوڈ ٹھیک جب. اب اس دوران، اس پروگرام یہاں اصلاحات، کورس کے، موازنہ کی طرف سے اس مسئلہ کو ان دو ڈور. لیکن ہم ایک اور مسئلہ میں بھاگ گیا. یہ کاپی سے تھا ، آخری بار پروگرام جس کے تحت، میں فائدہ کوشش کر رہا تھا ایک تار میں صرف پہلے کردار. لیکن علامات کیا تھا ہم جب آخری بار دیکھا ایک صارف کی طرح، ایک کی قیمت میں ٹائپ چھوٹے کے بغیر، کے لئے، پھر ہم، T میں کی تفویض وہاں تیسری لائن میں کے طور پر، اور پھر میں نے کرنے کی کوشش کی T بریکٹ 0 فائدہ؟ کا اثر کیا تھا T بریکٹ 0 یہاں کو تبدیل کرنے؟ سامعین: اس کی تبدیل. DAVID J. MALAN: جی ہاں، مجھے اچھی طرح، کی تبدیل. واقعی کیا جا رہا تھا کیونکہ؟ ویسے، میں نے صاف کر سکتے ہیں تو مجھے دیکھنے دو اس تصویر کو، کے طور پر مندرجہ ذیل ہے. کی ہے تو، ایک بار پھر، لفظ G، ایک، بی، ای، الٹا سلیش، 0، اور S ہم ایک باکس کے طور پر ڈرائنگ جاری رکھیں گے یہاں، لیکن کوئی پتے. کی چیزوں کو بنانا بند کرتے ہیں. صرف ایک تصویر کو اپنی طرف متوجہ کرتے ہیں دنیا کو آسان بنانے کے لئے. میں سٹرنگ ٹی کے ساتھ T اعلان، کہ میموری کے اس حصہ پیدا کرتا ہے. چوک 32 ہو سب سے زیادہ کمپیوٹرز میں بٹس. اصل میں، اگر تم نے کبھی ایک کے بارے میں سنا ہے کمپیوٹر، ایک 32 بٹ فن تعمیر ہونے واقعی بہروپ بات، کہ صرف یہ 32 بٹ کے پتے کا استعمال کرتا ہے کا مطلب ہے. اور ایک طرف تکنیکی طور پر، تم نے کبھی حیران ہے تو کیوں پرانے کمپیوٹرز، اصل میں اگر آپ رام کی بہت سی کے ساتھ سوپ ان کو کرنے کی کوشش کی، صرف ایک زیادہ سے زیادہ کر سکتے ہیں رام کے چار گیگا بائٹس کی، ساتھ ساتھ اس کے لفظی، کیونکہ، اپنے پرانے کمپیوٹر سکتا صرف 4 کے طور پر اعلی شمار ارب، 4 ارب بائٹس، اس کی وجہ سے 32 بٹ کا استعمال کرتے ہوئے کیا گیا تھا پتوں کے لئے تعداد. لیکن کسی بھی صورت میں، اس میں مثال کے طور پر، کہانی بہت آسان. T صرف ایک پوائنٹر ہے، یا واقعی میں ایک چار ستارہ، ارف سٹرنگ. اور کس طرح میں نے اس تصویر کو اپ ڈیٹ کرنا چاہتے ہیں اب کوڈ کی کہ دوسری لائن کے ساتھ، ڈاٹ کے بعد، ڈاٹ، ڈوٹ؟ جب میں سٹرنگ ٹی، کی نیم وقفہ برابر اس تصویر کس طرح تبدیل کرتا ہے؟ جی ہاں؟ سامعین: [اشراوی]. DAVID J. MALAN: جی ہاں. بالکل ٹھیک. میں صرف کی طرف سے ایک تیر ڈال اسی ایڈریس کے لئے ٹی باکس، میں اسی پہلے خط دیا. یا تکنیکی، تو یہ آدمی، 0x1 میں اب بھی تھے میں نے کے طور پر اگرچہ یہ ہے یہاں 0x1 اور یہاں 0x1. لیکن پھر، کسے پرواہ ہے پتے کے بارے میں؟ اب یہ فرق پڑتا ہے کہ صرف خیال ہے. تو یہ یہاں کیا ہو رہا ہے ہے. کورس کے، اگر آپ ایسا کرتے T بریکٹ تو سرنی سنکیتن ہے جو 0،، کے کورس اور واضح طور سے، یہ لگتا ہے یہاں ایک صف ہے کی طرح، لیکن اب یہ عجیب بات نہیں ہے. کہ پروگرامنگ زبان جانتے ہیں، C،، آپ اس خصوصیت کے پیش کرتا ہے جس کے تحت، ٹی ایک ہے یہاں تک کہ اگر پوائنٹر، یا ایک پوائنٹر ہے، اگر آپ اب بھی، کہ واقف استعمال کر سکتے ہیں آرام دہ اور پرسکون مربع بریکٹ سنکیتن پہلے عنصر پر جانے کے لئے، دوسرا عنصر، یا کسی بھی عنصر یا اس پوائنٹر اشارہ کر رہا ہے کہ کرنے کے لئے شاید، کیونکہ یہ ، اس معاملے میں کے طور پر، ہے کچھ صف کی طرف اشارہ. تو ہم یہ کیسے ٹھیک کروں؟ یہ ایک ہے جہاں سچ کہوں تو، یہ ہے پہلی نظر میں تھوڑا بھاری. لیکن یہاں ایک نئی اور بہتر ورژن ہے. تو سب سے پہلے، میں ہو رہی ہے CS50 لائبریری سے چھٹکارا، صرف شک کہ ہے کو بے نقاب کرنے کے لئے ایک چار ستارہ، صرف ایک متبادل. اور ٹی بھی ایک چار ستارہ ہے. لیکن کیا جا رہا ہے اس لائن کے دائیں ہاتھ کی طرف T ایک قدر تفویض کہاں ہے؟ malloc کی کیا ہے؟ یہ کیا strlen ہے؟ sizeof (چار) کیا ہے؟ کیوں heck اس کرتا ہے لائن نظر اتنی پیچیدہ؟ کیا یہ ایک اعلی سطح پر کر رہا ہے؟ کیا یہ ٹی میں ذخیرہ ہے؟ جی ہاں؟ سامعین: یہ آونٹیت ہے ایک میموری کی جگہ کی کچھ رقم. یہ، ذخیرہ کرنے کے لئے ہے مجھے لگتا ہے، حروف [اشراوی]. DAVID J. MALAN: کامل. کامل. یہ ایک مخصوص آونٹیت ہے میموری کی جگہ کی رقم ، شاید، مستقبل حروف ذخیرہ کرنے کے لئے. اور خاص طور پر، کی malloc اس وجہ سے کیا واپس آ رہا ہے؟ سامعین: [اشراوی] واپس آرہے ہیں؟ DAVID J. MALAN: بالکل. اس میموری کا پتہ واپس آنے، جس کہنے کی پسند ہیں طریقہ ہے، کا پتہ واپس کہ میموری کے پہلے بائٹ. مجھے یاد کرنے کے لئے ذمہ داری ہے کتنی میموری میں اصل مختص ہے یا کے لئے malloc پوچھا. اب وہ کتنا ہے؟ ویسے، نہیں ہے اگرچہ یہاں قوسین کی ایک بہت، malloc کی صرف ایک دلیل لیتا ہے. اور میں نے کے کی strlen کی وضاحت، تو دے رہا ہوں مجھے بہت سے شراکت کے میں ہیں کے طور پر، لیکن ایک شامل. کیوں؟ جی ہاں؟ سامعین: الٹا سلیش 0. DAVID J. MALAN: بالکل. ہم نے ایک چھوٹا سا اندرونی کرنا ہے. ایک الٹا سلیش ہے کیونکہ 0، ہم بہتر ہے کہ یاد کروں گا. دوسری صورت میں، ہم جا رہے ہیں ایک تار کے تخلیق کرنے کے لئے کہ خصوصی ٹرمنیٹر نہیں ہے. دریں اثنا، صرف سپر ہونا گدا، میں، sizeof (چار) ہے صرف اس صورت میں کسی کو میری چلتا نہیں CS50 آلات پر کوڈ، لیکن شاید ایک مختلف کمپیوٹر مکمل طور پر جہاں حروف کنونشن کی طرف سے، ایک بائٹ ہے، لیکن دو بائٹس، یا اس سے بڑا کچھ. یہ صرف سپر ہونے کے لئے ہے، غلطیوں کی سپر خلاف. اگرچہ، حقیقت میں، یہ ہے سب سے زیادہ امکان ایک 1 جا رہا. اب، اسی اثناء میں، میں آگے بڑھو اور نقل سٹرنگ، T بریکٹ میں ٹی بریکٹ کے برابر ہے. اور میں گزشتہ ہفتے کے لئے ملتوی ہو جائے گا منبع کوڈ پر کیا ہو رہا ہے کو دیکھنے کے لئے. اہم takeaway، اور لیکن وجہ میں، سبز میں کوڈ ڈال ، کہ بہت آخری سطر ہے کیونکہ T 0 بریکٹ، toupper کرتا برابر کا اثر ہے فائدہ جس میں سلک؟ ٹی اور / یا کی؟ کوڈ کی اس آخری لائن. کیا ہے کیونکہ، ٹی ، اس وقت ہوا میں تھوڑا سا ہے کہ آخری قدم کو توڑنا ہے تو، میں malloc فون تو کیا ہے، ہوا ہے میں بنیادی طور پر میموری کا ایک حصہ حاصل کرنے کے لئے کہ اصل کے طور پر ایک ہی سائز ہے، کہ ریاضی ہے کیونکہ میں نے کیا. میں ایڈریس T میں ذخیرہ کرنے رہا ہوں میموری کے اس حصہ کے. یہاں تک کہ یہ اچھا لگ رہا ہے، اگرچہ اور، بہت اچھا اور خالی، حقیقت کیا ہم کریں گے، وہاں ہے یہاں، بلا ردی کی ٹوکری اقدار رکھنے. میموری کے اس حصہ ہو سکتا ہے بہت سے پہلے اچھی طرح استعمال کیا گیا ہے، چند سیکنڈ، چند منٹ پہلے. تو بالکل تعداد نہیں ہو سکتا صرف حادثے کی طرف سے یا حروف،. لیکن انہوں نے جب تک، درست نہیں ہیں اپنے آپ کو میموری کے اس حصہ آباد اصل حروف کے ساتھ، کے طور پر میں وہاں لوپ کے لئے اس میں کیا. ٹھیک ہے؟ تو اب، عروج ان تین مثالیں کہ بظاہر، آخری وقت ٹوٹ گیا تھا اس سویپ مثال، اس تقریب احساس میں کام کیا یہ ایک اور بی تبدیل کہ. لیکن یہ کیا دوسرے معنوں میں کام نہیں کیا؟ جی ہاں؟ سامعین: [اشراوی]. DAVID J. MALAN: بالکل. میں اس تقریب کو فون کرنے کے لئے تھے مثال کے طور پر another-- سے، ، جہاں اہم طرح ایک تقریب سے میں کے طور پر، ایک متغیر، X اور Y ہے گزشتہ ہفتے کیا تھا، اسی کوڈ، اور میں X اور Y کے پاس ادل بدل، اور پھر Swap-- اس فون کرنے کے لئے، کورس کے، صحیح ورژن ہے ہم کے بارے میں رہے ہیں کیا ہے see-- یہ کام نہیں کیا. تو حل کیا ہے؟ ویسے، تو صرف ہونا صاف، مجھے جانے دو آگے and-- دوسرے یہاں مجھے ایک دو، اور دیکھیں میں آپ کو گزشتہ ایک، دکھا سکتے ہیں جو اگر میں تلاش کر سکتے ہیں تو دیکھتے ہیں in-- ہو جائے گا یہ اصلی fast-- ٹھیک، [اشراوی]. ٹھیک ہے، وہاں ہے. تو میں صرف ٹائپ کر رہا ہوں حکم کو نظر انداز. میں اس میں حاصل کرنے کے چاہتے ہیں آخری منٹ ایک مثال آخری بار، جس سے اب کوئی سویپ کہا جاتا ہے. تو کوئی سویپ کہاں ہے ہم آخری بار کو چھوڑ دیا جس کے تحت، میں سے initialized 1 X اور Y 2. میں تو 1 اور 2 میں گزر، سویپ فون. اور پھر اس تقریب کچھ معنوں میں کام کیا، لیکن یہ کوئی مستقل تھا X اور Y پر اثر. تو ہاتھ میں سوال اب، ہے ہم اصل میں اس مسئلہ کو حل کر سکتا ہوں؟ ہاتھ میں حل کیا ہے؟ ویسے، آج نئی ہے جس swap.c، میں، اختلافات کی ایک جوڑے کو نوٹس. X اور Y ایک ہی ہیں. لیکن کیا واضح طور پر ہے 25 لائن کے بارے میں مختلف؟ آپ کو یاد تو کیا، وہاں نیا ہے یہ ایک دوسرے پہلے کی طرح دیکھا ہے؟ سامعین: [اشراوی]. DAVID J. MALAN: جی ہاں. تو ampersands کے ایک نئی ٹکڑا ہیں نحو کے نہ صرف اس پروگرام میں، بلکہ عام طور پر CS50 میں. تاریخ کرنے کے لئے، مجھے نہیں لگتا ہم کسی بھی مثالیں دیکھی ہے یا واقعی کسی میں ان کے بارے میں بات کی تھی شاید، کہ preemptively، کے علاوہ دیگر تفصیل، حصے میں، اس طرح ایک ایمپرسینڈ. ٹھیک ہے، یہ ایمپرسینڈ ہے باہر کر دیتا ہے نئے نحو کے آخری ٹکڑے ٹکڑے کر کے ہم سیکھنے کے لئے جا رہے ہیں. اس کا مطلب یہ ہے کچھ متغیر کا پتہ. کیا پتہ ایکس رہتا ہے؟ لیکن Y کیا پتہ رہتا ہے؟ کیونکہ اگر پہلے بنیادی مسئلہ کہ x اور y گزر جا رہے تھے کیا گیا تھا ہم واقعی کرنا چاہتے ہیں کاپیاں، کے طور پر ایک ایسا خزانہ کی طرح کے ساتھ تبادلہ فراہم ہے جہاں X اور Y اصل کی طرف جاتا ہے کا نقشہ تاکہ، RAM میں ہیں تبدیل ھو نے والے اس نقشے کو فالو کر سکتا X یا Y جگہ پرتیک جہاں بھی اور کے پاس جاؤ اور اصل اقدار کو تبدیل 1 اور 2 وہاں. تو سویپ بھی تھوڑا سا تبدیل کرنے کی ضرورت. اور پہلی نظر میں، یہ طاقت چار ستارہ کے لئے ایک چھوٹی سی اسی طرح لگ رہے ہو. اور یقینا یہ ہے. تو ایک ڈیٹا کی قسم کے لئے ایک پوائنٹر ہے، اس پر روشنی ڈالی حصہ کی بنیاد پر؟ تو یہ ایک int ہے. تو اب کوئی ایک int ہے، یہ ایک int کا پتہ ہے. اور اسی طرح، B کی اب جا رہا ہے ایک int کا پتہ ہے. تو اب میں اہم سے سویپ فون جب، میں تبادلہ 1 اور 2 کو دینے کے لئے نہیں جا رہا ہوں. مجھے یہ پسند ہے دینے کے لئے جا رہا ہوں بیل کچھ اور بیل کچھ، قیادت کریں گے کہ دو پتے ان کی اصل جگہوں پر سویپ اپنے کمپیوٹر کی میموری میں. تو اب، میری باقی نفاذ ایک tad کو تبدیل کرنے کی ضرورت ہے. اب واضح طور پر مختلف ہے کوڈ کا ان تین لائنوں میں؟ ان تمام لات ستارے نہیں ہے جگہ پر، ٹھیک ہے؟ تو یہاں کیا چل رہا ہے؟ جی ہاں؟ سامعین: یہ [اشراوی] ظاہر ہے. DAVID J. MALAN: بالکل. اس تناظر میں تو اور یہ نہیں تھا بہترین ڈیزائن فیصلہ، اقرار، سال پہلے. اس سیاق و سباق، جہاں میں آپ کو صرف ایک ستارہ ہے، اور آپ کو ایک ڈیٹا کی قسم کی ضرورت نہیں ہے، int کی طرح، فوری طور پر بائیں طرف، اس کی بجائے آپ کو واضح طور پر، ایک ہی علامت ہیں، اس تناظر میں، آپ کا کہنا ہے جب ایک ستارہ، اس کا مطلب ہے کہ ایک میں ہے کہ پتہ. تو بات کرنے کی، خزانہ نقشہ پر عمل کریں. اور اس دوران، 37 سطر میں، یہ ایک ہی بات کا مطلب. پتہ کرنے کے لئے جاؤ، اور کیا وہاں ڈال دیا؟ جو کچھ بھی ہے B کی وضاحت اس مقام. دوسرے الفاظ میں، B کرنے کے لئے جانا. اس کی قیمت حاصل کریں. برابر کے مطابق، ایک کے پاس جاؤ اور سائن ان کریں، تفویض آپریٹر، وہاں اس قدر ڈال. اسی طرح، int کے عارضی صرف ایک int ہے. کچھ بھی عارضی کے بارے میں تبدیل کرنے کی ضرورت ہے. یہ Annenberg میں سے صرف ایک اسپیئر گلاس ہے کچھ دودھ یا سنتری کا رس کے لئے. لیکن میں، کا کہنا ہے کہ بی پر جانے کے لئے کی ضرورت ہے. اس منزل میں جاؤ اور وہاں TEMP میں قدر ڈال. تو پھر کیا ہو رہا ہے؟ میں اصل میں ہے تو، اس وقت ادل بدل کہتے ہیں یہ پہلی ٹرے یہاں، اہم کی نمائندگی کرتا ہے یہ دوسری ٹرے سویپ کی نمائندگی کرتا ہے، جب میں ایمپرسینڈ X اور Y کے پاس ایمپرسینڈ مین ادل بدل سے، صرف، واضح ہو اس اسٹیک فریم حاصل کرنے کے کیا ہے؟ جی ہاں؟ سامعین: [اشراوی]. DAVID J. MALAN: بالکل. ایکس کا پتہ اور Y کے ایڈریس. اور تم ان کے بارے میں سوچ کر سکتے ہیں ای میل کے پتے کی طرح. 33 آکسفورڈ سٹریٹ اور 35 آکسفورڈ سٹریٹ، اور آپ دو عمارتوں منتقل کرنا چاہتے ہیں ان مقامات پر ہیں. یہ ایک مضحکہ خیز خیال کی طرح ہے، لیکن ہے کہ ہم ایڈریس کی طرف سے مطلب ہے. جہاں دنیا میں کر سکتے ہیں آپ ان دونوں ints کے مل؟ آپ دنیا میں کہاں کر سکتے ہیں ان دو عمارتوں مل؟ تو آخر ہے تو، اس وقت میں نے کے بعد آج کے منبع کوڈ میں جاؤ اور مرتب تبادلہ اور رن ./swap، آخر میں، کے لئے پہلی بار ہم اصل میں کہ دیکھتے ہیں میرے اقدار واقعی ہے کامیابی کے ساتھ تبدیل کیا گیا. اور اب، ہم بھی لے سکتے ہیں اس میں، کا کہنا ہے کہ، GDB کے نوٹ. تو مجھے ایک ہی فائل میں جانے. مجھے آگے بڑھیں اور ./swap کے GDB چلانے. اور اب، سویپ، میں جا رہا ہوں آگے اور مین میں ایک بریک پوائنٹ قائم. اور اب میں جا رہا ہوں آگے اور پروگرام کو چلانے کے. اور اب ہم اپنے کوڈ دیکھیں اس لائن پر روک دیا گیا. میں آگے اور پرنٹ جاتے ہیں ایکس، میں یہاں کیا دیکھنا چاہئے؟ یہ ایک سوال ہے. پھر سے کہو؟ سامعین: [اشراوی]. DAVID J. MALAN: تو بے ترتیب تعداد، شاید. شاید میں خوش قسمت حاصل، اور یہ 0، اچھا اور آسان. لیکن شاید یہ کچھ بے ترتیب تعداد ہے. اس صورت میں، میں خوش قسمت ہے. یہ صرف 0 ہو. لیکن یہ، یقینا قسمت ہے نہیں جب تک کیونکہ میں اگلے ٹائپ کریں اور پھر پرنٹ ایکس کہ ہے کوڈ کے مطابق، 19 لائن، پھانسی دے دی گئی. دریں اثنا، میں ٹائپ کریں تو اگلے ایک بار پھر، اور اب میں 2 کو دیکھنے کے لئے جا رہا ہوں، Y باہر پرنٹ. میں اگلے ٹائپ اب، اگر، اس کے لئے جا رہا ہے ایک چھوٹا سا مبہم حاصل، کیونکہ اب، printf کے پر دکھایا جا رہا ہے سکرین یہ کیا، کے طور پر. X 1 ہے. پھر ایسا کرتے ہیں. اور اب، یہاں کہاں ہے چیزیں دلچسپ حاصل. میں تبادلہ یا اس سے بھی قدم کال سے پہلے اس میں، تھوڑا سا جھانکنا لے. ایکس، دوبارہ، 1 ہے. Y، کورس کے، فوری وویک ہے تو مشکل نہیں وہاں،، 2 چیک. لیکن ایمپرسینڈ ایکس کیا ہے؟ جواب، اس funky کی طرح لگ رہا ہے. لیکن قوسین میں INT اسٹار صرف ہے یہ کہہ کے جی ڈی پی کی طرح ایک پتہ ہے. یہ، یہ ایک پوائنٹر ایک int نہیں ہے INT، یا دوسری صورت میں ایک ایڈریس کے طور پر جانا جاتا ہے. اس پاگل چیز کیا ہے؟ ہمیں کچھ کبھی نہیں دیکھا ہے بہت پہلے اس طرح. تو یہ میرے کمپیوٹر میں پتہ ہے X رہنے کے لئے ہوتا ہے جہاں کی یاد. یہ بیل کچھ ہے. اور یہ واضح طور سے، کیوں، ہے میں تیر ڈرائنگ شروع کر دیا ہے، بجائے نمبروں کی، جو واقعی پرواہ ہے کیونکہ آپ INT ایک خاص ہے کہ بڑی ہے کہ اس ایڈریس. لیکن bffff0c4، ان سب ہیں یقینا شش اعشاری ہندسے، F ذریعے 0 ہیں جو. تو ہم بھی رہنے کے لئے نہیں جا رہے ہیں ان چیزوں ہیں پر طویل. لیکن میں Y پرنٹ ہے تو، کورس کے، میں نے 2 دیکھیں. لیکن ایمپرسینڈ Y، میں اس پتے دیکھیں. اور نوٹس، شوقین کے لئے، علاوہ X اور Y کس حد تک ہیں؟ آپ کے ایڈریس کے سب سے زیادہ نظر انداز کر سکتے ہیں. چار بائٹس. اور اس کے مطابق ہے ہماری پہلے ایک int کتنا بڑا ہے کا دعوی ہے کہ؟ چار بائٹس. تو یہ سب کچھ استر کی طرح لگ رہا ہے اچھی طرح سے، آپ کو یاد میں، امید ہے کہ ہو سکتا ہے کے طور پر. تو اب، صرف تیزی سے آگے چلو اس کہانی کے آخر میں. ، آگے بڑھو اور قدم ٹائپ کریں سویپ تقریب میں کودو. اب میں ایک قسم ہے، تو یہ ہے، نوٹس ایکس کا پتہ کرنے کے لئے ایک جیسی. میں بی قسم ہے، تو یہ ایک جیسی ہے Y کے ایڈریس پر. تو میں نے تو کیا دیکھنا چاہئے ، ایک پتہ پر جانا ہے؟ تو ایک ستارہ پرنٹ. تو ستارہ اس تناظر میں، وہاں جانے کا مطلب ہے کہ. ایمپرسینڈ کا پتہ کیا ہے کا مطلب ہے. تو ایک ذریعہ کے 1 ستارہ. اور پرنٹ اسٹار B مجھے 2 فراہم کرتا ہے. اور مجھے لمحے کے لئے، فرض، کم از کم کے کوڈ کے کہ ہو سکتا ہے اب عمل کرنے کی آمدنی اس طرح کے ذریعے مدلل. لیکن ہم طویل عرصے سے پہلے اس خیال نظرثانی کریں گے. سویپ کے تو اس ورژن اب صحیح ہے اور کی اجازت دیتا ہے ہمیں اس خاص طور پر ڈیٹا کی قسم تبادلہ کرنے کے لئے. تو کسی بھی سوال تو سویپ؟ سٹار؟ کے پتے پر؟ اور آپ کے ساتھ، دیکھیں گے مسئلہ، قسم کے، 4 مقرر لیکن مسئلہ 5، یقینی طور پر، کس طرح ان مقرر چیزیں مفید ہیں اور حاصل بہت زیادہ نتیجے کے طور پر، ان کے ساتھ آرام دہ اور پرسکون. بالکل کچھ؟ ٹھیک ہے. تو malloc، اس تقریب کے ایک بار پھر، ہے کہ صرف میموری، میموری مختص مختص. اور کیوں یہ مفید ہے؟ ویسے، اس وقت، آپ malloc کا استعمال کرتے ہوئے کیا گیا ہے. اب آپ کو کس طرح سمجھتے ہیں کام GetString کے، شاید، یہ ہے کا ایک حصہ کے لئے کسی سے پوچھ کر دیا گیا میموری، کسی بھی وقت صارف کو ایک تار میں، ہم نے کی وجہ سے معلوم نہیں تھا، CS50 عملے کے طور پر، کتنا بڑا ان ڈور کہ انسان ہو سکتا ہے ٹائپ کرنے جا رہے ہیں. تو، پہلی بار کے لئے، کرنے کے لئے شروع کرتے ہیں چھیل واپس کس طرح CS50 لائبریری کام، مثالوں کی ایک جوڑے کے ذریعے کہ ہمیں وہاں کی قیادت کریں گے. میں gedit کھولنے تو اور، اگر scanf 0 کھول ہم مندرجہ ذیل کوڈ کو دیکھنے کے لئے جا رہے ہیں. کے لئے ویب سائٹ پر دستیاب scanf کی 0، آج، کوڈ کے نسبتا چند لائنوں کے ہے یہاں، 20 کے ذریعے 14. اور یہ کیا کر رہی ہے دیکھتے ہیں. یہ ایک int، کہا ایکس کا اعلان. یہ کچھ کی طرح، تعداد، براہ مہربانی کا کہنا ہے کہ. اور اب یہ scanf کی میں نے، اور X، کا کہنا ہے کہ. تو وہاں نئے سامان کا ایک گروپ ہے. لیکن scanf کی، آپ کی قسم کے بارے میں سوچ کر سکتے ہیں کے printf کی مخالف کے طور پر. printf کے، کورس کے، سکرین پر پرنٹ. صارف کی طرف سے علیحدہ اسکین کی ضرورت scanf کی طرح کی بورڈ کچھ وہ ٹائپ ہے. میں صرف printf طرح ہے. یہ توقع کا مطلب صارف ایک int میں ٹائپ کی. اور اب، تم کیوں مجھے لگتا ہے کہ ہے scanf کی اور ایکس گزر ہو سکتا ہے؟ اگر scanf کی زندگی میں مقصد صارف کی طرف سے کچھ حاصل کرنے کے لئے ہے، کا معنی کیا ہے اب، گزر، اور ایکس؟ جی ہاں؟ سامعین: [اشراوی]. DAVID J. MALAN: بالکل. جو کچھ بھی میں، انسانی،، میرے ان پٹ میں ٹائپ اس مقام پر محفوظ کیا جا رہا ہے. یہ صرف کرنے کے لئے، یاد، کافی نہیں ہے ہم نے پہلے ہی دیکھا ہے کیونکہ، X میں گزرتے، کسی بھی وقت آپ کو، صرف ایک خام متغیر گزر ایک int کی طرح، کچھ دوسرے تقریب، اس بات کا یقین، یہ ہے کہ تبدیل کر سکتے ہیں متغیر، نہیں بلکہ مستقل طور پر. یہ مین پر اثر نہیں کر سکتے ہیں. یہ صرف اس کے اپنے مقامی کاپی تبدیل کر سکتے ہیں. لیکن اگر اس کے بجائے، آپ ایسا نہیں کرتے مجھے اصل INT دے، لیکن تم نے مجھے ہدایات دے کہ INT، اب میں،، scanf کی ہونے کی وجہ سے ضرور، میں نے اس کی پیروی کر سکتے ہیں حل اور وہاں ایک نمبر ڈال تو آپ کے ساتھ ساتھ اس تک رسائی حاصل ہے. میں اس پروگرام چلاتے تو، چلو دیکھتے ہیں. scanf کی 0 ڈاٹ سلیش بنائیں، 0 scanf کی. اور اب میں ایک بڑی تعداد ٹائپ کریں 50 کی طرح، 50 کے لئے شکریہ. میں اب کی طرح ایک نمبر ٹائپ کریں منفی 1، 1 منفی. اب میں ایچ ایم، 1.5 کی طرح ایک نمبر ٹائپ کریں. کیوں اپنے پروگرام مجھے نظر انداز کیا؟ ویسے، کیونکہ بس، میں بتایا یہ ایک int صرف توقع کرنے کے لئے. ٹھیک ہے. تو ہے کہ اس کے ایک ورژن ہے. کے نشان تک چیزوں کو لے اور یہ اچھا نہیں ہے تجویز ہے کہ. اور اس کے ساتھ ساتھ ایک بہت سادہ مثال کے طور پر جھوٹ ہم کوڈ لکھنے شروع کر سکتے ہیں کس طرح دوسرے لوگوں کا استحصال کر سکتے ہیں یا بری چیزیں کرنے کی طرف سے سمجھوتہ. تو 16 لائن، تو اسی طرح روح میں سے پہلے، لیکن میں نے اسے اس وقت int کی اعلان نہیں کر رہا ہوں. میں سٹرنگ ارف، یہ چار ستارہ اعلان کر رہا ہوں. لیکن کیا یہ واقعی مطلب ہے؟ تو میں ایک ایڈریس کی وضاحت نہیں کرتے تو میں منمانے بلا رہا ہوں، بفر، لیکن میں simple-- ہونا، یہ کہہ سکتے ہیں اور پھر میں، ایسا مجھے سمجھانے کی، آپ نے پچھلے کی بنیاد پر، کر سکتا ہے تو منطق، scanf کی 18 کی لائن میں کیا کر رہا ہے، پاس٪ اور بفر تو، ایک ایڈریس جو؟ آپ درخواست اگر scanf کی، کیا ہے 0 ورژن کے طور پر بالکل وہی منطق، یہاں کیا کرنے کی کوشش کی جا رہی، جب میں صارف اقسام کچھ؟ جی ہاں؟ سامعین: [اشراوی]. DAVID J. MALAN: بالکل. scanf کی، منطق پہلے کی طرف سے، سٹرنگ لے جا رہا ہے انسانی ٹائپ ، اب یہ ایک تار ہے in-- یہ، شاید، ایک نمبر نہیں ہے وہ cooperates-- تو اور یہ کہ ڈال کرنے کے لئے کوشش کرنے کے لئے جا رہا ہے جو کچھ بھی پتہ یاد میں سٹرنگ بفر کی وضاحت. اور یہ بہت اچھا ہے، بفر کیونکہ واقعی ایک پتہ ہونا مراد ہے. لیکن میں یہ پروگرام ایک میں چھوٹی ہے کا دعوی بہت سنجیدگی سے، قیمت کیا ہے کیونکہ ڈیفالٹ کی طرف سے بفر؟ میں کیا میں سے initialized ہے؟ میموری کا کیا حصہ؟ میں نہیں ہے، ٹھیک ہے؟ تو میں مختص کی ہے اگرچہ اب کوئی یہ کہا جاتا ہے کہ چار ستارہ، اس کی بجائے کہا جاتا ہے، تو buffer-- کی متغیر کا نام اپنی طرف متوجہ میں نہیں ہے تو اب buffer-- یہاں GetString یا malloc کہا، کہ مؤثر طریقے سے کا مطلب ہے کہ بفر کچھ ردی کی ٹوکری کی قیمت ہے. اب اس کا کیا مطلب ہے؟ یہ میں نے scanf کی بتایا ہے کا مطلب ہے کہ صارف سے ایک تار کی توقع کرنا. اور تم کیا جانتے ہو؟ جو کچھ بھی اس بات کی طرف اشارہ ہے to-- اور میں سوال کے نشان کو اپنی طرف متوجہ، لیکن حقیقت میں، یہ ہونے جا رہا ہے Ox1، 2، 3، کی طرح کچھ ٹھیک ہے؟ یہ کچھ بوگس قیمت ہے کہ صرف پہلے سے ہو. تو دوسرا راستہ رکھو، یہ ہے بفر صرف ہے اگرچہ کے طور پر میموری میں کچھ کی طرف اشارہ. مجھے کوئی اندازہ نہیں ہے. میں اب کے بغیر میں ٹائپ تو، یہ جا رہا ہے وہاں جی ایک-B-E / 0 ڈال کرنے کی کوشش کریں. لیکن ہے کہ وہ کیا جانتا ہے؟ اور ماضی میں، کسی بھی ہم کو چھو کرنے کی کوشش کی ہے وقت نہیں ہے کہ میموری ہمیں، کیا ہوا ہے؟ یا تقریبا ہر وقت. انقطاع غلطی، ٹھیک ہے؟ یہ ہے جہاں یہ تیر، مجھے کوئی اندازہ نہیں طرف اشارہ کرتے ہوئے. یہ صرف کچھ بے ترتیب قیمت ہے. اور کورس کے، آپ کی تشریح کروں تو ایک ایڈریس کے طور پر ایک بے ترتیب قیمت، آپ کو جانے کے لئے جا رہے ہیں کچھ بے ترتیب منزل. تو Gabe کی حادثے یقینا ہو سکتا ہے یہاں اس صورت میں اپنے پروگرام. تو ہم اس پر تقریبا طور پر برا ہے کیا کر سکتے ہیں؟ اس تیسری غور کریں اور scanf کی کی آخری مثال کے طور پر. اس ورژن میں کس معنی میں بہتر ہے؟ آپ کے ساتھ آرام دہ اور پرسکون ہیں، تو گزشتہ مسئلہ، یہ بہتر ہے. کیوں؟ سامعین: [اشراوی]. DAVID J. MALAN: اچھا. لائن 16 تو اس صورت احساس میں، بہتر ہے ہم واضح طور پر ہیں کچھ میموری آونٹن. ہم malloc کا استعمال نہیں کر رہے ہم ہفتہ 2 استعمال کر رہے ہیں صرف ایک صف اعلان کے نقطہ نظر. اور ہم اس ایک تار پہلے کہا ہے حروف کی صرف ایک صف ہے، تو یہ مکمل طور پر جائز ہے. لیکن اس کے طور پر، کورس کی، ہے آپ 16،، مقررہ سائز نوٹ. تو اس پروگرام ہے مکمل طور پر محفوظ، میں ٹائپ کریں ایک کردار ڈور میں، دو کردار ڈور، 15 کردار کی ڈور. لیکن جیسے ہی میں 16 ٹائپ کرنا شروع کے طور پر، 17، 18، 1،000 کردار ڈور، جہاں اس سٹرنگ کو ختم کرنے جا رہا ہے؟ یہ جزوی طور پر یہاں ختم کرنے کے لئے جا رہا ہے. لیکن اس وقت کیا کون جانتا ہے حدود سے باہر ہے یہ خاص طور پر صف کے؟ میں نے کے طور پر اگرچہ یہ یہاں 16 خانوں اعلان. تو تمام 16 باہر اپنی طرف متوجہ کرنے کے بجائے، ہم کریں گے بس میں 16 سے تیار ہے کہ دکھاوا. لیکن میں نے پھر ایک سٹرنگ کو پڑھنے کے لئے کی کوشش کریں تو کہ 50 حروف کی طرح، بہت زیادہ ہے، میں ڈال شروع کرنے جا رہا ہوں A، B، C، D، X، Y، Z. اور یہ شاید ہے کچھ دوسرے میموری طبقہ کہ، ایک بار پھر، کا سبب بن سکتا میرے پروگرام، کریش میں نے کے لئے نہیں کہا ہے کیونکہ صرف 16 بائٹس سے زیادہ کچھ. تو کسے پرواہ ہے؟ ٹھیک ہے، یہاں CS50 لائبریری ہے. اور اس کے سب سے زیادہ صرف ہے سب سے اوپر کی ہدایات کی طرح. CS50 لائبریری، اس وقت، لائن 52 میں اس لائن کو دیکھا گیا ہے. ہم typedef کے دیکھا، یا ہے آپ typedef کے دیکھیں گے صرف ایک تخلیق جس میں 4 pset، میں متبادل چار ستارہ زیادہ ہو سکتا ہے جس کے تحت صرف سٹرنگ کے طور پر کہا جاتا ہے. تو اس میں سے ایک ہے چند تربیت پہیوں ہم ہڈ کے نیچے خفیہ کا استعمال کیا ہے. دریں اثنا، یہاں GetChar کہ، تقریب ہے. اب بظاہر، اس کا کوئی جسم نہیں ہے. اور حقیقت میں، میں رہتے ہیں طومار کر رہا ہے، میں نے اصل میں ایسا نہیں کرتے کسی بھی نفاذ دیکھیں ان کے افعال میں. وویک چیک کے طور پر، کہ کیوں ہے؟ سامعین: [اشراوی]. DAVID J. MALAN: جی ہاں. تو اس ہیڈر فائل ہے. اور ہیڈر فائلوں prototypes کی پر مشتمل ہے، کے علاوہ کچھ دیگر چیزیں، یہ لگتا ہے typedefs طرح. لیکن ختم cs50.c، ہم ہے جو مکمل طور پر آپ کو دیا کبھی نہیں، لیکن CS50 آلات میں کیا گیا ہے تمام اس وقت، گہری اس کے فولڈر کے اندر، ایک پوری ہے کہ نوٹس یہاں کے افعال میں گروپ. اصل میں، کے ذیل میں سکرال. اب کے لئے، ان میں سے اکثر کو نظر انداز کرتے ہیں. لیکن GetInt کے لئے ذیل میں سکرال اور GetInt کس طرح کام کرتا. تو یہاں میں GetInt ہے. کیا تم نے کبھی واقعی پرواہ ہے تو اور کس طرح حاصل INT یہاں، کام کرتا ہے اس کے دستاویزات ہے. اور چیزوں کے درمیان یہ آپ کو بتاتا ہے اقدار کی حدود اس کو واپس کر سکتے ہیں. یہ بنیادی طور پر منفی 2 ارب مثبت 2 ارب، دے یا لے. اور یہ سب، باہر کر دیتا ہے وقت، ہم نے کبھی نہیں ہے اگرچہ تم اس کے لئے چیک کرنے کے لیے تھا، کچھ غلط ہو جاتا ہے، یہ سب پتہ چلا ہے کہ اس وقت، میں GetInt ہے ایک خصوصی واپس لوٹنے گیا ، شہوت انگیز null، مسلسل نہیں بلکہ ہے جو، INT_MAX صرف ایک پروگرامر کے کنونشن. یہ یہاں کا مطلب ہے کہ ایک خاص قدر ہے. صرف، اس کے لئے چیک کرنے کے لئے بات کو یقینی بنائیں کے معاملے میں کچھ غلط ہو جاتا. لیکن ہم پرواہ نہیں ہے تاریخ کے لئے اس کے ساتھ، پھر، اس کی وجہ سے آسان کرنے کے لئے کیا مراد ہے. لیکن کس طرح GetInt لاگو ہوتا ہے؟ ویسے، ایک، یہ کوئی دلائل لیتا ہے. ہم جانتے ہیں کہ. یہ ایک int واپس. ہم جانتے ہیں کہ. تو یہ کس طرح ہڈ کے نیچے کام کرتا ہے؟ تو بظاہر ایک لامحدود ہے لوپ، ایک کم از کم ظہور. ہم GetString استعمال کر رہے ہیں کہ نوٹس. تو یہ دلچسپ ہے. میں GetInt ہماری اپنی تقریب، GetString مطالبہ. اور اب کیوں اس صورت ہو سکتا ہے؟ کیوں میں دفاعی رہا ہوں یہاں لائن 165 میں؟ کیا لائن میں ہو سکتا ہے 164، صرف صاف ہو جائے؟ اس سے پہلے کے طور پر ایک ہی جواب ہے. میموری سے باہر ہو سکتا. کچھ، GetString کے ساتھ غلط ہو جاتا ہے ہم اس کو ہینڈل کرنے کے قابل ہو جائے کرنے کے لئے ہے. اور وجہ سے میں خالی ہے واپس نہیں ہے کہ، تکنیکی، شہوت انگیز null پوائنٹر ہے. میں GetInt ایک int واپس کرنے کے لئے ہے. تو میں نے منمانے ہے ، بنیادی طور پر، فیصلہ 2 ارب کہ، جا رہا ہے، دے یا لے ایک خاص قدر ہے کہ میں نے کبھی نہیں کر سکتے ہیں اصل میں صارف سے حاصل. یہ میں جا رہا ہوں صرف ایک قیمت ہے ایک غلطی کوڈ کی نمائندگی کے لئے برباد کرنے کے لئے. تو اب، چیزیں ایک چھوٹا سا پسند. اور یہ بہت ہی تقریب نہیں ہے پہلے کے طور پر، لیکن یہ بہت اسی طرح ہے. تو میں نے لائن میں، یہاں اعلان، نوٹس 172، ایک int ن اور ایک چار ج دونوں. اور پھر میں، اس funky لائن استعمال یہ باہر کر دیتا ہے جس sscanf کی، بورڈ کی طرف سے ایک تار اسکین نہیں ہے. یہ ایک موجودہ سٹرنگ کھڑا ہے صارف پہلے سے ہی میں ٹائپ ہے. تو میں نے پہلے ہی GetString کی، کہا جاتا ہے جس میں میموری میں ایک تار ہے کا مطلب ہے. sscanf کی کیا تم ہوتا ہے ایک تصریف تقریب کہتے ہیں. یہ میں نے سٹرنگ میں لگ رہا ہے ، کردار کی طرف سے، کردار میں ٹائپ اور مفید کچھ کرتا ہے. کہ سٹرنگ لائن میں محفوظ کیا جاتا ہے. اور میں صرف کی طرف جا رہا ہے جانتے ہیں کہ ٹھیک ہے، اوہ، یہاں اور کہہ بیک اپ، میں نہیں ہے اس وقت، لیکن لائن کہا جاتا ہے. اور اب یہ ایک تھوڑا سا مختلف ہے. لیکن یہ مؤثر طریقے سے وجوہات کی بنا پر، کا مطلب ہے کہ ہم کسی حد تک، آج میں اپنے ہاتھ لہر کریں گے ہم جانچ پڑتال کر رہے ہیں کہ صارف میں ٹائپ تو دیکھیں اور int اور شاید ایک اور کردار. صارف ایک int میں ٹائپ ہے، تو یہ ہے میں ہوں کیونکہ رہا، (ن) میں ذخیرہ کیا جائے ایڈریس کی طرف سے اس کے گزرنے کے، آج ہم نے دیکھا ہے نئی چال. صارف بھی ٹائپ طرح 123x میں، کہ ایکس ایک ختم کرنے کے لئے کی جا رہی ہے کردار C میں خط. اب یہ ہے کہ sscanf کے باہر کر دیتا ہے ہوشیاری، مجھے بتائیں گے، کس طرح بہت سے متغیر sscanf کی کیا گیا تھا، بھرنے کے لئے کامیابی کے قابل. اس منطق کی طرف سے، تو تقریب میں، میں GetInt ہے پر عمل درآمد کر رہا ہوں لیکن میں کر رہا ہوں، ممکنہ طور پر، صارف کے لئے ایک int میں ٹائپ ہے کچھ کے بعد، کیا میں sscanf کی کی چاہتے ہیں واپسی کی قیمت صحیح معنوں میں ہو؟ مقصد حاصل کرنے کے لئے ہے صرف صارف کی طرف سے ایک int؟ تو sscanf واپس 2، اس کا کیا مطلب ہے؟ صارف میں ٹائپ کچھ کی طرح، لفظی، صرف بکواس ہے جس 123x،. یہ ایک غلطی شرط ہے، اور میں اس کے لئے چیک کرنے کے لئے چاہتے ہیں. تو اس میں صارف اقسام تو، کی طرف سے اس منطق، واپس sscanf کی کیا کرتا ہے، آپ کہیں گے؟ تو اس کی وجہ سے، 2 واپس جا رہا ہے 123، یہاں میں جانے کے لئے جا رہا ہے اور X یہاں میں ختم کرنے کے لئے کی جا رہی ہے. لیکن میں ایکس بھرا ہوا حاصل کرنے کے لئے نہیں کرنا چاہتے ہیں. میں صرف میں کامیاب کرنے sscanf کے لئے چاہتے ہیں، اس متغیر کے پہلے بھرنے. اور تو ہے کہ یہی وجہ ہے کہ میں sscanf کے 1 واپس کرنا چاہتے ہیں. اور اس کے سر پر تھوڑا سا ہے تو لمحے کے لئے، کہ بالکل ٹھیک ہے. ، اگرچہ کہ ایک احساس GetInt اور GetString کی اقدار ہم ایک کی ایک heck کر رہے ہیں یہ ہے کہ ایسا طرح کی جانچ پڑتال کی خرابی کی بہت کہ، تاریخ کے لئے، آپ کو بہت زیادہ کر سکتے ہیں اپنے کی بورڈ پر کچھ بھی ٹائپ، اور ہم نے اسے پکڑنے گا. اور ہم یقینی طور پر، عملے، نہیں ضرور کروں گا میں ایک مسئلے کا ذریعہ ہو آپ پروگرام، ہم دفاع ہیں کیونکہ پاگل کی سب کے لئے کی جانچ پڑتال ایک صارف کر سکتا ہے کہ چیزوں کو، ، جب ایک تار ٹائپ کی طرح تم واقعی INT چاہتا تھا. تو ہم آ جائیں گے now-- لئے اس کے واپس long-- پہلے لیکن اس وقت، GetString اور GetInt ہے اس کا استعمال کرتے ہوئے ہڈ کے نیچے کر دیا گیا میموری کے پتے سے بنیادی خیال. تو اب، ایک کی چیزوں کو دو صارف دوستانہ تھوڑا زیادہ. آپ Binky کی آخری سے، یاد کر سکتے ہیں time-- اپنے ماؤس تو cooperate-- گا تو ہم اس کوڈ کو، تھا جو واضح طور سے، کافی nonsensical ہے. یہ کوڈ کچھ نہیں حاصل مفید، لیکن یہ مثال تھا کہ پروفیسر Parlante نمائندگی کرنے کے لئے استعمال کیا جاتا ہے کیا میں جا رہا تھا میموری شامل پروگرام. تو اس کی دوبارہ بتانے کہانی سپر مختصر. ان کی پہلی دو لائنوں میں انگریزی، آپ کیا کہیں گے کروں؟ بس میں معقول انسانی، لیکن تھوڑا سا تکنیکی شرائط، ایک کوشش لے. سامعین: [اشراوی]. DAVID J. MALAN: ٹھیک ہے، اگر آپ کو قائم کر رہے ہیں آپ X اور Y متغیر کے لئے پتے. کافی نہیں، X اور Y کے نہیں ہیں کیونکہ روایتی معنوں میں متغیر. X اور Y پتے ہیں یا ایڈریس کو محفوظ کرے گا. تو اس کی ایک بار پھر کوشش کریں. نہیں ایک برا آغاز، اگرچہ. جی ہاں؟ سامعین: [اشراوی]. DAVID J. MALAN: اچھا. مجھے لگتا ہے کہ ایک چھوٹا سا صاف ستھرا ہے. دو اشارہ، دو integers اعلان. اور ہم نے ان X اور Y کو بلا رہے ہیں. یا ہم تھے تو اپنی طرف متوجہ کرنے کے لئے یہ ایک تصویر کے طور پر، ایک بار پھر، کافی صرف ہے کہ تمام یاد ہم اس کی پہلی سطر کے ساتھ کر رہے ہیں اس طرح ایک باکس آ رہا ہے، اس میں کچھ ردی کی ٹوکری کی قیمت کے ساتھ، اور پھر اس ایکس بلا، اور اس طرح ایک اور باکس، کچھ ردی کی ٹوکری کی قیمت کے ساتھ اس میں، Y بلا. ہم نے دو قرار دیا ہے، اشارہ ہے کہ بالآخر ایک int کا پتہ ذخیرہ کیا جائے گا. تو یہ سب وہاں ہے. کرو یہ کیا، تو جب مٹی صرف اس طرح دیکھا. اور نک صرف کی قسم تیر لپیٹ، اگرچہ کے طور پر وہ کہیں بھی کی طرف اشارہ نہیں کر رہے ہیں خاص طور پر، کیونکہ وہ صرف ہیں ردی کی ٹوکری اقدار. وہ واضح طور پر نہیں initialized رہے ہیں کہیں بھی خاص طور پر. اب اگلی لائن کوڈ، یاد، یہ تھا. ، معقول صارف دوستانہ میں تو لیکن کسی حد تک تکنیکی انگریزی، کوڈ کر کے اس لائن کیا ہے؟ جی ہاں؟ سامعین: [اشراوی]. DAVID J. MALAN: کامل. یہ حصہ آونٹیت ہے ایک int کے سائز ہے کہ میموری. اور نصف جواب ہے. تم نے صحیح جواب دیا اظہار کی نصف. کیا ہو رہا ہے برابر علامت کے بائیں ہاتھ کی طرف؟ جی ہاں؟ سامعین: اور دیتا ہے یہ متغیر x کے لئے؟ DAVID J. MALAN: اور دیتا ہے یہ متغیر x کے لئے. recap ہے، دائیں ہاتھ کی طرف مختص تو کافی میموری ایک int ذخیرہ کرنے کے لئے. لیکن malloc خاص ایڈریس واپس آپ نے جو میموری کے اس حصہ، کے صرف ایکس میں محفوظ کیا جاتا ہے تجویز پیش کی. تو کیا نک کرو کے ساتھ آخری بار کیا جاتا ہے انہوں نے کہا کہ پوائنٹر گھسیٹ کر باہر نکالا، مٹی، میموری کا ایک سفید حصہ میں اب اشارہ کرنے کے لئے کہ ایک int کے سائز کے برابر ہے. اور یقینا، کہ اس کا مطلب ہے چار بائٹس کی نمائندگی کے لئے. کوڈ کی اب، اگلی لائن یہ کیا ہے، سٹار ایکس 42 ہو جاتا ہے. تو 42 براہ راست ہے دائیں ہاتھ کی طرف، زندگی کے معنی. بائیں ہاتھ کی طرف، ستارہ ایکس مطلب کیا ہے؟ یہ ٹھیک ہے gone-- وہ بھی ہو سکتا ہے. ٹھیک ہے. سامعین: بنیادی طور پر، [اشراوی] کے پاس جاؤ DAVID J. MALAN: اچھا. سامعین: [اشراوی]. DAVID J. MALAN: بالکل. بائیں ہاتھ کی طرف ایکس کرنے کے لئے جانے کا مطلب ہے کہ. X ایڈریس ہے. یہ 33 آکسفورڈ سٹریٹ، یا Ox1 کی طرح ہے. اور ستارہ ایکس کہ جانے کا مطلب حل اور کیا وہاں ڈال دیا؟ 42. تو یقینا، کہ نک کیا بالکل وہی جو ہے. انہوں نے کہا کہ، کی طرف سے کے ساتھ شروع بنیادی طور پر، ذہنی طور پر ایک انگلی کی طرف اشارہ ایکس، تیر مندرجہ ذیل دائیں ہاتھ پر سفید باکس کی طرف، اور وہاں 42 نمبر ڈال. لیکن پھر چیزیں ہے ایک تھوڑا خطرناک، ہے نا؟ کرو کے اس کے سر کھو کے بارے میں. سٹار Y کا مطلب کیا ہے، 13، بدقسمتی برابر ہے؟ تو ستارہ کا مطلب Y Y میں ایڈریس جانا. لیکن Y میں ایڈریس کیا ہے؟ ٹھیک ہے، یہ ردی کی ٹوکری کی قیمت ہے، ٹھیک ہے؟ میں ایک سوال کے نشان کے طور پر متوجہ کیا. نک ایک کرل کروانے تیر کے طور پر متوجہ کیا. اور کے طور پر جلد ہی آپ کو کرنے کی کوشش کے طور پر وہاں جانے کے کہہ، ستارہ Y کرتے، لیکن ایک جائز نہیں ہے پتہ، یہ کچھ جعلی مقام ہے، کریش پروگرام کرنے جا رہا ہے. اور کرو کے سر رہا ہے یہ کیا کے طور پر، یہاں سے دور پرواز کرنے کے لئے. آخر میں، اس پروگرام تو صرف فلیٹ باہر دوش تھا. یہ ایک چھوٹی گاڑی پروگرام تھا. اور یہ طے کرنے کی ضرورت ہے. اور واحد راستہ، واقعی، اسے درست کرنے کی ہو جائے گا، مثال کے طور پر، اس لائن، ہم بھی کرنے کے لئے حاصل نہیں کیا، کیونکہ پروگرام بھی جلد ہی گر کر تباہ ہو. لیکن ہم اس کو ٹھیک کرنے کے لئے تھے، تو کیا اثر Y برابر ایکس ہے کر ہے؟ ویسے، یہ بنیادی طور پر Y پوائنٹس جو کچھ بھی قیمت ایکس طرف اشارہ ہے. نک کی کہانی میں، یا Binky کی کہانی، دونوں X اور Y کی طرف اشارہ کر رہے تھے میموری کا سفید حصہ، تا کہ، آخر میں، جب آپ Y پھر 13 کے برابر ستارہ ہے، آپ میں 13 ڈال ختم مناسب جگہ. تو ان لائنوں کی تمام بالکل ہیں جائز، اس میں سے ایک کے علاوہ، تم سے پہلے ہوا جب اصل Y کچھ قدر تفویض. اب شکر ہے، آپ ایسا نہیں کرتے تمام کے ذریعے کی وجہ سے ہے اپنے اپنے طور پر مسائل کے ان قسم کے. مجھے آگے بڑھیں اور کھول دو یہاں ایک ٹرمینل ونڈو اور صرف ایک لمحے کے لئے، کھول، ایک سپر مختصر پروگرام ہے کہ بھی قسم کے بیکار ہے. یہ بدسورت ہے. یہ مفید کچھ حاصل نہیں ہوتا. لیکن یہ مسائل کا مظاہرہ ہے میموری کی، تو ایک نظر ڈالیں. مین، سپر آسان. یہ بظاہر ایک تقریب بلاتا ہے، F، اور پھر 0 واپس. اس گندگی کو اس تک اس قسم کی مشکل ہے. تو مین اب تک، بہت اچھا ہے. تو F پریشانی ہے. اور صرف زیادہ سے زیادہ پیش نہیں کیا گیا اس نام میں کوشش یہاں، کوڈ پر توجہ مرکوز رکھنے کے لئے. F دو لائنوں ہے. اور اب کیا ہو رہا ہے کو دیکھنے کے. تو ایک طرف یہاں اور مجھے کرنے دو گزشتہ کے ساتھ اس کے مطابق ایک ہاتھ پر مثال کے طور پر، بائیں ہاتھ کی طرف ہے انگریزی میں، کیا کر رہے؟ یہ is-- سامعین: ایک پوائنٹر کی تشکیل. DAVID J. MALAN: ایک پوائنٹر کی تشکیل ایک int کے لئے اور بلا یہ ایکس. تو یہ ان کے خانوں میں سے ایک پیدا کر رہا ہے میں ٹچ اسکرین پر ڈرائنگ رکھ. اور اب، دائیں ہاتھ پر کی طرف، کی malloc، کورس کے، میموری کا ایک حصہ مختص ہے. اور صرف صاف ہو جائے، کس طرح زیادہ سے زیادہ میموری بظاہر یہ ہے مختص، آپ تو صرف اس قسم کی ریاضی ہے؟ تو یہ 40 بائٹس ہے. اور میں جانتا ہوں کہ میں ایک جانتے ہیں صرف اس وجہ سے INT، CS50 آلات پر، کم از کم، چار بائٹس ہے. تو 10 بار 4 40 ہے. تو یہ ایک X ذخیرہ کرنے کا ہے، کا پتہ 40 ints کی سب سے پہلے باہر کی ہے کہ واپس جگہ مختص کی گئی ہے، واپس، واپس کرنے کے لئے، واپس کرنے کے لئے. اور یہ کہ malloc کے بارے میں اہم کیا ہے. یہ ایک چھوٹی سی میموری لے نہیں ہے یہاں، یہاں تھوڑا سا، ایک چھوٹا سا یہاں. یہ، آپ کو میموری کا ایک حصہ دیتا ہے کو contiguously، آپریٹنگ سے نظام. اب اس کے بارے میں کیا، X خط وحدانی 10 0 کے برابر ہے؟ کوڈ کے صوابدیدی لائن. یہ مفید کچھ حاصل نہیں ہوتا. لیکن یہ دلچسپ ہے، X خط وحدانی 10-- ہے؟ جی ہاں؟ سامعین: [اشراوی]؟ DAVID J. MALAN: X خط وحدانی 10، شہوت انگیز null ہو جائے کی ضرورت نہیں ہے. شہوت انگیز null تفصیل صرف کھیل میں آتا ہے ڈور کے ساتھ، ایک تار کے آخر میں. بلکہ ایک اچھا خیال. کتنا بڑا بھی، اس صف ہے میں 40 بائٹس مختص ہے اگرچہ؟ یہ درست ہے، نو کے ذریعے 0 ہے؟ یہ کل، 10 ints کے ہے. 40 بائٹس، لیکن 10 ints کے، 0 0 ذریعے حساب سے ترتیب. تو ہے کہ X خط وحدانی 10 کیا ہے؟ یہ اصل میں کچھ نامعلوم ردی کی ٹوکری کی قیمت. یہ میرے لئے نہیں ہے کہ میموری ہے. میں نے اس کو چھو نہیں کیا جانا چاہئے بائٹ نمبر 41، 42، 43، 44. میں بہت دور تھوڑا سا جا رہا ہوں. اور یقینا، میں چلاتے ہیں تو یہ پروگرام، یہ بہت اچھی طرح کریش ہو سکتا ہے. لیکن کبھی کبھی، ہم خوش قسمت حاصل کریں گے. اور تو مظاہرہ کرنے کے لئے this-- اور واضح طور سے، تم سے پہلے کبھی نہیں جانتے it-- اس کو چلانے کے ہے. یہ اصل میں نہیں کریش ہوا. لیکن میں اس کے لئے، تبدیل مثال کے طور پر،، 1،000 کی طرح ہونا واقعی یہ کرنے کے لئے جان بوجھ کر، چلو دیکھتے ہیں ہم حاصل کر سکتے ہیں اس وقت کریش. ٹھیک ہے، یہ نہیں کریش ہوا. کس طرح 100،000 کے بارے میں؟ یہ ریمیک، اور اب یہ ہے rerun. ٹھیک ہے. وفف. ٹھیک ہے. تو بظاہر، ایک بار پھر، ان میموری کے طبقات، تو بات کرنے کے لئے تو ہم کر سکتے ہیں، مناسب بڑے ہیں بار بار خوش ہو جاؤ. لیکن آخر میں، ایک بار آپ کو مضحکہ خیز حاصل اور واقعی، سکرین پر کہیں باہر جانا آپ، کہ واقعی میموری کو چھو واقعی آپ سے تعلق نہیں ہے. لیکن سچ کہوں تو، ان کیڑے کی طرح جا رہے ہیں مشکل اور مشکل ہو جائے اپنے آپ کو جاننے کی. لیکن شکر ہے، پروگرامرز کے طور پر، ہم نے ہمارے لئے ایسا کرنے کی اجازت دیتے ہیں، فورم کے اوزار. تو یہ شاید،، میں سے ایک ہے ugliest پروگراموں کی، GDB کی پیداوار سے بھی uglier. لیکن یہ ہمیشہ ایک لائن ہے یا سپر مفید ہیں کہ دو. Valgrind کے میں مدد ملتی ہے کہ ایک پروگرام ہے آپ کو ایک پروگرام ڈیبگ نہیں، SE فی، لیکن میموری متعلقہ تلاش مسائل، خاص طور پر. یہ خود کار طریقے کے لئے اپنے کوڈ کو چلایا جائے گا آپ کو اور کم از کم دو چیزوں کے لئے نظر آتے ہیں. ایک، آپ کو کچھ کیا رابطے میموری کی طرح حادثاتی کہ آپ سے تعلق نہیں تھا؟ یہ آپ کو ان صورتوں کو تلاش میں مدد ملے گی. اور دو، اس کی مدد کرے گا آپ کو بلایا کچھ تلاش میموری لیک، ہم جس مکمل طور پر نظر انداز کر دیا، naively سے، کچھ وقت کے لئے اور قرار. لیکن یہ سب، باہر کر دیتا ہے اس وقت، جب بھی آپ GetString میں بلایا ہے ہمارے پروگراموں میں سے بہت سے، آپ آپریٹنگ پوچھ رہے ہیں میموری کے لئے نظام، لیکن آپ کسی بھی یاد ہے کبھی دے واپس، کر unalloc، یا مفت، یہ کہا جاتا ہے کے طور پر. نہیں، کیونکہ ہم کبھی نہیں ہے ایسا کرنے کے لئے آپ سے پوچھا. لیکن اس وقت، کے پروگرام آپ C میں لکھ رہا ہوں میموری لیک کر دیا گیا ہے، آپریٹنگ پوچھ اور زیادہ سے زیادہ کے لئے نظام ڈور اور whatnot کے لئے میموری، لیکن یہ واپس حوالے کبھی نہیں. اور اب یہ ایک تھوڑا سا ہے ایک oversimplification کے، لیکن تم نے کبھی کیا ہے تو اپنے میک چلانے یا کچھ وقت، کھولنے کے لئے آپ کے کمپیوٹر پروگراموں کے بہت سے، شاید، کے پروگرام بند اور اگرچہ آپ کمپیوٹر گر کر تباہ ہو گیا ہے، یہ اتنا سست ہو رہی ہے یہ واقعی ہے کے طور پر اگرچہ میموری کا ایک بہت استعمال کرتے ہوئے یا وسائل، اگرچہ، تم نہیں ہو تو بھی کی بورڈ کو چھونے، کہ be-- لیکن always-- سکا پروگرام آپ چلا رہے ہیں کہ خود میموری لیک ہے. اور وہ زیادہ اور OS پوچھ رکھنے زیادہ میموری، لیکن اس کے بارے میں بھول، اصل میں، اس کا استعمال نہیں ہے لیکن لہذا دور میموری لینے یہ چاہتے ہیں کہ دوسرے پروگراموں سے. تو ہے کہ ایک عام وضاحت ہے. اب یہاں ہے جہاں Valgrind کے کی ہے پیداوار مکمل طور پر ہے ان کم کرنے کے لئے ظالمانہ اور دونوں آرام دہ اور پرسکون. لیکن دلچسپ چیزیں یہاں ہے. یہ میرے ایک غلط لکھنے کہہ رہا ہے سائز چار، اس پروگرام میں ہوتا ہے خاص طور پر، memory.c 21 لائن پر. میں ایچ ایم، بیشک، 21 لائن پر جانا تو سائز میں چار کی ایک جعلی لکھنے ہے. کیوں سائز چار؟ ویسے، یہ نمبر اور اس anything-- ہو سکتا ہے ایک int ہے. تو یہ چار بائٹس ہے. تو میں نے چار بائٹس ڈال رہا ہوں جہاں وہ تعلق نہیں ہے. یہ کیا Valgrind کی ہے اصل میں مجھے کہہ رہا ہے. اس کے علاوہ، یہ بھی ہو جائے گا ہم دیکھیں گے کے طور پر، مجھے بتاو، آپ کو اس ایک مستقبل pset میں چلانے کے طور پر، اور اگر آپ کو جس بے شک میموری، لیک ہے جب میں نے بلایا ہے کیونکہ میں، ہے malloc کی، لیکن میں واقعی میں نہیں ہے مفت، اس معاملے میں، کہا، جو ہم آخر میں دیکھیں گے malloc کے برعکس ہے. تو اب، میں، ایک آخری مثال کے طور پر لگتا ہے. تو یہ ایک چھوٹا سا زیادہ ہے arcane ہے، لیکن یہ شاید ہے کرنے کے لئے سب سے بڑی وجہ ، میموری کے ساتھ ہوشیار رہنا اور وجہ یہ ہے کہ بہت سے پروگرام اور یہاں تک کہ اس دن / یا ویب سرورز،، کہیں برے لوگوں کی طرف سے لیا جاتا ہے انٹرنیٹ پر کسی نہ کسی طرح کون ہیں آپ کے سرور پر جعلی پیکٹ بھیجنے کے آپ کے اکاؤنٹ سے سمجھوتہ کرنے کی کوشش کر، یا آپ کے اعداد و شمار لے، یا صرف عام طور پر ایک مشین پر قبضہ. بفر اتپرواہ، کے طور پر نام، کا مطلب ہے سے پتہ چلتا ہے ایک int نہیں ہے، لیکن ایک بفر overflowing کر. اور ایک بفر صرف پسند ہیں طریقہ ہے کہہ کے اس میموری کا ایک گروپ ہے. اور یقینا، میں ایک تار سے ملاقات بجائے کے بفر، پہلے. یہ ایک بفر ہے کیونکہ، یو ٹیوب معنوں میں کی طرح، یا آپ کو ایک ویڈیو دیکھ رہے ہیں کسی بھی وقت، آپ لفظ بفرن دیکھا ہے ہو سکتا، ڈاٹ،، ڈاٹ ڈاٹ. یہ ناقابل یقین حد تک پریشان کن ہے. اور یہ صرف کا مطلب ہے کہ آپ کی ویڈیو پلیئر ہے کہ بہت سے ڈاؤن لوڈ کرنے کی کوشش کر رہا ہے بائٹس کی بائٹس کی، بہت انٹرنیٹ سے ایک ویڈیو سے. لیکن یہ سست ہے، تو اس کی کوشش کر رہا ہے ان میں سے ایک گروپ کے ڈاؤن لوڈ، اتارنا تاکہ ایک بفر، ایک کنٹینر کو بھرنے کے لئے کہ آپ اس وقت کر سکتے ہیں کافی بائٹس ، آپ کو ویڈیو سے ظاہر مسلسل روک کے بغیر. لیکن یہ آپ کر سکتے ہیں، باہر کر دیتا ہے اس بڑے کے لئے ایک بفر ہے. لیکن میں اس زیادہ ڈیٹا ڈال کرنے کی کوشش اس، اور بہت بری چیزیں ہو سکتا ہے. مثال کے طور پر تو، دیکھو ایک مثال کے طور پر یہ آخری جھلکی. یہ ایک پروگرام ہے کہ، پہلی نظر میں، سپر مفید کچھ بھی نہیں ہے. یہ ایک اہم تقریب ہے کہ ایف، اس تقریب بلاتا ہے. اور اس تقریب، F، یہاں، ہے ایک چار صف، سائز 12، C بلایا. اور پھر اس کا استعمال کرتے ہوئے نئے تقریب strncpy کہا. یہ، اس سادہ سے، پتہ چلا ہے کہ کوڈ کا سادہ لائن، صرف دو لائنیں، ہم اپنے پورے پروگرام بنایا ہے اور اس وجہ سے، میرے پورے کمپیوٹر، اور اپنے صارف کے اکاؤنٹ، اور میری مشکل کسی کو بھی ممکنہ طور پر کمزور ڈرائیو کون جانتا ہے اور چلانے کے لئے کافی اچھا ہے ایک مخصوص کمانڈ لائن کے ساتھ اس پروگرام دلیل. دوسرے الفاظ میں، تو یہ برا آدمی ٹائپ کرکے argvargv [1] کے اندر رکھتا ہے بورڈ ایک بہت ہی خاص تیار میں سٹرنگ، نہیں ABC، 123، لیکن بنیادی طور پر، کارکردگی کی نمائندگی کرتے ہیں بائنری علامات کوڈ، وہ یا وہ لکھا ہے کہ ایک پروگرام، ہے جو اس سادہ پروگرام، کے ساتھ پروگراموں کے ہزاروں کے نمائندے کہ، daresay، اسی طرح غیر محفوظ ہیں وہ بالآخر سب کو خارج کر سکتے ہیں میری ہارڈ ڈرائیو پر فائلوں، ایک حاصل وہ کر سکتے ہیں، تا کہ فوری طور پر ٹمٹمانے اپنے طور پر حکم دیتا ہے ٹائپ کریں، اپنے آپ سے تمام فائلوں کو ای میل کریں. میں کر سکتے ہیں کہ کچھ بھی، وہ یا وہ اس کوڈ سے کر سکتے ہیں. ہم نے بہت ابھی اس کو حل نہیں کرے گا. اور حقیقت میں، یہ کرنے کے لئے جا رہا ہے ایک چھوٹی سی تصویر شامل اس طرح، ہم جلد ہی آ جائیں گے جس بہتر سمجھنے کے لئے. لیکن آج کے لئے، پر ختم ، تھوڑا سا زیادہ امید ہے، کیا ہے فہم XKCD مذاق، ہم اگلی بار دوبارہ شروع تک. ٹھیک ہے. بدھ کو نظر آئے. [موسیقی بجانے] اسپیکر: اور اب، گہری Daven Farnham کی طرف سے خیالات،. میموری کا ایک ڈھیر میں کود کی طرح ہے ایک اتوار کی دوپہر پر سنہری پتے. ہوا اڑا، tossing کے آپ اوہ hair--، میں دن when-- یاد [ہنسی]