[عزف الموسيقى] DAVID J. مالان: حسنا. [ضحك] نرحب مرة. هذا هو CS50. وهذا نهاية الأسبوع الخمسة. وحتى الآن، لدينا الى حد كبير تم اتخاذ أمرا مفروغا منه أن هناك وجود هذا المجمع، ضجيج، التي قمت تم استدعاء عن طريق هذا أداة أخرى تسمى جعل هذا بطريقة أو بأخرى سحرية يحول شفرة المصدر الخاصة بك إلى رمز الكائن، الأصفار ومنها أن أجهزة الكمبيوتر الخاصة بك وحدة المعالجة المركزية، المركزية وحدة المعالجة، يفهم الواقع. ولكن اتضح أن هناك عددا هذا يجري تحت غطاء محرك السيارة في بين المدخلات والمخرجات. وأود أن أقترح أن نقوم لحم أن في بشيء من التفصيل في هذه الخطوات الأربع، وشيء يسمى ما قبل المعالجة، شيء دعا تجميع، والتي رأينا، ما يسمى تجميع، و ما يسمى الارتباط. لذلك حتى الآن، في بعض لدينا برامج، لقد كان لدينا حادة تشمل. في الآونة الأخيرة كان لدينا بعض حاد ويعرف عن الثوابت. حتى اتضح أن تلك الأشياء التي تكون مسبوقة بالرمز أو تجزئة رمز الجنيه هي ما قبل المعالج توجيهات. هذا مجرد طريقة أخرى للقول انها سطر من التعليمات البرمجية هذا في الواقع تحويلها إلى شيء آخر قبل الكمبيوتر حتى في محاولة لتحويل البرنامج الى أصفار ومنها. على سبيل المثال، يتضمن حادة القياسية I / O ح، يعني الى حد كبير اذهبوا قبل، والاستيلاء على محتويات الملفات stdio.h ولصقها هناك حق. لذلك لا الآحاد والأصفار و عند تلك النقطة بعد. انها حقا مجرد تبديل. وهذا ما فعله خلال ما يسمى قبل معالجة المرحلة، عند في الواقع تشغيل ضجيج أو على وجه التحديد جعل في معظم الحالات. لذلك كل هذا حدث ويحدث أول تلقائيا حتى الآن. ثم تأتي الخطوة تجميع. ولكن كنا التبسيط تجميع. تجميع برنامج يعني حقا أن أعتبر من شيء من هذا القبيل C، و شفرة المصدر لقد تم كتابة، بانخفاض إلى ما يسمى التجمع. لغة التجميع هو المستوى الأدنى اللغة التي، لحسن الحظ، فإننا لن لدينا الكثير المناسبة ل أكتب هذا الفصل الدراسي. لكنه عند أدنى مستوى في بمعنى أن عليك أن تبدأ الكتابة حرفيا إضافة وطرح وضرب وتحميل من الذاكرة، وحفظ لذاكرة، و تعليمات أساسية جدا أن كمبيوتر، تحت غطاء محرك السيارة، يفهم الواقع. أخيرا، تجميع يأخذ تلك اللغة إلى الأصفار وتلك التي كنا واصفا حتى الآن. وأخيرا حقا، وهناك ما يسمى المرحلة ربط، والتي سنقوم نرى في مجرد لحظة، يجمع التي الأصفار ومنها مع الأصفار الخاص بك و منها أشخاص آخرين قبل قمت بإنشائها. لذلك نعتبر هذا البرنامج بسيطة عظمى. كان عليه من الأسبوع 1. أنه فقط قال، مرحبا العالم، على الشاشة. ركضنا ذلك من خلال ضجيج. أو هربنا من خلال الصنع الذي استمر ضجيج. وأنتج في الوقت الذي بعض الأصفار ومنها. ولكن تبين هناك و خطوة وسيطة. إذا ذهبت أكثر من هنا -، فعلت عفوا لا نريد أن نرى له حتى الآن. إذا ذهبت أكثر من هنا إلى الأجهزة بلدي وأنا فتح hello.c، هنا هو أن البرنامج نفسه. وما أنا ذاهب الى القيام به في محطة بلدي نافذة هنا وانا ذاهب الى تشغيل ضجيج بدلا من جعل التي بأتمتة كل أربعة من تلك الخطوات بالنسبة لنا. وانا ذاهب الى القيام رنة-S و ثم hello.c ثم أدخل. وأحصل على موجه وامض مرة أخرى، وهو أمر جيد. والآن في نافذة أكبر قليلا، أنا ذاهب لفتح gedit هنا. وانا ذاهب لفتح ملف، تبين، ويسمى هذا hello.s يحتوي أن لغة التجميع التي أشرت إليها سابقا. وهذا هو ما يسمى التجمع اللغة، ومستوى منخفض نسبيا التعليمات التي إنتل وحدة المعالجة المركزية الخاصة بك أو كل ما هو في الداخل يفهم. وسائل التحقق هو الخطوة. المكالمة ل الدعوة، وهي وظيفة على مستوى منخفض جدا. فرعية هي للطرح. لذلك عندما يكون لديك وحدة المعالجة المركزية خاصة داخل من جهاز الكمبيوتر الخاص بك، ما يجعلها متميزة، مقابل وحدات المعالجة المركزية الأخرى على السوق، هو الذي التعليمات التي يفهم كثير من الأحيان وكيف كفاءة هو، كيف هو سريع في تنفيذ بعض من هذه التعليمات. الآن لمعرفة المزيد عن هذا، يمكنك أن تأخذ المقبل CS61 سقوط في الكلية. ولكن هنا لدينا، على سبيل المثال، بعض المعرفات التي قد تبدو مألوفة. hello.c هو اسم البرنامج. . النص - ليس هناك الكثير من الاهتمام هناك الآن فقط، نذكر بأن النص الجزء، اعتبارا من الاثنين، حيث في ذاكرة البرنامج ينتهي فعليا حتى. ذلك أن ما لا يقل عن غامضة مألوفة هناك. هنا، بطبيعة الحال، هو إشارة من المهمة الرئيسية لدينا. التمرير لأسفل، وهذه إشارة إلى الأشياء دعا السجلات وقطع صغيرة جدا من الذاكرة داخل وحدة المعالجة المركزية الفعلية الخاصة بك. وإذا كنت انتقل لأسفل حتى أبعد من ذلك، أرى نوعا ذكر غير المباشرة للASCII. وهناك، في الواقع، هو أن سلسلة، مرحبا، فاصلة، العالم. قصة قصيرة طويلة، وقد كان هذا يحدث بالنسبة لك، تلقائيا، تحت غطاء محرك السيارة كل هذا الوقت. وماذا كان يحدث هو في الحقيقة مرة واحدة كنت قد تشغيل ضجيج، أو عن طريق جعل، كنت الحصول على الأولى، من شفرة المصدر، و ما يسمى لغة التجميع. ثم ضجيج هو تحويل هذا التجمع اللغة وصولا الى أصفار ومنها. وهذه هي الشريحة التي بدأنا مناقشتنا في الأسبوع 0 على - ثم أسبوع 1 يوم. ثم أخيرا، ومنها تلك الأصفار وجنبا إلى جنب مع الآحاد والأصفار و من هذه المكتبات كنا اتخاذ لمنح مثل ستاندرد I / O أو المكتبة سلسلة أو حتى مكتبة CS50. لذلك لرسم هذه الصورة أكثر بصريا، لدينا hello.c. وذلك، بطبيعة الحال، يستخدم printf تعمل القول، مرحبا العالم. الخطوة تجميع يأخذ عليه ل هذا الملف رأينا فقط hello.s، حتى على الرغم من أن عادة هو حذف تلقائيا بالنسبة لك. ولكن هذا هو رمز التجميع في خطوة الوسط. وبعد ذلك عندما نجتمع في التجمع اللغة، إذا جاز التعبير، وذلك عندما كنت الحصول على تلك الأصفار ومنها. لذلك قمنا بالتكبير فعال اليوم على ما كنا اتخاذ أمرا مفروغا منه، يعني الذهاب شفرة المصدر إلى التعليمات البرمجية الهدف. ولكن أخيرا، والآن تلك الصورة نفسها - دعونا يشق عليه أكثر من ل الجانب الأيسر. ونلاحظ أنه في الجزء العلوي هناك ذكرت stdio.h. وهذا هو الملف الذي قمنا بتضمين تقريبا في كل من برامج لدينا كتب. وهذا هو الملف محتوياتها الحصول على نسخة لصق، على نحو فعال على قمة التعليمات البرمجية. ولكن اتضح أنه على الكمبيوتر النظام في مكان ما، هناك يفترض أن ملف stdio.c أن شخصا ما كتب سنوات قبل أن تنفذ جميع الوظائف التي تم الإعلان في stdio.h. الآن في واقع الأمر ربما ليس على ماك أو جهاز الكمبيوتر أو حتى في الأجهزة CS50 هو رمز C الخام. شخص جمعت بالفعل، وشملت ملف س لرمز الكائن أو أ ملف، والذي يشير إلى مكتبة المشتركة وهذا ما كان مثبتة مسبقا و قبل تجميعها بالنسبة لك. ولكن لنفترض أن هناك في الواقع على موقعنا على stdio.c الكمبيوتر بالتوازي مع ضجيج. يتم ترجمة التعليمات البرمجية الخاصة بك وتجميعها. ويجري تجميع كود stdio.c 'ق و تجميعها، بحيث هذه الأخيرة جدا خطوة، إلى هنا، علينا أن بطريقة ما ربط، إذا جاز التعبير، الأصفار واولادكم مع له أو لها الأصفار ومنها إلى واحدة برنامج بسيط وهذا هو في نهاية المطاف فقط ودعا مرحبا. بحيث كل من سحر هذا حدث ويحدث حتى الآن. وسوف تستمر في اتخاذ هذه العمليات أمرا مفروغا منه، ولكن ندرك هناك الكثير من التفاصيل المثيرة يجري تحت هناك. وهذا ما يجعل لديك الكمبيوتر مع إنتل في الداخل مميزة بشكل خاص. لذلك على تلك المذكرة، إذا كنت ترغب في الانضمام إلينا لتناول طعام الغداء يوم الجمعة، لا تذهب إلى المكان cs50.net/rsvp المعتادة، 13:15 يوم الجمعة. والآن عدد قليل من الإعلانات. لذلك لدينا بعض الأخبار الجيدة. ونحن لدينا بعض الأخبار السيئة. نبدأ مع بعض الأخبار الجيدة هنا. [أنين] حسنا. حسنا، انها من الناحية الفنية عطلة، لذلك انها ليست الكثير هدية منا. ولكن بعد ذلك أنباء سيئة بالطبع. [أنين] قضيت الكثير من الوقت على هذه الرسوم المتحركة. [ضحك] سيكون هناك دورة الاستعراض هذا المقبلة الاثنين. انها سوف تكون في الساعة 5:30 AM. نحن سوف أذكر لكم من كل هذه التفاصيل عبر البريد الإلكتروني على ملعب ل الموقع في بضع أيام. سيتم تصويره وإتاحتها بعد ذلك بوقت قصير. حتى إذا كنت لا يمكن أن تجعل ان يوم الاثنين فتحة الليل، لا تقلق. أقسام هذا الأسبوع القادمة سوف أيضا التركيز على استعراض لهذه المسابقة. إذا فرعكم هو يوم الاثنين، والذي هو عطلة الجامعة في الواقع، ونحن سوف لا تزال تجتمع في القسم. إذا كنت ببساطة لا يمكن جعل ذلك قسم لأنك ذاهب بعيدا، هذا شيء طيب. حضور يوم الأحد أو يوم الثلاثاء أو القسم لحن في لقسم جيسون، الذي هو على شبكة الإنترنت. لذلك، المزيد من الأخبار السيئة. وذلك وفقا للمنهج، لدينا محاضرة يوم الجمعة المقبل. ولكن الخبر السار - بوضوح، وقضيت وقتا طويلا في هذا الشأن. [ضحك] سنقوم بإلغاء محاضرات يوم الجمعة المقبل ل. بحيث يكون هدية بالنسبة لنا، لذلك كنت يمكن أن يكون حقا راحة لطيفة في بين هذا الاسبوع وأسبوعين من الآن. لذلك لا محاضرات الاسبوع المقبل، مجرد صغيرة مسابقة قليلا، والتي يجب أن تكون الحصول على متحمسون بشكل متزايد. لذلك دعونا الآن أن نوجه اهتمامنا ل ما هو في الواقع أكثر البصرية وأكثر إثارة وتحديد المرحلة لماذا سيكون في الأفق في غضون بضعة أسابيع الوقت. بعد الاختبار الأول، ونحن سوف تحويل محور مشكلتنا يحدد إلى أخرى المشكلة مجال معين، وذلك من الطب الشرعي أو الأمن بشكل عام. في الواقع، فإن التقليد مع هذه المشكلة المجموعة هي بالنسبة لي واحدة من زميل التدريس أو المصدقة على السير عبر حرم أخذ بعض الصور من الناس واضحة يمكن تحديدها ولكن غير، الأماكن، أو الأشياء، ثم كل عام وأنا إدارة بطريقة أو بأخرى لحذف بطريق الخطأ أو الفاسدة بطاقة وسائل الإعلام الرقمية وهذا داخل الكاميرا. ولكن ليست صفقة كبيرة. يمكنني المضي قدما والمكونات ذلك في جهاز الكمبيوتر الخاص بي. أنا يمكن أن تجعل صورة الشرعي منه، لذلك في الكلام، عن طريق نسخ الأصفار و منها الخروج من أن بطاقة الذاكرة، سواء في بطاقة SD أو بطاقة فلاش مدمج أو مهما كنت على دراية. وبعد ذلك يمكننا أن يسلم بها. وبالتالي فإن التحدي الذي ينتظرنا، من بين أمور أخرى الامور بالنسبة لك، وسوف تكون لكتابة كود C أن يتعافى في مجمله مجموعة من سوف ملفات JPEG بالنسبة لي وكشفت يكون هؤلاء الناس، الأماكن، أو الأشياء. وسنقوم أيضا التحدث في هذه المشكلة تعيين وخلال الأيام القادمة، عن الرسومات بشكل عام. استخدمنا لهم، وبطبيعة الحال، للخروج. ولكن كنت قد اتخذت لمنح نوع من توجد هذه المفاهيم على مستوى عال من المستطيلات والأشكال البيضاوية. لكن تحت غطاء محرك السيارة هناك بكسل. وكان لديك لبدء التفكير في تلك. أو سوف للتعيين ص 4 أن نفكر حول الفجوة بين الطوب، وكيف بسرعة كنت الكرة تتحرك في جميع أنحاء الشاشة للخروج. حتى لا يكون هناك هذه الفكرة من النقاط على الشاشة هذا حيز اللعب بالفعل. الآن ماذا أنت ترى، رغم ذلك، هو ما تحصل على شاشة الكمبيوتر. إذا كنت قد شاهدت من أي وقت مضى بعض جيدة أو تلفزيون سيئة، خلاف هم الى حد كبير علاج للجمهور مثل technophobes الذين لا حقا أعرف الكثير عن الحوسبة. وهكذا فإنه من السهل جدا للشرطة المباحث أن أقول، يمكنك تنظيف ما يصل بالنسبة لي؟ أو تعزيز، أليس كذلك؟ تعزيز مثل الكلمة الطنانة في معظم أي عرض الجريمة ذات الصلة. والواقع هو إذا كنت تأخذ جدا الصورة ضبابية من المشتبه به شيئا سيئا، لا يمكنك فقط تعزيزه. لا يمكنك تكبير ما لا نهاية. لا يمكنك أن ترى في بريق من شخص ما العين الذين ارتكبوا تلك جريمة معينة، على الرغم من انتشار هذه على شاشة التلفزيون. وحتى مع ذلك دعونا أن تحفيز المشكلة القادمة مع مجموعة لمحة بعض البرامج التي قمت قد تكون مألوفة. [تشغيل الفيديو] -OK. الآن، دعونا الحصول على نظرة فاحصة على لك. -لأنه عقد. تشغيل هذا مرة أخرى. -انتظر لحظة. يسير في الاتجاه الصحيح. هناك. تجميد ذلك. كامل الشاشة. -OK. تجميد ذلك. -تشديد على ذلك، سوف يا؟ المتجهات في على هذا الرجل من العجلة الخلفية. التكبير في الحق هنا على هذه البقعة. ، مع الحق في المعدات، وتصويرها يمكن تكبير وشحذ. -ما هذا؟ -إنها برنامج تعزيز. هل بإمكانك الواضح أن يصل أي؟ -I لا أعرف. دعونا تعزيزه. -A-تعزيز القسم 6. -I تعزيز التفصيل و- -أعتقد أن هناك ما يكفي لتعزيز. الإفراج عنها إلى الشاشة. -تعزيز انعكاس في عينها. دعنا تشغيل هذا من خلال تعزيز الفيديو. إدغار-، يمكنك تعزيز هذا؟ هانغ جرا. -I've تم العمل على هذا التفكير. -شخص ما التفكير. للانعكاس. -هناك انعكاس من وجه الرجل. -انعكاس. -هناك انعكاس. التكبير في على المرآة. أنت يمكن أن نرى انعكاس. هل بإمكانك تعزيز صورة من هنا؟ هل بإمكانك تعزيز له الحق هنا؟ هل بإمكانك تعزيز ذلك؟ هل بإمكانك تعزيز ذلك؟ هل يمكن أن نعزز هذا؟ -يمكنك تحسين ذلك؟ امسك على الثانية، سوف تعزز. التكبير في على الباب. -X10. التكبير. [ضحك] -نتحرك فيها -الانتظار، ووقف. وقفة. وقفة ذلك. تناوب 75 درجة حول العمودي من فضلك. [ضحك] وقفة، والعودة إلى الجزء حول الباب مرة أخرى. -حصلت على صورة محسن التي يمكن النقطية؟ لربما يمكننا استخدام براديب سين طريقة لمعرفة إلى النوافذ. وهذا البرنامج هو حالة من الفن. -قيمة الرمز هو خارج. ، مع الحق في الجمع من الخوارزميات. -انه اتخذ خوارزميات الإضاءة ل المستوى التالي، ويمكنني استخدامها ل تعزيز هذه الصورة. للقفل على وتوسيع محور ض. -تعزيز. -تعزيز. -تعزيز. -تجميد وتعزيز. [END تشغيل الفيديو] DAVID J. مالان: إذن مشكلة تعيين 5 هو ما ينتظرنا هناك. لذلك سنقوم قريبا الحصول على فهم أفضل من متى وماذا يمكنك ونحن لا يمكن أن تعزز بهذه الطريقة. ولكن أولا، دعونا العودة اهتمامنا لبعض اللبنات سنقوم تحتاج إلى أن تكون قادرة على ان اقول ان القصة. لذلك أذكر بأننا وجه هذه الصورة على الاثنين وقليلا الاسبوع الماضي. وهذا يصف تخطيط الأشياء في ذاكرة الكمبيوتر الخاص بك عندما تشغيل بعض البرامج. قطاع التكنولوجيا حتى اعلى، التذكير، يشير إلى الأصفار الفعلية ومنها التي تشكل البرنامج. هناك، دون أن بعض تهيئة أو البيانات غير مهيأ، والتي عادة ما يشير إلى أشياء مثل الثوابت أو سلاسل أو المتغيرات العالمية التي لديها تم الإعلان في وقت مبكر. هناك كومة، لكننا سوف يأتي عد إلى أنه في بعض الشيء. وبعد ذلك هناك المكدس. مثل الكثير من كومة من الصواني في كافتيريا، وهذا هو المكان الذي يحصل الذاكرة الطبقات والطبقات كلما أنت تفعل ما في البرنامج؟ ما هو استخدام المكدس ل؟ نعم؟ نداء ظيفة. أي وقت استدعاء دالة، انها نظرا لشظية من الذاكرة لل المتغيرات المحلية أو معلماته. وبالصور، ونحن نرى أنه مع كل وظيفة المتعاقبة دعا، عند A يدعو B C يدعو يدعو D، فإنها الحصول على الطبقات إلى المكدس. وداخل كل من تلك الشرائح من الذاكرة هي في جوهرها نطاق فريد من نوعه لذلك وظيفة، والتي، بطبيعة الحال، إشكالية إذا كنت ترغب في تسليم من وظيفة واحدة إلى قطعة أخرى البيانات التي تريدها ليتحور أو تغيير. وذلك ما كان لدينا الحل لتمكين وظيفة ممثلة كومة واحدة تأطير لتغيير داخل الذاكرة من إطار المكدس آخر؟ كيف تفعل هذه الكلام اثنين إلى واحد آخر؟ ذلك عن طريق مؤشرات أو عناوين، والتي، مرة أخرى، فقط تصف فيها في الذاكرة، عن طريق محددة لدغة العدد، وخاصة يمكن العثور على القيمة. لذلك أذكر آخر مرة جدا واصلنا القصة وبدا في برنامج عربات التي تجرها الدواب إلى حد ما. وهذا البرنامج هو عربات التي تجرها الدواب لبضع الأسباب، ولكن الأكثر إثارة للقلق هو لأنه فشل في التحقق من ماذا؟ نعم، فإنه فشل في التحقق من المدخلات. آسف؟ إذا كان أكثر من 12 حرفا. بذكاء لذلك جدا، عند استدعاء memcopy، والتي، كما يوحي اسمها، فقط الذاكرة نسخ من حجة الثانية في أول حجة لها. الحجة الثالثة، بذكاء جدا، و فحص للتأكد من أن كنت لا نسخ أكثر من، في هذه الحالة، وطول من بار، عدد من الشخصيات، إلى الوجهة، والذي هو هذا مجموعة C. ولكن المشكلة هي أن ما إذا C نفسها ليست كبيرة بما فيه الكفاية للتعامل مع ذلك؟ وأنت تسير لنسخ عدد من بايت التي كنت قد أعطيت. ولكن ماذا لديك في الواقع أكثر بايت مما لديك غرفة لل؟ حسنا، هذا البرنامج بحماقة جدا فقط العائدات عمياء لاتخاذ أي انها معين، مرحبا مائل 0 هو كبيرة إذا سلسلة قصيرة بما فيه الكفاية، مثل خمسة أحرف. ولكن لو كان في الواقع 12 حرفا أو 1،200 حرفا، شاهدنا آخر مرة ان كنت مجرد الذهاب الى تماما الكتابة الذاكرة التي لا ينتمي لك. وأسوأ الحالات، إذا قمت بالكتابة فوق ذلك الجزء الأحمر هناك والتي كنا نسميها العودة عنوان - هذا هو فقط حيث الكمبيوتر تلقائيا، بالنسبة لك، وراء مشاهد، الثنيات بعيدا قيمة 32 بت التي يذكر أن ما ينبغي التصدي له العودة عندما فو، هذه وظيفة أخرى، ويتم تنفيذ. انها كسرة الخبز من نوع التي تقوم بإرجاع. إذا قمت بالكتابة فوق ذلك، يحتمل أن تكون، إذا كنت الرجل سيئة، يمكن يمكن يحتمل أن تولي شخص ما الكمبيوتر. وعليك بالتأكيد تحطم ذلك في معظم الحالات. الآن وقد تفاقمت هذه المشكلة فقط كما بدأنا نتحدث عن الذاكرة الإدارة بشكل عام. وmalloc، لتخصيص الذاكرة، هو الوظيفة التي يمكننا استخدامها لتخصيص الذاكرة عندما كنا لا نعرف مقدما أننا قد تحتاج الى بعض. لذلك، على سبيل المثال، إذا أعود إلى الأجهزة هنا. وأنا فتح من آخر مرة hello2.c، أذكر هذا البرنامج هنا، والتي بدا شيئا قليلا من هذا القبيل، فقط ثلاثة خطوط - أذكر اسمك، ثم اسم السلسلة، على اليسار، يساوي getstring. وبعد ذلك يمكننا طباعته، اسم المستخدم. لذلك كان هذا البرنامج بسيطة عظمى. أن يكون واضحا، اسمحوا لي أن المضي قدما وجعل مرحبا-2. انا ذاهب الى القيام مائل نقطة مرحبا-2. تذكر اسمك - ديفيد. دخول. مرحبا ديفيد. يبدو للعمل موافق. ولكن ما يحدث في الواقع تحت غطاء محرك السيارة هنا؟ دعونا أولا قشر يعود بعض الطبقات. سلسلة هو مجرد مرادف قمنا أدركت لماذا؟ نجمة شار. لذلك دعونا جعله أكثر قليلا غامضة ولكن الأصح أن هذا من الناحية الفنية هو نجم شار، وهو ما يعني أن اسم، نعم، هو متغير. ولكن ما مخازن اسم هو عنوان شار، الذي يشعر غريبا بعض الشيء لأنني الحصول على العودة سلسلة. انني اتلقى يعود متعددة حرف ليس حرف. ولكن بالطبع، ما عليك سوى أول عنوان شار إلى تذكر حيث سلسلة كاملة لأن لماذا؟ كيف يمكنك معرفة أين نهاية السلسلة هو معرفة بداية؟ الصفر مائل. حتى مع تلك القرائن اثنين على معرفة قبل بداية ونهاية أي سلسلة هي، طالما أنهم شكلت بشكل صحيح مع أن فارغة فاصل، بأن الصفر مائل. ولكن هذا يدعو getstring. واتضح أن getstring وقد تم كل هذا الوقت نوع من الغش بالنسبة لنا. انه تم القيام بهذا العمل، للتأكد، الحصول على سلسلة من المستخدم. ولكن أين تلك الذاكرة قد تأتي من؟ إذا رجعنا إلى الصورة هنا و تطبيق تعريف من مجرد منذ اللحظة، أن المكدس هو المكان الذاكرة يذهب عندما يتم استدعاء وظائف، من هذا المنطق، عند استدعاء getstring، وبعد ذلك اكتب في D-A-V-I-D أدخل، حيث هو D-A-V-I-D مائل الصفر المخزنة، استنادا إلى القصة لقد قال لنا الآن؟ يبدو أن يكون في المكدس، أليس كذلك؟ عند استدعاء سلسلة الحصول تحصل على شريحة صغيرة من الذاكرة على المكدس. لذلك من المعقول أن D-A-V-I-D يتم تخزين الصفر مائل هناك في المكدس. ولكن الانتظار لمدة دقيقة، getstring عوائد هذه السلسلة، إذا جاز التعبير، وهو ما يعني انها علبة من الكافتيريا واقلعت المكدس. وقلنا المرة الأخيرة أنه بمجرد و ترجع وظيفة، وكنت تأخذ ذلك صينية، إذا جاز التعبير، من المكدس، ما يمكن أن نفترض حول بقايا تلك الذاكرة؟ أنا نوع من أعادت رسم لهم كعلامات استفهام لأنها تصبح فعالة القيم غير معروف. يمكن إعادة استخدامها عند بعض يتم استدعاء الدالة المقبل. وبعبارة أخرى، إذا كان لنا أن يحدث ليتم تخزين - انا رسم صورة سريعة هنا من المكدس. إذا كان لنا أن يحدث ليكون أسفل الرسم من الجزء ذاكرتي، وسوف نقول أن هذا هو المكان من الذاكرة التي تحتلها ج الرئيسية وربما ARG و ARG الخامس وأي شيء آخر في البرنامج، عندما getstring يسمى، getstring يفترض يحصل قطعة من الذاكرة هنا. ثم D-A-V-I-D بطريقة أو بأخرى ينتهي في هذه الوظيفة. وانا ذاهب الى تبسيط. ولكن دعونا نفترض أن لD-A-V-I-D مائل الصفر. وهكذا يتم استخدام هذا العدد الكبير من وحدات البايت في إطار لgetstring. ولكن بمجرد getstring العودة، ونحن وقال آخر مرة أن هذه الذاكرة أكثر هنا يصبح كل - woops! - جميع يصبح محوها بشكل فعال. ويمكن أن نفكر في هذا السؤال كما هو الحال الآن يصادف لأن الذي يعرف ما يحدث لتصبح من تلك الذاكرة. في الواقع، وأنا في كثير من الأحيان استدعاء وظائف غير getstring. وبأسرع ما أسميه بعض الدول الاخرى وظيفة من getstring، ربما ليس في هذا البرنامج بالذات ونحن ننظر فقط ولكن بعض في أخرى، وبالتأكيد بعض الدول الاخرى وظيفة قد ينتهي يولى هذه البقعة المقبل في المكدس. لذلك لا يمكن أن يكون يخزن getstring D-A-V-I-D على المكدس لأنني سوف تفقد على الفور الوصول إليها. ولكننا نعرف أنهم getstring فقط بإرجاع ماذا؟ انها ليست العودة إلى لي ستة أحرف. ما هو العودة حقا فعلت نستنتج آخر مرة؟ عنوان أول. لذلك بطريقة أو بأخرى، عندما قمت بالاتصال getstring، انها تخصيص جزء من الذاكرة ل السلسلة التي المستخدمين اكتب و ثم يعود عنوان منه. واتضح أنه عندما تريد وظيفة تخصيص الذاكرة في هذا الطريق والعودة إلى الشخص الذي يسمى أن وظيفة، وعنوان أن جزءا من الذاكرة، كنت على الاطلاق لا يمكن وضعها في المكدس في أسفل، لأن وظيفيا انها مجرد سوف لا تصبح لك جدا بسرعة، لذلك ربما يمكنك تخمين حيث نحن على الارجح الى إرم بدلا من ذلك، ما يسمى الكومة. حتى بين الجزء السفلي من الذاكرة لديك تخطيط والجزء العلوي من الذاكرة لديك تخطيط هي في مجمله مجموعة من القطاعات. واحد هو المكدس، والحق أعلاه هو الكومة. والرجمة هي مجرد قطعة مختلفة من الذاكرة التي لا تستخدم لوظائف عندما كنت طالب. انها تستخدم للذاكرة على المدى الطويل، عندما تريد وظيفة واحدة للاستيلاء على بعض الذاكرة وتكون قادرة على الصمود إليها دون أن تفقد التحكم فيه. الآن هل يمكن أن ربما على الفور نرى أن هذا ليس بالضرورة التصميم المثالي. كما خصص البرنامج على الذاكرة المكدس، أو كما تسمونه أكثر و المزيد من الوظائف، أو كما كنت تخصيص الذاكرة على كومة مع malloc قبالة كما getstring يقوم به، ما بوضوح ويبدو أن المشكلة لا مفر منه؟ الحق. مثل حقيقة أن هذه السهام ويشيران إلى بعضهما البعض لا يبشر بالخير. وبالفعل، ونحن يمكن أن تعطل بشكل سريع جدا برنامج في أي عدد من الطرق. في الواقع، وأعتقد أننا قد يكون يتم ذلك عن طريق الخطأ مرة واحدة. أو إن لم يكن، دعونا نفعل ذلك تعمد الآن. اسمحوا لي المضي قدما وبسرعة فائقة إرسال برنامج يسمى dontdothis.c. والآن سأذهب هنا و لا تشمل stdio.h حادة. دعونا نعلن يأخذ وظيفة فو بدون وسائط، والذي هو تدل كذلك عن طريق الفراغ. والشيء الوحيد فو هو بصدد القيام به هو استدعاء فو، والتي ربما ليست أذكى فكرة، ولكن فليكن ذلك. ENT باطلة الرئيسي. الآن الشيء الوحيد الرئيسي هو الذهاب القيام به هو دعوة فو كذلك. وفقط لركلات، وانا ذاهب للذهاب قبل وهنا نقول printf "مرحبا من فو ". موافق. حتى إذا لم أكن جعل أي أخطاء، جعل dontdothis مائل نقطة. ودعونا نفعل ذلك في إطار أكبر - نقطة مائل، dontdothis. هيا. اه اه. على ما يبدو، يمكنك القيام بذلك. اللعنة. موافق. الانتظار. الوقوف إلى جانب. هل نحن - فعلنا استخدامه مع السيارة. [تنهدات] أنا أعرف ولكن أعتقد أننا حذف ذلك تماما. اه، نعم. اللعنة. حل هذه روب. ماذا؟ الأمر في غاية البساطة. نعم، لجأنا قبالة الأمثل. موافق، والوقوف وداعا. الآن أشعر بتحسن. موافق. حسنا. لذلك دعونا إعادة ترجمة هذا - تجعلك dontdothis. قد تضطر إلى إعادة تسمية هذا ل dothis.c في مجرد لحظة. هناك نذهب. شكرا لك. موافق. وبالتالي فإن حقيقة أن كنت الطباعة من كان شيئا في الواقع مجرد تباطؤ العملية التي نحن أن وصلت إلى هذه النقطة. موافق. تفو! فما هو في الواقع يحدث؟ السبب هناك، مثلما جانبا، هو القيام بأي شيء من حيث المدخلات و الناتج يميل إلى أن يكون أبطأ لأنك لديك لكتابة أحرف ل الشاشة، ولديها للتمرير. قصة قصيرة طويلة، كان لي فعلا حدث ذلك بفارغ الصبر، سيكون لدينا ينظر إلى هذا النتيجة النهائية كذلك. الآن بعد أن حصلت على ركوب الطباعة المنبثقة، نرى ذلك على الفور. فلماذا يحدث هذا. كذلك، فإن تفسير بسيط، بطبيعة الحال، هو أن فو ربما لا ينبغي أن تطلق على نفسها اسم. الآن بعبارات عامة، هذا هو العودية. وكنا نظن بضعة أسابيع منذ العودية جيدة. العودية هو بهذه الطريقة السحرية ل التعبير عن نفسك بإيجاز السوبر. ويعمل فقط. ولكن هناك سمة أساسية من سمات كل من برامج العودية تحدثنا حول ونظرت حتى الآن، والتي وكان أن لديهم ما؟ وهناك حالة قاعدة، والتي كان بعض الثابت ترميز القضية التي قال في بعض الحالات لا ندعو فو، والذي هو بوضوح ليس الحال هنا. ذلك ما يحدث حقا من حيث هذه الصورة؟ حسنا، عندما فو المكالمات الرئيسي، يحصل على شريحة الذاكرة. عندما يدعو فو فو، فإنه يحصل شريحة الذاكرة. عندما يدعو فو فو، فإنه يحصل على شريحة. فإنه يحصل على شريحة. فإنه يحصل على شريحة. لأن فو أبدا العودة. نحن أبدا محو واحدة من تلك إطارات من المكدس. لذلك نحن تهب من خلال كومة، وليس أن أذكر الذي يعرف ما آخر، و نحن تجاوز حدود دينا يسمى الجزء من الذاكرة. الخطأ الذهاب تجزئة كاذبة. وبالتالي فإن الحل هناك بوضوح لا تفعل هذا. ولكن المعنى الضمني هو أن أكبر، نعم، ليست هناك بعض الحد، حتى لو انها ليست واضحة المعالم، لكيفية العديد من الوظائف التي يمكن أن نطلق في البرنامج، كم مرة وظيفة يمكن استدعاء نفسها. على الرغم من ذلك حتى فعلنا الوعظ العودية كما يحتمل أن هذا الشيء السحري ل بضعة أسابيع قبل لسيغما وظيفة، وعندما نحصل على البيانات الهياكل وCS50، سترى أخرى تطبيقات لذلك، انها ليست بالضرورة أفضل شيء. لأنه إذا كان يستدعي دالة نفسها، تطلق على نفسها، حتى إذا كان هناك قاعدة الحالة، إذا كنت لا تصل هذه الحالة قاعدة ل1،000 مكالمات أو مكالمات 10،000، من خلال ذلك الوقت كنت قد نفد من الغرفة على جهاز يسمى المكدس وضرب بعض شرائح أخرى من الذاكرة. لذلك هو أيضا تصميم مفاضلة بين الأناقة وبين متانة خاص بك التنفيذ. لذلك هناك الجانب السلبي أخرى أو مسكتك آخر لما كنا تم القيام حتى الآن. عندما دعوت getstring - اسمحوا لي أن أعود إلى مرحبا-2. تلاحظ أن ادعو getstring، التي تعود عنوان. وندعي اليوم أن عنوان هو من الكومة. والآن أنا طبع و السلسلة عند هذا العنوان. ولكن لدينا يسمى أبدا عكس getstring. لقد كان علينا أن أبدا calll وظيفة مثل ungetstring، حيث يمكنك تسليم الظهر تلك الذاكرة. ولكن بصراحة نحن ربما كان ينبغي أن يكون. لأنه إذا واصلنا طرح الكمبيوتر للذاكرة، عن طريق شخص مثل getstring ولكن لم يعيدها، وبالتأكيد ذلك أيضا لا بد أن يؤدي إلى المشاكل حيث اننا نفاد الذاكرة. وفي الواقع، يمكننا أن ننظر لهذه مشاكل مع الأداة الجديدة التي الاستخدام هو خفي قليلا لنوع. ولكن اسمحوا لي أن تمضي قدما ودفقة عنه على الشاشة في مجرد لحظة. انا ذاهب الى المضي قدما وتشغيل Valgrind مع المعلمة التي الأمر الأول وسيطة سطر هو اسم هذا البرنامج مرحبا-2. ولسوء الحظ انها الإخراج هو بوحشية معقدة لا لسبب جيد. لذلك نرى أن كل الفوضى. ديفيد هو القول اسمي. ولهذا البرنامج الواقع الحالي. والآن نحصل على هذا الناتج. حتى Valgrind مشابه في الروح لGDB. انها ليست في حد ذاتها المصحح. ولكن هذا المدقق الذاكرة. انها البرنامج الذي سيتم تشغيل الخاص برنامج واقول لكم لو انك سألت الكمبيوتر للذاكرة وأبدا سلمها مرة أخرى، مما يعني أن لديك تسرب الذاكرة. وتسرب الذاكرة تميل إلى أن تكون سيئة. ولكم هو مستخدمي أجهزة الكمبيوتر لديها شعرت ربما هذا، سواء كان لديك ماك أو جهاز كمبيوتر. لقد سبق لك أن تستخدم جهاز الكمبيوتر الخاص بك ل في حين وليس تمهيد في عدة أيام، أو كنت قد حصلت للتو على الكثير من برامج تشغيل، والشيء عنة تباطؤ لوقف طحن، أو على الأقل انها فائقة مزعج للاستخدام، لأن كل شيء فقط حصلت بطيئة عظمى. الآن يمكن أن يكون أي عدد من الأسباب. يمكن أن يكون حلقة لا نهائية، خطأ في شخص ما رمز، أو، ببساطة أكثر، فإنه قد يعني أن كنت تستخدم أكثر الذاكرة، أو تحاول، من الخاص الكمبيوتر لديه فعلا. وربما هناك خلل في بعض البرامج أن يتساءلون عن الذاكرة. كانت المتصفحات لسنوات سيئة السمعة ل هذا، طلب المزيد والمزيد من الذاكرة ولكن لم يسلم مرة أخرى. بالتأكيد، إذا كان لديك فقط محدود مقدار الذاكرة، لا يمكن أن نطلب مرات عديدة بلا حدود ل بعض من تلك الذاكرة. وذلك ما تراه هنا، على الرغم من مرة أخرى خرج Valgrind هو معقدة دون داع لمحة الأولى، وهذا هو الجزء مثيرة للاهتمام. كومة - الاستخدام في الخروج. حتى هنا كيف كان مقدار الذاكرة في الاستخدام في كومة في تنقضي خرجت برنامجي - يبدو ستة بايت في كتلة واحدة. لذلك أنا ذاهب لموجة يدي في ما هو كتلة. التفكير في الأمر هو مجرد قطعة، وأكثر كلمة الفنية للقطعة. لكن ستة بايت - ما هي بايت الست التي كانت لا تزال في الاستخدام؟ بالضبط. D-A-V-I-D مائل الصفر، خمسة إلكتروني اسم بالإضافة إلى فاصل فارغة. لذلك هذا البرنامج لاحظت أنني Valgrind طلب ستة بايت، على ما يبدو، من خلال طريقة getstring، ولكن لم أعطى لهم مرة أخرى. في واقع الأمر، وهذا قد لا يكون الأمر كذلك واضح إذا برنامجي ليس ثلاثة خطوط، ولكنها ل300 خطوط. حتى نستطيع أن نقدم الواقع أمر آخر وسيطة سطر لValgrind ل جعله أكثر مطول. انها مزعجة قليلا لنتذكر. ولكن إذا كنت تفعل - دعونا نرى. تسرب - هل كان تسرب - حتى أنني لا أتذكر ما هو عليه من ناحية. - تسرب الاختيار يساوي كامل. نعم، شكرا لك. - تسرب الاختيار يساوي كامل. دخول. يتم تشغيل نفس البرنامج. اكتب في ديفيد مرة أخرى. الآن أرى أكثر من ذلك بقليل من التفصيل. ولكن تحت ملخص كومة، والتي مطابق لأربعة - آه، هذا هو نوع من لطيفة. الآن Valgrind يبحث الواقع اصعب قليلا في قانون بلدي. وانها القول، على ما يبدو، malloc في خط - نحن التصغير. في السطر - ونحن لا نرى ما سطر هو عليه. ولكن malloc هو المذنب الأول. هناك بلوق في malloc. كل الحق؟ حسنا، لا. أليس كذلك؟ دعوت getstring. getstring يدعو يبدو malloc. وذلك ما سطر من التعليمات البرمجية على ما يبدو على خطأ لأنه تخصيص هذه الذاكرة؟ دعونا نفترض أن كل من كتب malloc وقد حولها طويلة بما فيه الكفاية أنه من ليس على خطأ. لذلك فمن المحتمل الألغام. getstring في cs50.c - لذلك هذا هو ملف في مكان ما على الكمبيوتر - في خط 286 ويبدو أن الجاني. الآن دعونا نفترض أن كان CS50 حول لمبلغ محترم من الوقت، لذلك نحن أيضا معصوم. ولذا فإنه على الأرجح ليس في getstring أن علة تقع، وإنما في مرحبا-2.C خط 18. لذلك دعونا نلقي نظرة على ما كان هذا الخط 18. اه. بطريقة أو بأخرى هذا الخط ليس بالضرورة عربات التي تجرها الدواب، في حد ذاته، ولكن هذا هو السبب وراء ذلك تسرب الذاكرة. ذلك ببساطة فائقة، ما من شأنه حدسي يكون الحل هنا؟ إذا نطلبه الذاكرة، لم تكن يعطيها ظهره، والتي يبدو أن المشكلة مع مرور الوقت لأن جهاز الكمبيوتر الخاص بي قد نفدت الذاكرة، قد يتباطأ أسفل، أشياء سيئة يمكن أن يحدث، حسنا، ما هو الحل البديهي البسيط؟ مجرد اعطاء إعادته. كيف يمكن تحرير تلك الذاكرة؟ جيدا، والحمد لله انها بسيطة جدا أن أقول مجرد اسم المجانية. ونحن لم تفعل هذا من قبل. ولكن يمكنك أن تفكر أساسا من الحرة كما عكس malloc. الحر هو نقيض تخصيص الذاكرة. وحتى الآن اسمحوا لي أن إعادة ترجمة هذا. جعل مرحبا-2. اسمحوا لي تشغيله مرة أخرى. مرحبا-2 ديفيد. لذلك يبدو للعمل في بالضبط بنفس الطريقة. ولكن إذا أعود إلى Valgrind وإعادة التشغيل أن نفس الأمر على بلدي حديثا ترجمة البرنامج، الكتابة باسمي كما كان من قبل - لطيفة. ملخص كومة - الاستخدام في الخروج - صفر بايت في كتل الصفر. وهذا هو سوبر لطيفة، جميع وأطلق سراح كتل الكومة. أي تسرب ممكن. لذلك الخروج، وليس مع مشكلة تعيين 4، ولكن مع مشكلة تعيين 5، والطب الشرعي وما بعده، وهذا أيضا سوف تصبح مقياس للصحة الخاصة بك برنامج، أم لا يكون لديك أو ليس لديك تسرب الذاكرة. ولكن لحسن الحظ، ليس فقط يمكنك العقل من خلالهم بشكل حدسي، والتي هو، يمكن القول، من السهل للبرامج الصغيرة ولكن من الصعب للبرامج أكبر، Valgrind، لتلك البرامج أكبر، يمكن أن تساعدك على تحديد المشكلة معينة. ولكن هناك مشكلة واحدة أخرى التي قد تنشأ. اسمحوا لي أن فتح هذا الملف هنا، والتي هي، مرة أخرى، مثال بسيط نوعا ما. ولكن دعونا نركز على ما هل هذا البرنامج. وهذا ما يسمى memory.c. سنقوم بنشر هذا في وقت لاحق اليوم في الرمز البريدي من التعليمات البرمجية المصدر اليوم. وتلاحظ أن لدي وظيفة تسمى و أن لا يأخذ الحجج و يعود شيئا. في خط 20، وأنا على ما يبدو إعلان مؤشر إلى int واصفا اياه بانه السينية. أنا تعيين هو عودة قيمة malloc. ومجرد أن تكون واضحة، وكم أنا بايت أنا ربما الحصول على العودة من malloc في هذه الحالة؟ ربما 40. أين تحصل على هذا من؟ حسنا، إذا كنت أذكر أن الباحث في كثير من الأحيان 4 بايت، على الأقل هو في الأجهزة، 10 مرة 4 ومن الواضح 40. حتى malloc تعود على عنوان قطعة من الذاكرة وتخزين تلك معالجة في نهاية المطاف في العاشر. لكي نكون واضحين، ما ثم يحدث؟ حسنا، اسمحوا لي أن يعود مرة أخرى لدينا صورة هنا. اسمحوا لي ليس مجرد رسم الجزء السفلي من بلدي ذاكرة الكمبيوتر، واسمحوا لي أن تمضي قدما و رسم المستطيل كله أن تمثل كل من ذاكرة الوصول العشوائي بلدي. سوف نقول أن المكدس هو في القاع. وهناك شريحة في النص البيانات غير مهيأ. ولكن أنا مجرد الذهاب الى تلك مجردة أمور أخرى بعيدا عن نقطة، نقطة نقطة. أنا ذاهب لمجرد الإشارة إلى هذا كما كومة في الأعلى. ثم في الجزء السفلي من هذه الصورة، لتمثيل الرئيسي، وانا ذاهب لاعطائها الذاكرة شرائح على المكدس. لو، وانا ذاهب لاعطائها شريحة من الذاكرة على المكدس. الآن، وأنا حصلت على التشاور بلدي شفرة المصدر مرة أخرى. ما هي المتغيرات المحلية للرئيسية؟ على ما يبدو شيئا، حتى أن شريحة فارغة فعال أم لا حتى كبيرة كما كما كنت رسمها. ولكن في و، ولدي متغير محلي، وهو ما يسمى خ. لذلك انا ذاهب الى المضي قدما وإعطاء و قطعة من الذاكرة، واصفا إياه السينية. والآن malloc من 10 مرات 4، malloc حتى 40، حيث أن هذا الذاكرة القادمة من؟ ليس لدينا صورة مرسومة مثل هذا من قبل. ولكن دعونا نفترض أنه فعال القادمة من هنا، لذلك واحد، اثنان، ثلاثة، أربعة، خمسة. والآن أحتاج 40 من هذه. ولذا فإنني سوف يفعل نقطة، نقطة، نقطة تشير إلى أن هناك المزيد من الذاكرة يعود من الكومة. الآن ما هو العنوان؟ دعونا اختيار التعسفي لدينا معالجة كما هو الحال دائما - Ox123، على الرغم من انه سيكون على الارجح أن يكون شيئا مختلفا تماما. هذا هو عنوان البايت الأول في الذاكرة التي أنا أسأل malloc ل. لذلك باختصار، بمجرد خط 20 ينفذ، ما هو حرفيا تخزينها داخل س هنا؟ Ox123. Ox123. والثور هو رتيبا. بل يعني فقط هنا هو ل رقم سداسي عشري. ولكن ما هو المفتاح هو أن ما عندي مخزن في العاشر، والذي هو متغير محلي. ولكن نوع البيانات الخاصة به، ومرة ​​أخرى، هو عنوان لكثافة العمليات. حسنا، انا ذاهب لتخزين Ox123. ولكن مرة أخرى، إذا كان هذا قليلا جدا معقدة دون داع، وإذا كنت التمرير مرة أخرى، يمكننا مجردة هذا بعيدا جدا معقول ونقول فقط أن x هو ل مؤشر إلى أن جزءا من الذاكرة. موافق. والسؤال المطروح الآن في متناول اليد هو ما يلي - خط 21، كما تبين، هو عربات التي تجرها الدواب. لماذا؟ آسف؟ أنه لا يملك - أقول إن من جديد. كذلك، فإنه لا يخلو. لذلك هذا هو الثاني ولكن. لذلك هناك واحد آخر ولكن على وجه التحديد في السطر 21. بالضبط. هذا الخط بسيطة من التعليمات البرمجية هو مجرد تجاوز سعة المخزن المؤقت، وتجاوز سعة المخزن المؤقت. مخزن مؤقت يعني مجرد جزء من الذاكرة. ولكن هذا جزء من الذاكرة من حجم 10، 10 أعداد صحيحة، وهو ما يعني إذا كنا مؤشر إلى أنه باستخدام السكر النحوية من تدوين مجموعة، مربع بين قوسين، لديك حق الوصول إلى × قوس 0 × قوس 1 ×، قوس نقطة، نقطة، نقطة. × قوس 9 هو أكبر واحد. حتى لو كنت تفعل × قوس 10، حيث انا ذاهب فعلا في الذاكرة؟ حسنا، إذا كان لدي 10 كثافة العمليات - دعونا فعلا رسم كل هذه من هنا. لذلك كان أن أول خمسة. وهنا الخمسة الآخرين رجات. حتى العاشر قوس 0 هنا. × قوس 1 هو هنا. × قوس 9 هنا. × قوس 10 هو هنا، وهو ما يعني أنني أقول، في خط 21، والكمبيوتر لوضع عدد أين؟ عدد 0 أين؟ حسنا، انها 0، نعم. ولكن مجرد حقيقة أن لها 0 هو نوع من صدفة. يمكن أن يكون عدد 50، لكل ما يهمني. ولكننا نحاول وضعه في العاشر قوس 10، الذي هو فيه هذا ويوجه علامة استفهام، والتي هو ليس شيئا جيدا. ربما هذا البرنامج بشكل جيد للغاية تحطم نتيجة لذلك. الآن، دعونا نمضي قدما ونرى ما اذا كان هذا هو، في الواقع، فإن ما يحدث. جعل الذاكرة، لأن الملف يسمى memory.c. دعونا نمضي قدما وتشغيل ذاكرة البرنامج. حتى وصلنا محظوظ، في الواقع، على ما يبدو. وصلنا محظوظ. ولكن دعونا نرى ما اذا كنا الآن تشغيل Valgrind. للوهلة الأولى، قد برنامجي يبدو أن يكون صحيحا تماما. ولكن اسمحوا لي أن تشغيل Valgrind مع - تسرب الاختيار يساوي كامل على الذاكرة. والآن عند تشغيل هذا - مثيرة للاهتمام. الكتابة غير صالحة من حجم 4 في خط 21 من memory.c. خط 21 من memory.c هو أي واحد؟ أوه، مثيرة للاهتمام. ولكن الانتظار. حجم 4، ما هو اشارة الى؟ فعلت فقط واحدة الكتابة، لكنه من حجم 4. لماذا هو 4؟ انها لأنه عدد صحيح، والذي هو، مرة أخرى، أربعة بايت. لذلك وجدت Valgrind الخلل الذي أنا، نظرة عابرة في قانون بلدي، لم يفعل ذلك. وربما سيكون TF الخاص بك أو لا. ولكن ما Valgrind بالتأكيد وجدت أن لقد ارتكب خطأ هناك، حتى على الرغم من أننا حصلت على الحظ، والكمبيوتر قررت، إيه، أنا لا أذهب إلى تعطل فقط لأنك لمست بايت واحد، واحد الجدير كثافة من الذاكرة التي لم تملك في الواقع. حسنا، ما هو آخر عربات التي تجرها الدواب هنا. عنوان - هذا هو عنوان مجنون يبحث في ست عشري. وهذا يعني مجرد مكان في الكومة صفر بايت بعد كتلة من حجم 40 يتم تخصيص. اسمحوا لي أن التصغير هنا ومعرفة ما إذا كان هذا هو أكثر من ذلك بقليل مفيدة. مثيرة للاهتمام. يتم فقدان 40 بايت بالتأكيد في خسائر قياسية 1 من 1. مرة أخرى، أكثر من الكلمات مما هو مفيد هنا. ولكن استنادا إلى خطوط الضوء، حيث يجب أن تركز على الارجح بلدي الانتباه لعلة أخرى؟ يبدو وكأنه خط 20 من memory.c. لذلك إذا رجعنا إلى خط 20، وهذا هو واحد الذي قمت بتحديده في وقت سابق. وانها ليست عربات التي تجرها الدواب بالضرورة. ولكن لدينا هذا عكس آثاره. فكيف يمكنني تصحيح على الأقل واحدة من تلك الأخطاء؟ ماذا يمكن أن أفعل بعد خط 21؟ يمكن أن أفعله خالية من العاشر، وذلك هو لتعيد تلك الذاكرة. وكيف يمكنني إصلاح هذا الخطأ؟ وأود أن تذهب بالتأكيد أبعد من 0. لذلك اسمحوا لي أن أحاول وإعادة تشغيل هذا. آسف، وتذهب بالتأكيد أبعد من 9. جعل الذاكرة. اسمحوا لي أن أعد Valgrind في إطار أكبر. ونتطلع الآن. لطيفة. وأطلق سراح جميع الكتل الكومة. أي تسرب ممكن. وحتى فوق ذلك، ليس هناك ذكر أي أكثر من الحق غير صالحة. لمجرد الحصول على الجشع، ودعونا معرفة ما إذا كان مظاهرة أخرى لا يذهب على النحو المنشود - أنا لم تحصل على الحظ قبل لحظة. وحقيقة أن هذا هو 0 ربما مضللة دون داع. دعونا نفعل فقط 50، وهو إلى حد ما التعسفي عدد، وجعل الذاكرة ذاكرة نقطة مائلة - لا تزال تحصل على الحظ. لا شيء تحطمها. لنفترض أنا فقط أفعل شيئا حقا أحمق، وأنا أفعل 100. اسمحوا لي أن إعادة تشكيل الذاكرة، نقطة خفض الذاكرة - حصلت على الحظ مرة أخرى. كيف حوالي 1،000؟ رجات بعده، تقريبا، حيث يجب أن أكون؟ جعل الذاكرة - اللعنة. [ضحك] موافق. دعونا لا تسكع بعد الآن. الذاكرة باعادتها. هناك نذهب. حسنا. لذلك يبدو لك مؤشر 100،000 رجات ما وراء المكان الذي كان ينبغي أن يكون في الذاكرة، تحدث أمور سيئة. لذلك هذا هو الواضح أنه لا لذلك، حكم سريع الثابت. الأول هو نوع من استخدام المحاكمة والخطأ للوصول إلى هناك. ولكن هذا هو لأنه، قصة قصيرة طويلة، وينقسم أيضا ذاكرة الكمبيوتر الخاص بك في هذه الأمور تسمى شرائح. وأحيانا، الكمبيوتر فعلا أعطاك أكثر الذاكرة قليلا مما كنت تسأل عنه. ولكن لتحقيق الكفاءة، انها مجرد أسهل ل الحصول على المزيد من الذاكرة، ولكن فقط اقول لكم أن كنت الحصول على جزء منه. وإذا كنت محظوظا في بعض الأحيان، وبالتالي، قد تكون قادرة على تلمس الذاكرة التي لا تنتمي لك. لا يوجد لديك ضمان بأن ما قيمة كنت وضعت هناك سيبقى هناك، لأن الكمبيوتر لا يزال يعتقد انها ليست لك، لكنه لن بالضرورة ليصل إلى مقطع آخر من الذاكرة في الكمبيوتر وتحفز على خطأ مثل هذا واحد هنا. حسنا. أي أسئلة ثم على الذاكرة؟ حسنا. دعونا نلقي نظرة هنا، بعد ذلك، في شيء كنا أخذ ل منحت لبعض الوقت، والتي ودعا في هذا الملف cs50.h. لذلك هذا هو الملف. هذه ليست سوى مجموعة كاملة من تعليقات حتى أعلى. وكنت قد نظرت في هذا إذا كنت مطعون حول على الأجهزة. ولكن تبين أن في كل وقت، عندما كنا استخدام سلسلة بمثابة مرادف، والوسائل التي أعلنا كان ذلك مرادف مع هذا typedef والكلمة، لتعريف نوع. ونقوله أساسا، وجعل سلسلة مرادفا للنجمة شار. أن الوسائل التي المكدس خلقت هذه العجلات التدريب المعروفة باسم السلسلة. الآن وهنا مجرد نموذج أولي لgetchar. كنا قد رأينا ذلك من قبل، ولكن هذا في الواقع ما تقوم به. getchar يأخذ بدون وسائط، بإرجاع شار. getdouble يأخذ بدون وسائط، بإرجاع مزدوجة. getfloat يأخذ بدون وسائط، والعودة تعويم، وهكذا دواليك. getint هو هنا. getlonglong هو هنا. وgetstring هو هنا. وهذا كل شيء. هذا الخط الأرجواني هو المعالج أخرى التوجيه بسبب الوسم في بداية ذلك. حسنا. وحتى الآن اسمحوا لي أن انتقل إلى cs50.c. ونحن لن نتحدث طويلا في هذا الشأن. ولكن لتعطيك لمحة عن ما هو كان يحدث كل هذا الوقت، اسمحوا لي ان اذهب ل- دعونا نفعل getchar. حتى getchar هي في معظمها تعليقات. ولكن يبدو مثل هذا. لذلك هذا هو وظيفة الفعلية getchar التي كنا اتخاذ أمرا مفروغا منه موجودا. وعلى الرغم من أننا لم تستخدم هذا واحد التي غالبا ما، إذا من أي وقت مضى، انها على الأقل بسيطة نسبيا. لذلك يستحق أخذ نظرة سريعة على هنا. حتى getchar ديه حلقة لا نهائية، على ما يبدو عمدا بذلك. ثم يدعو - وهذا هو نوع من إعادة استخدام طيف من التعليمات البرمجية نحن أنفسنا كتب. ويدعو getstring. لأن ما تقوم به يعني للحصول على شار؟ كذلك، قد كذلك محاولة للحصول على خط كامل من النص من المستخدم و ثم مجرد إلقاء نظرة واحدة من تلك الأحرف. في خط 60، وهنا قليلا قليلا من التعقل الاختيار. إذا عاد getstring فارغة، دعونا لا المضي قدما. ذهب شيئا خاطئا. الآن هذا أمر مزعج بعض الشيء ولكن التقليدية في C. شار ماكس ربما يمثل ما فقط بناء على اسمها؟ انها ثابتة. انها مثل القيمة الرقمية لل أكبر شار يمكنك تمثيل مع لدغة واحدة، والذي هو على الارجح عدد 255، وهو أكبر عدد لك تمثل ثمانية بت، بدءا من الصفر. حتى لقد استخدام هذا، في هذه الدالة، عندما كتابة هذا الرمز، فقط ل إذا كان هناك شيء يذهب على نحو خاطئ في getchar لكن هدفها في الحياة هو لإرجاع شار، عليك أن تكون قادرا بطريقة ما للإشارة إلى المستخدم الذي حدث خطأ ما. لا يمكننا العودة فارغة. اتضح أن لاغية هو مؤشر. ومرة أخرى، لديه getchar لإرجاع شار. وبالتالي فإن الاتفاقية، إذا ما سارت الأمور الخطأ هو أنت، مبرمج، أو في هذه الحالة، لي مع المكتبة، وكان لي وتقرر فقط تعسفا، إذا شيء يذهب على نحو خاطئ، وانا ذاهب ل إرجاع عدد 255، الذي هو حقا يعني أننا لا يمكن، لا يمكن للمستخدم اكتب الحرف الذي يمثله عدد 255 لأننا كان لسرقتها كما يسمى قيمة الحارس ل تمثل مشكلة. الآن اتضح أن الطابع 255 ليست شيئا يمكنك كتابة على لوحة المفاتيح الخاصة بك، حتى انها ليست صفقة كبيرة. لا يلاحظ المستخدم أن لقد سرقت هذه الشخصية. ولكن إذا كنت ترى أي وقت مضى في صفحات الرجل على نظام الكمبيوتر بعض الإشارة إلى كل مباراة دولية ثابتة مثل هذا الذي يقول: في حالات الخطأ هذه القوة ثابتة تعاد، وهذا فعل كل بعض الإنسان منذ سنوات وتقرر بشكل تعسفي ل العودة هذه القيمة خاصة و نسميها ثابت في حالة شيء يذهب على نحو خاطئ. الآن السحر يحدث هنا. أولا، أنا معلنا في خط 67 حرفين، C1 و C2. ثم في خط 68، وهناك في الواقع سطر من التعليمات البرمجية هذا يذكرنا صديقنا printf، نظرا لأنه لديها خدمات العملاء في المئة في الاقتباس. ولكن لاحظ ما يحدث هنا. sscanf يعني مسح سلسلة - وسائل مسح منسق سلسلة، إرجو sscanf. ماذا يعني ذلك؟ فهذا يعني أنك تمر إلى sscanf سلسلة. والخط هو ما أنواع المستخدم فيه. يمكنك تمرير إلى sscanf سلسلة تنسيق مثل هذا أن يقول ما هي scanf كنت قد كتبته أمل المستخدم فيه. كنت ثم تمرير في عناوين اثنين قطع من الذاكرة، في هذه الحالة، لأن لدي اثنين من العناصر النائبة. لذلك أنا ذاهب لاعطائها عنوان من C1 وعنوان C2. وأذكر أن تعطي وظيفة لل عنوان بعض المتغير، ما هو المعنى الضمني؟ ما يمكن أن تفعله تلك الوظيفة نتيجة ل من يعطيها عنوان متغير، خلافا ل المتغير نفسه؟ فإنه يمكن تغييره، أليس كذلك؟ إذا كان لديك شخص خريطة لالبدني عنوان، فإنها يمكن أن نذهب الى هناك والقيام كل ما تريد في هذا العنوان. نفس الفكرة هنا. إذا كنا تمريرها إلى sscanf، عنوان اثنين قطع من الذاكرة، حتى هذه الصغيرة قطع صغيرة من الذاكرة، C1 و C2، ولكن نقول ذلك على العنوان منهم، sscanf يمكن تغييره. حتى sscanf لهدف في الحياة، وإذا قرأنا الصفحة الرجل، هو أن تقرأ ما المستعمل في طباعة، والأمل في أن يضطر المستخدم كتبته في حرف وربما حرف آخر، ومهما كانت المستعمل كتبته، الحرف الأول يذهب هنا، الحرف الثاني يذهب هنا. الآن، بوصفها جانبا، وهذا، وتفعل لا يعرفون سوى هذه من وثائق، حقيقة أن أضع هناك مساحة فارغة يعني فقط ان لا يهمني إذا المستخدم يضرب الفضاء بار قليلة مرات من قبل انه أو انها تأخذ حرف، انا ذاهب الى تجاهل أي مساحة بيضاء. بحيث، وأنا أعلم من وثائق. حقيقة أن هناك٪ ج الثاني تليها المساحة البيضاء هو في الواقع متعمد. أريد أن أكون قادرة على الكشف عن ما إذا كان المستخدم ثمل أو لم تتعاون. لذلك أنا على أمل أن المستخدم بكتابتها فقط في حرف واحد، لذلك أنا على أمل sscanf أن يجري الوحيد لعودة 1 لأن قيمة، مرة أخرى، إذا قرأت وثائق، والغرض sscanf في الحياة هو العودة إلى عدد المتغيرات التي امتلأت مع إدخال المستخدم. مررت في متغيرين عناوين، C1 و C2. أنا على أمل، على الرغم من أن واحدا فقط من يحصل قتلوهم لأنه إذا sscanf عوائد 2، ما يفترض الآثار المترتبة منطقيا؟ أن المستخدم لم فقط أعطني واحدة شخصية مثل قلت له أو لها. أنها ربما كتبته في الأقل حرفين. حتى لو لم يكن لديك بدلا الثاني ج٪، وكان لي واحد فقط، والتي بصراحة سيكون أكثر سهولة النهج، وأعتقد أن أول وهلة، أنت لن تكون قادرة على الكشف عن إذا كان المستخدم قد تم إعطاء لكم المزيد المدخلات من أردت فعلا. لذلك هذا هو شكل ضمني من تدقيق الأخطاء. ولكن لاحظ ما أقوم به هنا. مرة واحدة وأنا متأكد من أن المستخدم أعطاني واحدة حرف، وأنا سراح الخط، والقيام على العكس من getstring، والتي بدورها يستخدم malloc، ثم أعود C1، الحرف الذي كنت آمل في مستخدم فقط المقدمة والمقدمة. لذلك لمحت السريع فقط، ولكن أي أسئلة على getchar؟ سوف نعود إلى بعض من الآخرين. حسنا، اسمحوا لي أن نمضي قدما ونفعل ذلك - لنفترض الآن، فقط لتحفيز لدينا المناقشة في الأسبوع بالإضافة إلى الوقت، وهذا هو ملف يسمى structs.h. ومرة أخرى، وهذا هو مجرد طعم شيء الذي ينتظرنا. ولكن لاحظ أن الكثير هذا هو تعليق. لذلك اسمحوا لي تسليط الضوء فقط الجزء المثير للاهتمام في الوقت الراهن. الرموز المميزة ل typedef - هناك تلك الكلمة الرئيسية نفسها مرة أخرى. typedef ونستخدمها لتعلن سلسلة كنوع بيانات خاصة. يمكنك استخدام الرموز المميزة ل typedef لخلق العلامة التجارية الجديدة أنواع البيانات التي لم تكن موجودة عندما اخترع C. على سبيل المثال، وكثافة العمليات يأتي مع جيم شار يأتي مع جيم مزدوجة يأتي مع C. ولكن ليس هناك مفهوم الطالب. وحتى الآن سيكون من المفيد جدا أن تكون قادرة على كتابة برنامج يقوم بتخزين في متغير، رقم الطالب، باسمهم، ومنزلهم. وبعبارة أخرى، ثلاث قطع من البيانات، مثل كثافة و سلسلة وسلسلة أخرى. مع الرموز المميزة ل typedef، ما هو قوي جدا حول هذا وsturct الكلمة ل هيكل، لك، مبرمج في عام 2013، يمكن تعريف الواقع الخاص بك أنواع البيانات التي لم تكن موجودة سنوات قبل ولكن هذا دعوى أغراضك. وحتى هنا، في خطوط من 13 إلى 19، نحن معلنا نوع بيانات جديدة، مثل عدد صحيح، ولكن اصفا ذلك الطالب. وداخل هذا المتغير هو الذهاب الى يكون ثلاثة أشياء - عدد صحيح، سلسلة، وسلسلة. حتى تتمكن من التفكير في ما هو حقا حدث هنا، حتى وإن كان هذا هو قليلا من التبسيط لهذا اليوم، طالب يجري أساسا لتبدو هذه. ه يذهب أن يكون جزءا من الذاكرة بمعرف، وهو اسم الميدان، وحقل المنزل. وسنكون قادرين على استخدام تلك القطع من الذاكرة والوصول إليها على النحو التالي. إذا ذهبت إلى struct0.c، وهنا ل طويلة نسبيا، ولكن بعد نمط من التعليمات البرمجية التي يستخدم هذه الحيلة الجديدة. لذلك الأولى، اسمحوا لي أن ألفت انتباهكم إلى أجزاء مثيرة للاهتمام حتى أعلى. حاد يعرف الطلاب 3، يعلن ودعا الطلاب والمتنازل المستمر بصورة تعسفية عدد 3، فقط وذلك لدي ثلاثة طلاب باستخدام هذا البرنامج في الوقت الراهن. هنا يأتي الرئيسية. وإشعار، كيف تعلن مجموعة من الطلاب؟ حسنا، أنا مجرد استخدام نفس بناء الجملة. كلمة الطالب هو جديد واضح. ولكن الطالب، والطبقة، والطلاب قوس. لذلك للأسف هناك الكثير إعادة استخدام المصطلحات هنا. هذا هو مجرد رقم. لذلك هذا هو مثل قوله الثلاث. الطبقة هو فقط ما أريد لاستدعاء متغير. أنا يمكن أن يطلق عليه الطلاب. ولكن الطبقة، وهذا ليس فئة في الاعتراض الموجه نوع جافا من الطريق. انها مجرد فئة من الطلاب. ونوع بيانات كل عنصر في ذلك مجموعة من الطلاب. لذلك هذا هو مختلفة قليلا ومن يقول شيئا مثل هذا، انها مجرد - أنا أقول أعطني ثلاثة طلاب وندعو تلك الفئة مجموعة. حسنا. الآن وهنا حلقة الأربعة. هذا الرجل مألوفة - أعاد من صفر على ما يصل إلى ثلاثة. وهنا قطعة جديدة من بناء الجملة. البرنامج سيكون لتدعوني، الإنسان، لإعطائها الطالب ID، وهو الباحث. وهنا بناء الجملة التي يمكنك تخزين شيء في حقل معرف في الطبقة موقع قوس أولا حتى بناء الجملة هذا ليس جديدا. هذا يعني فقط أن تعطيني الثامن طالب في الصف. ولكن هذا الرمز هو جديد. حتى الآن، ليس لدينا يمكن أن تستخدم نقطة، على الأقل في التعليمات البرمجية مثل هذا. وهذا يعني الانتقال إلى البنية المعروفة باسم طالب ووضع شيء هناك. وبالمثل، في هذا السطر التالي، 31، انتقل إلى الأمام ووضع كل ما يكتب المستخدم لاسم هنا وماذا يفعلون ل المنزل، ونفس الشيء، والمضي قدما و وضعها في. المنزل. فماذا هذا البرنامج القيام في نهاية المطاف؟ يمكنك أن ترى قليلا دعابة هناك. اسمحوا لي أن نمضي قدما ونفعل جعل البنيات 0 نقطة خفض البنية 0، معرف الطالب 1، ويقول ديفيد ماذر، هوية الطالب 2. سرقة كيركلاند، هوية الطالب 3. لورين Leverit - والشيء الوحيد الذي فعل هذا البرنامج، الذي هو مجرد التعسفي تماما، هو أردت أن تفعل شيئا مع هذه البيانات، الآن بعد أن كنت علمتنا كيفية استخدام البنيات، وكان لي للتو هذه حلقة اضافية هنا. أنا تكرار عبر مجموعة من الطلاب. أنا استخدم لدينا، صديق ربما الآن مألوفة، سلسلة مقارنة، stircomp ل الاختيار هو منزل الطالب 8 ل يساوي ماثر؟ وإذا كان الأمر كذلك، فقط طباعة شيء تعسفية مثل، نعم، هو. ولكن مرة أخرى، فقط إعطائي الفرص لاستخدام وإعادة استخدام و إعادة استخدام هذا نقطة تدوين جديد. حتى يهتم، أليس كذلك؟ الخروج مع برنامج الطالب تعسفي إلى حد ما، ولكن اتضح أننا يمكن أن تفعل أشياء مفيدة مع هذا، على سبيل المثال على النحو التالي. هذا هو بنية أكثر تعقيدا من ذلك بكثير في C. انها حصلت على عشرة أو أكثر من المجالات، إلى حد ما يدعى بغموض. ولكن إذا كنت قد سمعت من أي وقت مضى من الرسومات شكل ملف يسمى نقطية، BMP، فإنه تبين أن تنسيق ملف الصورة النقطية تبدو الى حد كبير مثل أن هذا. انها غبية وجه مبتسم قليلا. انها صورة صغيرة التي قمت بالتكبير على كبيرة جدا لدرجة أنني يمكن أن نرى بعضنا من النقاط الفردية أو بكسل. الآن، اتضح أننا يمكن أن تمثل نقطة سوداء مع، على سبيل المثال، فإن عدد 0. ونقطة بيضاء مع الرقم 1. لذلك وبعبارة أخرى، إذا كنت ترغب في رسم مبتسم الوجه وحفظ هذه الصورة في الكمبيوتر، فإنه يكفي لتخزين الأصفار و تلك التي تبدو مثل هذا، حيث، مرة أخرى، تلك هي بيضاء والأصفار هم من السود. ومعا، إذا كان لديك على نحو فعال واربط من الآحاد والأصفار، لديك شبكة من بكسل، وإذا كنت تضع بها، لديك لطيف وجه مبتسم قليلا. الآن، شكل ملف صورة نقطية، BMP، هو فعليا أن تحت غطاء محرك السيارة، ولكن مع مزيد من بكسل سكير التي يمكن أن تمثل في الواقع الألوان. ولكن عندما يكون لديك أكثر تطورا صيغ الملفات مثل BMP و JPEG و GIF التي قد تكون مألوفة، وتلك الملفات على القرص عادة ليس فقط يكون الآحاد والأصفار وللبكسل، ولكن لديهم بعض البيانات الوصفية، وكذلك - الفوقية بمعنى أن ليس حقا البيانات ولكن من المفيد أن يكون. لذلك فان هذه الحقول هنا يعني، و سنرى هذا بمزيد من التفصيل في مجموعة P- 5، قبل أن الأصفار وتلك التي تمثل بكسل في الصورة، هناك مجموعة من البيانات الوصفية مثل حجم الصورة و عرض الصورة. وتلاحظ أنا نتف من بعض الأشياء التعسفي هنا - العرض والارتفاع. العد قليلا وبعض الأشياء الأخرى. لذلك هناك بعض البيانات الوصفية في ملف. ولكن من خلال فهم كيف وضعت ملفات في هذه الطريقة، يمكنك فعلا ثم معالجة الصور، استعادة الصور من القرص، تغيير حجم الصور. ولكن لا يمكنك بالضرورة تعزيزها. أنا في حاجة إلى صورة. فعدت إلى RJ هنا، الذين رأيت على الشاشة منذ بعض الوقت. وإذا كنت تفتح الرئيسي هنا، وهذا هو ماذا يحدث إذا حاولت تكبير و تعزيز RJ. انه لا تحصل على أي أفضل حقا. الآن الرئيسي هو نوع من الضبابية عليه قليلا، فقط للتعتيم على حقيقة أن الملكية الأردنية لا تحصل ولا سيما تعزيز عند تكبير. وإذا فعل ذلك بهذه الطريقة، رؤية الساحات؟ نعم، يمكنك أن ترى بالتأكيد الساحات على العرض. هذا ما تحصل عليه عندما كنت تعزيز. ولكن في فهم كيف دينا RJ أو وينفذ وجه مبتسم سيتيح لنا في الواقع كتابة التعليمات البرمجية التي تعالج هذه الأشياء. واعتقدت أن ينتهي في هذه المذكرة، مع 55 ثانية لتعزيز هذا، أجرؤ، ويقول مضللة إلى حد ما. [تشغيل الفيديو] -انه يكذب. حول ما، وأنا لا أعرف. لذا، ما الذي نعرفه؟ هذا، في الساعة 9:15 راي Santoya وكان في أجهزة الصراف الآلي. -لذا فإن السؤال هو ما كان يفعل في 9:16؟ إطلاق النار على الشخص ملليمتر تسعة في شيء. ربما رأى قناصة. وقد-أو العمل معه. -الانتظار. أعود واحدة. ماذا ترى؟ -إحضار وجهه حتى، كامل الشاشة. -صاحب النظارات. -هناك انعكاس. -هذا هو فريق البيسبول Neuvitas. هذا هو الشعار. وكان يتحدث لمن ل يرتدي سترة أن. [END تشغيل الفيديو] DAVID J. مالان: هذه الإرادة تكون مشكلة تعيين 5. سوف نرى لك الاسبوع المقبل. المتكلم ذكر: في CS50 المقبل. [جدجد النقيق] [عزف الموسيقى]