[عزف الموسيقى] DAVID J. مالان: حسنا هذا هو CS50 وهذا هو بداية الأسبوع الخمسة. حتى اليوم، تحت الوسائد مقعدك، أنك لن تجد أي شيء. ولكن أعلاه، يجب أن تجد هذه، رمزية صغيرة من تقديرنا ل كل العمل الذي كنت وضعت في لعبة من خمسة عشر. ببساطة إزالة الدائرة قليلا على السفلي لبدء اللعب لل ما تبقى من الطبقة. حتى أذكر ذلك، أو تعرف أن المشكلة تعيين أربعة، الذي خرج في نهاية هذا الاسبوع، ينطوي الكتابة لعبة أخرى. ولكن هذه المرة كان ينطوي استخدام الفعلية واجهة المستخدم الرسومية، وليس واجهة النصية مثل وكانت مباراة من خمسة عشر. واللعبة التي تنتظركم، إذا كنت لم نشهد حتى الآن هذه المقبل، يبدو شيئا قليلا من هذا القبيل. انا ذاهب للذهاب الى محطة بلدي نافذة هنا في GDB. وانا ذاهب الى المضي قدما وتشغيل الحل الموظفين، والتي يمكنك الوصول إليها بعد تشغيل التحديث 50 كالمعتاد. ولكن انا ذاهب لوضعها موضع قليلا وضع سرية، بيضة عيد الفصح قليلا، ما يسمى وضع الله، وضع الله في argv1. ولدي لمتابعة الاتجاهات بلدي، تشغيله في بلدي المشكلة الدليل تعيين. حتى الآن لرؤية نسخة كاملة لعبة الهروب. في الواقع، وهذا هو وضع لا اليدين. لذلك في الواقع - أبهر على الرغم من أنك قد تكون - تافهة جدا لتنفيذ وضع الله في الاختراق، على عكس لعبة الخمسة عشر، والتي قد تعالج بعض منكم للطبعة القراصنة. في اندلاع يكفي في الله الوضع ببساطة يفعل ما، حدسي مع مجداف؟ فقط جعله يساوي مهما كانت الوضع الأفقي هو من الإستحواذ على الكرة. وطالما كنت تفعل هذا في ببراعة مع الكرة تتحرك هذه اللعبة سوف أبدا، من أي وقت مضى، ويغيب أي وقت مضى على الكرة وعليك أن تفوز في كل مرة. ولكن في الطبعة القراصنة هذا الأسبوع هناك أكثر من وضع الله فقط. هناك عدد من الميزات الأخرى. فيما بينها، وأشعة الليزر. بحيث إذا كنت حقا الحصول على الصبر لك يمكن أن تبدأ اسقاط الطوب وعدد قليل من الآخرين. وبالنسبة لأولئك منكم الذين ترغب في معايرة قياسية مقابل القراصنة طبعة، أستطيع أن أرى أن هذا الأسبوع طبعة القراصنة هو عمدا أكثر قليلا قابلة للتنفيذ، مثلا، من الله كان الوضع مع لعبة من خمسة عشر. حتى إذا كنت تبحث عن امتداد و كنت تبحث عن بعض المرح إضافية ميزات لا الغوص في إذا من الفائدة. الآن أكثر من الناحية العملية، واسمحوا لي أن أشير من شيء واحد كذلك. GDB، والتي البعض منكم قد لا يكون حتى الآن لمست شخصيا، التي على ما يرام. ولكن الآن هو حقا الوقت لتعتاد لهذا ومريحة مع هذه الأداة لأنه سيجعل حياتكم أسهل بكثير، حقا. محاضرة في روب على GDB زوجين من قبل أسابيع، وأذكر أن GDB هو المصحح. انها الأداة التي تتيح لك تشغيل الخاص البرنامج ولكن تشغيله خطوة بخطوة، خط سطرا، بحيث يمكنك كزة حولها، حتى يتسنى لك رؤية الأشياء يحدث، لذلك يمكنك طباعة قيم المتغيرات. وباختصار، فإنه يوفر لك أكثر من ذلك بكثير قوة من printDef لا. الآن باعتراف الجميع، واجهة هي غامضة جدا. واجهة النصية بالأبيض والأسود بالنسبة للجزء الاكبر. الأوامر هي صعبة نوعا ما لنتذكر في البداية. ولكن على الرغم من ان الامر قد يستغرق لك نصف ساعة، ساعة، لوضع ذلك مقدما استثمار الوقت في ذلك، ثق بي. بالتأكيد بنهاية الفصل الدراسي سيوفر كنت أمر من حجم أكثر الوقت من ذلك. حتى في الغوص فيها أوائل الأسبوع وفيما يتعلق اندلاع، أعرف أنك يمكن القيام بذلك طالما لديك رمز أو توزيع التعليمات البرمجية الخاصة بك في التقدم في الدليل Pst4 الخاص بك. تعلم أنه يمكنك تشغيل جدب. / الاختراق. هذا هو ذاهب لفتح نافذة مثل هذا. اسمحوا لي أن أقدم نفسي أكثر من نافذة الصالة. ثم ما انا ذاهب الى المضي قدما و لا، انها ليست مجرد تشغيله. انا ذاهب الى تعيين أول نقطة فاصل أذكر، والذي يسمح لك وقفة التنفيذ في مكان معين. فقط لابقاء الامور بسيطة انا ذاهب لكسر في سطر واحد فقط عن طريق كتابة رقم واحد. اسمحوا لي في الواقع إعادة فتح هذه النافذة لأنها الحصول على صغيرة قليلا هناك. ذلك ما أنا الآن بصدد القيام به هنا هو إذا كنت تفتح نافذة الصالة بلدي. هيا، هناك نذهب. حتى الآن إذا أعود إلى المربع المنسدل، Pst4 والمدى جدب. / اندلاع دخول، إشعار انا ذاهب الى كسر واحد لتعيين نقطة فاصل في سطر واحد. والآن انا ذاهب للذهاب قدما ونوع التشغيل. وعندما أفعل، لاحظ شيئا يبدو أن يحدث. ليس هناك ما يصل البوب. ليس هناك الرسومية واجهة المستخدم حتى الآن. ولكن هذا مفهوم لأن أنا حرفيا في سطر واحد في برنامجي. وتلاحظ أن تحال لقد سريع، على وجه التحديد الآن إلى 62، وذلك لأن جميع الاشياء في الجزء العلوي من هذا الملف أشياء مثل التعليقات والثوابت و الاشياء رتيبا في الوقت الراهن. حتى الآن أنا داخل الرئيسي، يبدو في خط 62. وهذا هو مجرد توزيع رمز، التذكير. إذا قمت بفتح هذا الأمر من خلال الذهاب، وبالمثل، في بلدي دليل قطرة مربع في Pst4، في breakout.c. وإذا كنت انتقل لأسفل وأسفل وأسفل، واسمحوا لي أن المضي قدما وتشغيل أرقام الأسطر بلدي. ما سوف نرى، إذا كنت انزل الى خط 62، هو بالضبط الخط الذي لقد توقفت على. حتى هذا الخط هنا، 62، هو حيث أننا على وشك أن يكون. وحتى الآن في GDB، إذا ذهبت إلى الأمام ونوع الآن المقبل، أدخل انه سيكون ل تنفيذ هذا الخط. وفويلا، لدينا ما يسمى ز النافذة. إذا غير مألوف مع ما GWindow هو، لا داعي للقلق. سوف أعرض لكم لالمواصفات، كما فضلا عن عدد من أشرطة الفيديو تجول جزءا لا يتجزأ من المواصفات. ولكن الآن دعونا جعل هذا قليلا أكثر إثارة للاهتمام. اسمحوا لي أن تحرك هذا الإطار على إلى الجانب قليلا. اسمحوا لي أن النافذة قليلا أكبر حتى أستطيع أن أرى أكثر من ذلك. والآن اسمحوا لي أن المضي قدما والقيام به بعد ذلك مرة أخرى. وهناك الطوب بلدي. إذا كنت اكتب القادمة مرة أخرى الآن أرى الكرة. وإذا كنت اكتب القادمة مرة أخرى الآن أرى مجداف. ولحسن الحظ هذا ليس gedit تتعاون حقا تبين لي كل شيء أريد. ولكن الآن إذا كنت تفعل مرة أخرى القادم، مرة أخرى القادم، أنا فقط يعلن بعض المتغيرات. وأنا يمكن طباعة أي واحد من هؤلاء الرجال خارج. الطوب الطباعة، يطبع حياة. والآن إذا ما زلت تفعل المقبل، لاحظ أن سأكون داخل تلك الحلقة. لكن رمز هو الذهاب الى تنفيذ تماما كما كنت تتوقع. لذلك عندما ضرب هذه الوظيفة، انتظر اضغط ل، انها تنوي القيام به حرفيا ذلك. هكذا بدا لي أن فقدت السيطرة خلال البرنامج. GDB لا إعطائي موجه آخر. ولكن لا داعي للقلق. انتقل إلى لعبي، انقر فوق مكان ما. وفويلا، والآن تشرع في خط 86. ذلك مرة أخرى، انها لا تقدر بثمن، في نهاية المطاف، لتصحيح المشاكل. لأنه يمكنك من خلال خطوة حرفيا التعليمات البرمجية الخاصة بك، وأشياء من الطباعة والكثير، أكثر من هذا. لكنه الآن، تلك الأدوات وحده يجب أن تحصل بعيدا جدا. لذلك نحن، بالطبع، مع نظرة في الرسومات الآن، فجأة. والآن عالمنا يحصل قليلا أكثر إثارة للاهتمام. وأنت تعرف، ربما، من بعض أشرطة الفيديو على الانترنت أن لدينا هذه السراويل التي كنت قد تم مشاهدة كجزء من مجموعات المشكلة. ولقد تم اطلاق النار، عمدا، على خلفية بيضاء. وبعض منهم لديهم تعليم الزملاء رسم بعض النص على الشاشة وهذا ما مضافين على الجانب منها. ولكن بالطبع، هذا ليس كل ما مثيرة للاهتمام في العالم الحقيقي. هذا هو مجرد قاعة محاضرات مع شاشة بيضاء كبيرة وخلفية. ولدينا نوع مدهش فريق الإنتاج من يجعل كل شيء تبدو جميلة بعد وقوعها من خلال الاقتصاص من أو تتراكب أي شيء نفعله أو لا تريد. الآن فقط لتحفيز هذا الاسبوع و حقا، حيث يمكنك الذهاب، في نهاية المطاف، مع علوم الكمبيوتر. ليس فقط مشكلة بعد تعيين أربعة. ولكن بعد دورة أخرى أو كامل المنهج إنه لأمر مدهش ما يمكن تفعل في هذه الأيام من حيث رسومات على وجه الخصوص. قد شهدت بعض منكم هذا تتدفق في جميع أنحاء الإنترنت. لكنني اعتقدت أن تظهر لك، لمجرد بضع دقائق، لمحة عما تكنولوجيا الكمبيوتر وما CGI، رسومات الحاسوب يمكن القيام به في هذه الأيام مع أغنية مألوفة وربما الفيلم. [MUSIC - LANA DEL RAY، "شابة وجميلة] سرور 1: انها قليلا مذهلة، ربما، فقط كيف منتشرة في كل مكان - [تصفيق] سرور 1: أنا تحميل فقط. ولكن إنه لأمر مدهش حقا، وأعتقد، فقط كيف البرمجيات ورمز منتشرة في كل مكان و أدوات مثل هذه هي في الواقع. ذلك أن طعم الاتجاه حيث يمكنك الذهاب. أوه، لا أكثر الأجهزة اليوم. حسنا، هذا الواقع المأساوي توقيت بالنظر إلى النقطة أنا فقط حاولت أن تجعل. كل الحق، لذلك دعونا إطلاق الانصهار مرة أخرى. أذكر لي في وقت لاحق. كل الحق، ويجب أن قد حصلت على الكتابة بوصفها جانبا إذا لم تحصل على إشعار من هذا القبيل. كل الحق، لذلك أذكر أنه في الأسبوع الماضي بدأنا في قشر العودة هذه عرفت فيما بعد باسم السلسلة. وتشير سلسلة نوع بيانات هذا أعلن في المكتبة CS50. وانها جزء من عجلات التدريب التي من شأنها أن تبدأ الآن للاقلاع. كان مفهوما مفيدا في وقت مبكر. ولكن الآن انه سيكون للحصول على مزيد من مثيرة للاهتمام وأكثر قوة ل نرى في الواقع أن تحت غطاء محرك السيارة، هو مجرد ما، لم قال سلسلة نحن؟ نعم، لذلك هو ما يسمى تشار *. و* هناك يدل على أن هناك نوعا من عنوان المعنية. وهكذا عندما تقول شار * تقصد فقط متغير نوع البيانات الذي هو الماوس للالآن. حقيقة أن هناك نجم هناك يعني فقط ان كنت إعلان ما يسمى المؤشر. وهذا المؤشر هو الذهاب الى ما يبدو تخزين عنوان، من بالطبع، شار. الآن لماذا لا يعقل هذا؟ حسنا، ما هو سلسلة تحت غطاء محرك السيارة؟ حسنا، لبعض الوقت كنا قائلا أن سلسلة تحت غطاء محرك السيارة هو مجرد ح ه-L-L-O، على سبيل المثال. ولكن تحدثنا عن هذا الأمر كونها، أساسا، صفيف. ومجموعة سيبدو قليلا ثم أشبه هذا، مع كل من هذه تناول لدغة. ثم قلنا أن هناك شيء خاص هنا مرة أخرى، و 0 مائل، أو فاصل فارغة. لذلك كل هذا الوقت، وهذا هنا وكانت سلسلة. ولكن في الحقيقة، هو سلسلة في الواقع عنوان. وعناوينهم، كما سنرى، وغالبا ما تكون مسبوقة ب 0X قبل الاتفاقية. ماذا 0X دلالة؟ لا أحد يعرف؟ لذلك يعني فقط ست عشري. لذلك قد أذكر، في الواقع، من توقيت المحيط الهادي 1، وأعتقد، واحدة من الاحماء الأسئلة حول الواقع تدوين ست عشري بالإضافة إلى ثنائي وعشري. والدافع هنا هو أن مع ست عشري لديك 16 الأرقام تحت تصرفكم. 0، 1، 2، 3، 4، 5، 6، 7، 8، 9، يليه من قبل أ، ب، ج، د، ه، و. وإذا كنت تعول جميع أولئك تصل، تحصل على ما مجموعه 16. لذلك هذا هو على النقيض من العشرية، حيث لدينا 10 أرقام، 0 إلى تسعة. انها في المقابل مع ثنائي حيث لدينا فقط 0 و 1. ولكن في نهاية اليوم يمكنك فقط تمثل نفس الأرقام، ولكن بشكل مختلف إلى حد ما. وست عشري هو شائع لأنه كما اتضح - وسنرى هذا في وقت لاحق بالطبع - حتى عندما نحصل على لبرمجة الويب في سياق وHTML اللون رموز، ست عشري هو لطيف. لأن كل رقم، تبين، يمثل أربعة بت تماما. لذلك مجرد نوع من يصطف بشكل جيد كما سنرى في نهاية المطاف. ولذلك فإن هذا قد يكون Ox123 أو شيء من هذا القبيل، تدل عنوان 123 في مكان ما داخل بلدي ذاكرة الكمبيوتر. ولكن بطبيعة الحال، بعض المشاكل تنشأ بسبب هذا الكامنة التنفيذ. وأذكر أنني أخذت طعنة في تنفيذ وظيفة مثل هذا - مقارنة اندفاعة 0 نقطة ج الأسبوع الماضي، أن على الرغم من أنه بدا وكأنه كان الحق، فإنه ببساطة لا تقارن سلسلتين بشكل صحيح. لقد ألقيت بعيدا الرئيسي، ولقد القيت بعيدا التعليقات فقط للتركيز على رمز هذا الاهتمام هنا. وانها باللون الأحمر لأنها عربات التي تجرها الدواب. لسبب ما؟ حسنا، هناك في الأعلى عندما أعلن سلسلة، ما كان يحدث في الواقع تحت غطاء محرك السيارة؟ حسنا، اسمحوا لي أن يذهب أكثر إلى الشاشة هنا ورسم ذلك. ولذا فإنني أعلن، مرة أخرى، GetString سلسلة ق. لذلك انا ذاهب الى المضي قدما الآن و رسم ليالي ما هو عليه حقا. انها سوف تكون مربعة هنا. وانا ذاهب الى المطالبة أن هذا هو 32 بت. على الأقل فإنه عادة ما يكون، على الأقل على CS50 الأجهزة في الكثير من أجهزة الكمبيوتر. أنا ذاهب إلى نسميها ق. ولكن أذكر الآن أننا دعا GetString. حتى GetString العودة، بطبيعة الحال، سلسلة. إذا أنواع المستخدم في ح ه-L-L-O دخول يحصل عاد مرحبا السلسلة. وهذه السلسلة، كما قلنا للتو، وينتهي في مكان ما في ذاكرة الكمبيوتر الخاص بك بخط مائل 0 في نهاية المطاف. أنا أوجه هذا مثل مجموعة - أو كتلة متجاورة من الحروف - أنه هو في الواقع. والآن، ما هو GetString العودة فعلا؟ ما GetString تم العائدين كل هذا الوقت؟ حسنا، نحن نقول، في الأسابيع السابقة، تقوم بإرجاع سلسلة. ولكن أكثر من الناحية الفنية، ما يفعله GetString العودة على ما يبدو؟ الحضور: عنوان. سرور 1: عنوان. على وجه التحديد فإنها ترجع عنوان لدغة الأولى، أيا كانت. أنا فقط الاستمرار في استخدام واحد، اثنان، ثلاثة لأنها مريحة. تقوم بإرجاع عنوان أول حرف في السلسلة. وقلنا في الاسبوع الماضي ان غير كافية. لأننا لا نستطيع معرفة دائما حيث في نهاية السلسلة فقط عن طريق بالتكرار أكثر من ذلك، ربما، مع ل حلقة أو حلقة while أو شيء من هذا القبيل أن تبحث فقط عن "مائل 0"، الطابع الحارس خاصة. ثم نحن نعلم أن السلسلة يحدث أن تكون من طول - في هذه الحالة - خمسة. لذلك من الناحية الفنية ما يفعله GetString هو يعود Ox123 في هذه الحالة. وتقنيا ما يحدث بعد ذلك هو أننا تخزين، داخل ثانية، Ox123. في نهاية اليوم، وعلى الرغم من هذا ومفهوم جديد، المؤشرات، انهم متغيرات فقط. ولكن حدوثها لتخزين البتات التي تمثل مجتمعة عنوان. لذلك من الناحية الفنية كل ما يحصل المخزنة في ليالي هو Ox123. ولكننا كبشر - بما في ذلك اليوم فصاعدا - حقا لن يهمني، عادة، ما هو العنوان الفعلي بعض قطعة من الذاكرة. انها مجرد لمستوى منخفض من التفاصيل ل من المثير للاهتمام فكريا. لذلك أنا ذاهب الى التراجع عن هذا. وبدلا من ذلك، مستوى أكثر عالية، نقول فقط أننا عندما نتحدث عن مؤشرات انا ذاهب الى مجرد رسم أكثر السهم صديقة للمستخدم أن ينقل نفس الفكرة والملخصات بعيدا تفاصيل ما الفعلية عنوان الأساسي هو. الآن إذا رجعنا إلى رمز، ما حدث الاسبوع الماضي اذا كان لدينا سلسلة ر يساوي GetString؟ حسنا، إذا أنا مرة أخرى، اكتب في مرحبا هذه المرة أنا ذاهب للحصول على جزء آخر من الذاكرة. ح-E-L-L-س مائل 0. ولكن لأنني دعا GetString للمرة الثانية - وأنا أعرف هذا من النظر إلى الكود لGetString - حتى على الرغم من انها من قبيل الصدفة أن كان مرحبا كتبته في مرتين، GetString ليس ذاهب الى محاولة لتحسين وتكون ذكية. انها مجرد الذهاب للحصول على قطعة أخرى من الذاكرة من الكمبيوتر، الذي هو ستكون في عنوان آخر. دعونا نقول فقط تعسفا 456. ثم ما هو الذهاب الى العودة؟ انها سوف تعود 456 وتخزينه في ر. وذلك ما يحدث في الواقع، على الجانب الأيسر واليد ولدي قطعة أخرى من الذاكرة، 32 بت عادة. وهناك ستذهب Ox456. ولكن مرة أخرى، أنا لست مهتما في هذه أرقام معينة بعد الآن. أنا مجرد الذهاب الى تجريدي استدراجه كالسهم. لذلك هذا هو الآن تفسيرا جديدا. ولكن انها نفس الفكرة بالضبط هذا ويحدث كل هذا الوقت. وذلك هو السبب إذن، أن هذا أولا وكان الإصدار من مقارنة عربات التي تجرها الدواب الأسبوع الماضي هو السبب؟ عندما تفعل إذا ق يساوي يساوي ر ما أنت حقا تحت غطاء محرك السيارة مقارنة؟ كنت بمقارنة العناوين. وحدسي فقط، بوضوح، Ox123 لا يجري على قدم المساواة Ox456. هذه الأرقام، هذه البتات تختلف فقط. وهكذا على الدوام، وقال أنه في الأسبوع الماضي قمت بكتابة أشياء مختلفة، حتى لو كان كلمات كانت حرفية نفسها. لذلك نحن إصلاح هذه. في شروط للشخص العادي، ما هو الإصلاح؟ الحضور: استخدام وظيفة. سرور 1: استخدام وظيفة. أو نجوم تشارك بالتأكيد، ولكن استخدام دالة على فعل ما؟ الحضور: لمقارنة السلاسل. سرور 1: لمقارنة السلاسل. لذلك كان المشكلة الأساسية هنا أن كنت مجرد النظر في نوعية سلاسل يحدده مقارنة عناوينهم. ومن الواضح أن مجرد البكم الآن مرة واحدة على فهم ما يجري تحت غطاء محرك السيارة. لمقارنة سلاسل حقا لمعرفة ما إذا انهم على قدم المساواة في الطريقة أن الإنسان ستنظر سلسلتين لتكون مساوية نحن بحاجة إلى مقارنتها حرف حرف حرف. الآن أنا قد فعلت هذا مضجر جدا. ولكن حميمه، ونحن باستخدام حلقة for. ومقارنة فقط و قوس أنا ضد ر قوس ط. ق ط قوس زائد 1 ر ضد قوس ط زائد 1، وهكذا دواليك، داخل نوع من حلقة. وإذا كنت بقعة أي حرفين أن تختلف، أو إذا وأنا أدرك أن أوه، و هو أقصر من طن أو أكثر من طن يمكنني القول فورا كاذبة، انهم ليسوا نفس الشيء. ولكن إذا كنت تحصل من خلال ق ور ويقول نفس، نفس، نفس، نفس، نفس، نهاية كلا سلاسل، أستطيع أن أقول صحيح، أنهم متساوون. جيدا، والحمد لله، منذ سنوات شخص كتب هذا الرمز بالنسبة لنا. وأطلقوا عليه StrComp لسلسلة مقارنة. وعلى الرغم من انها قليلا عداد بديهية، StrComp بإرجاع 0 إذا كانت تلك سلسلتين، ق ور هي نفسها. لكنه يعود قيمة سالبة إذا ق يجب أن تأتي قبل ر أبجديا أو قيمة موجبة إذا كان يجب أن تأتي بعد ر أبجديا. حتى إذا كنت تريد من أي وقت مضى لفرز شيء، اتضح أن StrComp مفيد. لأنه لا يقول فقط نعم أو لا، على قدم المساواة أو لا. أنها تعطيك شعورا ترتيب مثل القوة القاموس. حتى StrComp، ق ر فاصلة متساوين يساوي 0 يعني أن سلاسل متساوون حقا. لأن من كتب هذه الوظيفة منذ سنوات ويفترض استخدامها لحلقة أو حلقة while أو شيء من هذا القبيل لدمج أكثر من الأحرف مرة أخرى ومرة أخرى ومرة ​​أخرى. ولكن المشكلة هنا نشأت اثنين. كان هذا copy0.c. والاثنان باللون الأحمر هو لانها معيبة ذلك. وماذا نفعل هنا؟ حسنا، أولا دعوت GetString. وأنا تخزين قيمة الإرجاع في ليالي. لذلك هذا الى حد كبير نفس هذا الجزء العلوي من الصورة. ولكن ما يأتي بعد ذلك؟ حسنا، اسمحوا لي أن تمضي قدما والتخلص من مجموعة كاملة من هذا. سنقوم الترجيع في الوقت المناسب إلى حيث نحن فقط ليالي، التي هي الآن بما يتفق مع سطر واحد هناك. أتحقق. إذا ق يساوي يساوي 0. الآن، ملاحظة جانبية سريعة، وعندما قد GetString العودة 0؟ ليس هناك ذاكرة كافية. أليس كذلك؟ انه من النادر أن هذا سيحدث، بالتأكيد على جهاز كمبيوتر هذا حصلت مئات أو ميغس حتى العربات من ذاكرة الوصول العشوائي. ولكن يمكن ذلك، من الناحية النظرية، وعودة 0، خاصة إذا كان لم تتعاون المستخدم. هناك طرق التظاهر وكأنك لم أي شيء إدخالها وخدعة GetString إلى العودة 0 بفعالية. لذلك يجري للتحقق من ذلك. لأنه إذا بدأت أي واحد منكم الحصول على، وبالفعل، وتجزئة أخطاء - والتي كانت على الأرجح مصدر بعض الإحباط - تلك هي دائما تقريبا نتيجة من الخطأ المتعلقة بالذاكرة. بطريقة ما كنت افسدت فيما يتعلق بإيجاد مؤشر، حتى لو كنت لم تدرك كان هناك مؤشر. تجزئة لذلك كنت قد يسببها أخطاء في وقت مبكر من أسبوع واحد باستخدام شيء من هذا القبيل لحلقة أو حين حلقة ومجموعة من خلال الذهاب بعيدا جدا الماضي حدود بعض صفيف كنت أعلنت، في أسبوعين في معين. كنت قد فعلت ذلك حتى في المشكلة تعيين أربعة مع اندلاع. حتى ولو كنت على الارجح لم نر أي النجوم في كود التوزيع ل الاختراق، وتبين أن تلك GRect وGOval وأشياء أخرى من هذا القبيل، تلك هي في الواقع مؤشرات تحت غطاء محرك السيارة. لكن ستانفورد، مثلنا، نوع من الجلود تلك التفاصيل على الأقل بالنسبة للمكتبات أغراض، مثل الكثير نقوم به لسلسلة وشار *. ولكن GRect وGOval وجميع تلك الأشياء يا رفاق هي أو سيتم استخدام هذا الأسبوع هي في نهاية المطاف عناوين الذاكرة. انك لا تعرف ذلك. لذلك فإنه ليس من المستغرب بعد ذلك، ربما، التي قد رحلة على بعض أخطاء تجزئة. ولكن ما هو مثير للاهتمام هنا الآن، إذا بعد أن تحقق من وجود 0 نفعل سلسلة ر يحصل ق. حسنا، اسمحوا لي أن تعلن ر. انا ذاهب الى رسم بأنها مربع، 32 بت، الذي يطلق عليه ر. ثم انا ذاهب الى القيام يحصل ق. حسنا، ماذا يعني ذلك؟ كذلك، فإنه من الصعب قليلا للتفكير صورة عن ذلك من الحكمة. ولكن دعونا نفكر في ما هو داخل س؟ ما هو حرفيا داخل هذا المتغير؟ قيمة Ox123. لذلك عندما أقول سلسلة ر يحصل ثانية، أن مجرد يعني حرفيا اتخاذ عدد في ليالي، وهو Ox123 ووضعها Ox123. أو بالصور، وإذا كنت من النوع التجريدي بعيدا عن التفاصيل التي لديها تأثير فعل حرفيا هذا أيضا. وحتى الآن، والتفكير مرة أخرى إلى الأسبوع الماضي عندما انتقلنا إلى الرأسمالية T. و لم T قوس 0. كذلك، T قوس 0، على الرغم من انها المؤشر، يمكنك التعامل معها كما لو انها مجموعة، مع مربع قوس التدوين. فأين هو قوس T 0؟ حسنا، انها ساعة. وذلك عندما نستخدم هذا الخط من التعليمات البرمجية، اثنين العلوي، وهو في ذلك ج type.h ملف الرأس، حيث ان لقد أعلن ذلك. كنت الاستفادة من هذا H. لكن بطبيعة الحال، هذا هو بالضبط نفس ح هذا داخل ثانية، إذا جاز التعبير. وحتى الآن قمت بتغيير أو رسملة كلا من الأصلي و يسمى نسخة. لأنك لم تجعل نسخة في الطريقة التي يريد الإنسان أن يكون. فما كان الإصلاح هنا، في copy1.c الأسبوع الماضي؟ وظائف، بحيث يمكن ونحن في الواقع نسخ السلسلة. وبشكل أساسي، ماذا نحن بحاجة إلى القيام به من أجل نسخ السلسلة؟ كذلك، في هذا الإصدار الأخضر هنا أنا سيفعل ذلك مستوى منخفض إلى حد ما. هناك فعلا وظائف أنها يمكن أن تساعد في ذلك. ولكن واحدة أبسط، والأكثر واحدة مألوفة، على الأقل، سوف تكون قريبا مألوف لدينا، هو التالي - حتى واحد في السطر الأول من التعليمات البرمجية باللون الأخضر الآن. أنا فقط أعاد كتابة ق ك char *. ليس هناك وظيفية الفرق هناك. أنا فقط رمت مكتبة CS50 و أنا اصفا إياه ما هو عليه، وشار *. الآن نقطة، نقطة، نقطة، لأن هناك بعض التحقق من الخطأ وهذا ليس المثير للاهتمام أن نتحدث عن مرة أخرى. وحتى الآن تم التصريح ر. بل هو شار جدا *. فرسمت ساحة صغيرة على الشاشة مثل قبل. ولكن على الجانب الأيمن، malloc، قلنا هو تخصيص الذاكرة. ذلك تخصيص بعض قطعة من الذاكرة. وكم بايت هل نحن فعلا تريد تخصيص، لا يبدو ذلك؟ كذلك، وطول سلسلة من ليالي. حتى لو كان هذا مرحبا ستكون خمس سنوات. سوف نقول ح ه-L-L-س. حتى خمس بايت. ولكن بعد ذلك زائد 1، لماذا 1؟ حرف 0. إذا كنا لا يترك مجالا لهذا الرجل نحن قد خلق وضعا غير قصد حيث السلسلة هو ح ه-L-L-س. ثم GetString المرة القادمة دعا وأنا اكتب في، على سبيل المثال، ديفيد، D واحد في الخامس ط د، الكمبيوتر هو الذهاب يعتقدون أن ليالي هو في الواقع ح-E-L-L-O-د واحد في الخامس ط د لأن هناك لا كسر في ما بين هذه الكلمات. لذلك نحن بحاجة أن انقطاع. لذلك نحن لا نريد الخمسة. نريد ستة بايت. وأقول بايت. لكنها في الحقيقة حجم وقت شار. شار تقنيا هو تقريبا دائما بايت واحد. ولكن فقط لجعل رمز لنا المحمولة، إذا جاز التعبير، بحيث أنه يعمل على أجهزة كمبيوتر مختلفة حتى لو كانت قد تكون مختلفة إلى حد ما تحت غطاء محرك السيارة، وأنا ذاهب إلى بشكل عام يقول حجم شار بحيث قانون بلدي يعمل دائما. وأنا لم يكن لديك إلى إعادة ترجمة عليه فقط لأنني ترقية جهاز الكمبيوتر الخاص بي أو استخدام بعض منصة مختلفة. حتى لقد حصلت على 6 أضعاف حجم شار، الذي صادف أن يكون 1. بحيث يمكن أن يعني malloc أعطني ستة بايت. ما الذي تفعله في الواقع؟ حسنا، اسمحوا لي لفة العودة في الوقت المناسب هنا إلى أين نحن في القصة. حتى إذا ذهبت إلى هنا، لقد أعلن شار * دعا ر. لقد تسمى الآن malloc لمدة ستة بايت. والآن أنا ذاهب إلى رسم هؤلاء الستة بايت تماما مثل مجموعة في وقت سابق. ولكن أنا في الواقع لا أعرف ما هو داخل هذه المجموعة. إذا كنت تخصيص ذاكرة اتضح أن لا يمكن أن تثق أن هناك بعض يعرف قيمة هناك. وكان من الممكن استخدامه من قبل شيئا آخر، بعض من وظيفة أخرى، بعض الدول الاخرى سطر من التعليمات البرمجية التي كتبت. ولذا فإننا سوف ندعو عموما هذه القمامة القيم والاستفادة منها، وربما، و علامات استفهام، مشيرا إلى أننا فقط لا أعرف ما هو في الواقع هناك. وهذا ليس صفقة كبيرة ما دمنا أذكياء بما فيه الكفاية لتلك الكتابة القيم القمامة مع الأرقام أو حرف أننا نهتم. حتى في هذه الحالة ما أنا ذاهب الى القيام به؟ حسنا، خط بلدي من التعليمات البرمجية المقبل، لدي أربعة. الباحث أحصل 0، ن يحصل على طول سلسلة من ليالي. لذلك مألوفة للحلقة. أنا أقل من أو يساوي ن، والتي عادة ما هو أعلاه. ولكن هذه المرة انها متعمدة. أنا + +، ثم أنا ببساطة تفعل ر ط قوس يحصل ق. لأن صورة بلدي يبدو مثل هذا في هذه اللحظة، وتخزينها في ر هو عنوان ذلك جزءا من الذاكرة العشوائية القيم التي هي غير معروفة. ولكن بمجرد أن أفعل ر قوس 0 أن يضع لي هنا. وما ينتهي بأن يستدرج هناك؟ نحن في نهاية المطاف وضع ساعة. لأن هذا هو ما هو في قوس ق 0. ثم نفس الشيء لل ه، ولتر، ولتر، وس. ن، لماذا لم أذهب حتى من خلال على قدم المساواة إلى n؟ بسبب الطابع 0. حتى مجرد أن تكون واضحة، ثم، إذا أنا في الواقع يمحو ما هذه القمامة القيم وثم رسم الواقع في ما أتوقع، وهذا هو ق قوس 1، 2، 3، 4، بالإضافة إلى هذا ما زائدة شخصية جديدة. وحتى الآن إذا واصلنا الماضي نقطة، نقطة، نقطة في هذا الإصدار الصحيح ورسملتها ر 0 قوس وأود، من بالطبع، يمكن الاستفادة هذا فقط الرجل هنا، والتي من الناحية النظرية، وكان في نهاية المطاف الهدف. ذلك أن كل المؤشر. وكنت قد تم استخدامها منذ أسابيع الآن في سياق السلاسل. ولكن تحت غطاء انهم قليلا أكثر تعقيدا. ولكن إذا كنت تعتقد عنهم في هذا شكل التصويرية أقترح انهم ربما ليس كل ما مخيفة لأنها قد يبدو لأول وهلة الأولى، وخاصة مع مثل هذه الجملة الجديد. أي أسئلة على مؤشرات، سلاسل، أو حرف؟ نعم؟ الحضور: هل كنت أعود إلى [غير مسموع]؟ سرور 1: بالتأكيد. الجمهور: فكيف يأتي في حياتك الأخيرة جدا الخط، لم يكن لديك ر * خط و* ق في الخط؟ لا يكون لديك إشارة إلى - سرور 1: آه، سؤال جيد حقا. لماذا لا لدي * ر و* ق؟ لفترة وجيزة، في الأسبوع الماضي، كما هو الحال في لدينا مبادلة وظيفة، وأنا لم أقول أنه عندما كنت قد حصلت على مؤشر الوسائل التي الذي كنت أذهب إلى هناك كما فعلنا جسديا على خشبة المسرح، وكان في الواقع ل استخدم عامل نجوم. اتضح أن هذه الساحة قوس التدوين هو ما سوف ندعو النحوية السكر، والذي هو مجرد وسيلة مثير لل قائلا انها منهج الاختزال ل بالضبط ما كنت تصف. لكنه أكثر من ذلك بقليل بديهية. وعلى مخاطر مما يجعل هذا يبدو أكثر تعقيدا مما كان يجب أن يكون، ما يحدث في الواقع هنا هو ما يلي - إذا قلت ر * وهذا يعني الذهاب الى عنوان المخزنة في ر. لذلك حرفيا، وإذا ر تخزين عنوان أن ح في البداية، ر * يعني تذهب هنا. الآن، ماذا ر 0 قوس يعني؟ الشيء نفسه بالضبط. انها مجرد أكثر قليلا المستخدم ودية في الكتابة. ولكن أنا لم تفعل حتى الآن. لا أستطيع أن أقول ر * يحصل * ق. لأن ما أود أن تفعل بعد ذلك؟ سأكون وضع ح، ح، ح، ح، ح طوال كل شيء. أليس كذلك؟ بسبب ر * يتم الانتقال إلى العنوان في ر. ولكن نحن داخل حلقة. وما قيمة أنا تزايد، بطبيعة الحال، على كل التكرار؟ ط. ولكن هناك فرصة هنا، أليس كذلك؟ على الرغم من أن هذا يبدو وكأنه هو الحصول على أكثر من ذلك بقليل متطورة من تدوين مربع قوس استخدمنا لبعض الوقت - اسمحوا لي أن التراجع عن بلدي ساعة التغيير هناك - على الرغم من هذا هو الحصول الآن قليلا مربي الحيوانات، والفكرة الأساسية، إذا ر * يعني هنا و* ر فقط الانتقال إلى العنوان في ر. ولكن ماذا كان العنوان في ر؟ عدد نبقي تستخدمه؟ مثل Ox456، دعونا تحقيق ذلك مرة أخرى فقط من أجل المناقشة. حسنا، إذا كنت ترغب في الحصول على البريد في ر سلسلة، أنا فقط أريد أن أذهب إلى، أساسا، 456. أو بالأحرى، 457. أنا فقط بحاجة إلى إضافة واحد. ولكن أستطيع أن أفعل ذلك، أليس كذلك؟ بسبب ر، على الرغم من وأظل الرسم عليه الآن كالسهم، انها مجرد العدد، Ox456. وإذا أضيف إلى ذلك، أو أكثر عموما، إذا أضيف إلى ذلك أنني أستطيع تحصل في الواقع تماما حيث أريد. حتى لو كنت فعلا القيام بذلك - وهذا هو ما يسمى الآن الماوس للالحسابي - أنا يمكن إزالة هذا الخط. وهو، بصراحة، أعتقد أكثر وضوحا و أكثر من ذلك بقليل المستخدم ودية للقراءة. ولكن هذا هو ما لا يقل الصحيح. هذا السطر من التعليمات البرمجية يستخدم الآن المؤشر الحسابي. قائلا انها تذهب ل العنوان التالي - مهما كانت بداية ر هو الذي ر ط زائد، والتي في البداية 0، وهو أمر عظيم. لأن هذا يعني بداية ر زائد 1، بالإضافة إلى 2، بالإضافة إلى 3، وهكذا دواليك. ونفس الصفقة مع ليالي. السكر النحوية لذلك لهذا الغرض. ولكن فهم ما يحدث في الواقع تحت غطاء محرك السيارة، وأنا أزعم، هو في الواقع مفيدة في حد ذاته. لأنه يعني الآن ليس هناك أكثر من ذلك بكثير السحر مستمرة تحت غطاء محرك السيارة. وهناك لن يكون غيرها الكثير طبقات نتمكن من قشر العودة بالنسبة لك. هذا هو ج. وهذا هو البرمجة. سؤال جيد حقا. كل الحق، لذلك كان هذا أن عربات التي تجرها الدواب برنامج كنت أشير إليها سابقا. كانت معيبة المبادلة. إذا لم يبدو للعمل. أذكر ذلك تماما كما هو الحال مع الحليب و عصير البرتقال - والتي بدأت شرب مظاهرة اليوم. وذلك فقط كما هو الحال مع عصير البرتقال و الحليب، ونحن لم تضطر إلى استخدام متغير مؤقت، تمة، لعقد مؤقتا حتى نتمكن من ثم تغيير قيمته وثم تحديث ب. ولكن هذه الوظيفة، قلنا، أو هذا البرنامج الذي كان هذه الوظيفة كان مكتوبة خاطئ ومعيب، لماذا؟ نعم؟ الحضور: [غير مسموع]. سرور 1: بالضبط، وعندما استدعاء المبادلة - أو أكثر عموما، عند استدعاء أكثر من أي وظيفة - إذا كانت الحجج لتلك الوظيفة هي بدائية، إذا جاز التعبير، ورجات حرف والزوجي والعوامات، وأشياء من دون نجوم، الذي يتم تمرير في نسخة من حجة. حتى إذا كان × 1 وكان ذ 2، ويجري أن يكون 1 و ب ستكون 2. ولكن انهم ذاهبون لتكون قطع مختلفة من البتات، قطع مختلفة من الذاكرة التي يحدث أن تخزين قيم متطابقة. حتى هذا الرمز هو السوبر مثالية في مبادلة أ و ب. انها ليست جيدة في مبادلة - في المثال الأسبوع الماضي - x و y. لأن مرة أخرى، وانهم في نطاق الخطأ. الآن، كيف نذهب حول إصلاح هذا؟ كان علينا أن جعل وظيفة ننظر قليلا أقبح. ولكن مرة أخرى، والنظر في ما هذا يعني فقط. وفعلا، اسمحوا لي، من أجل التناسق، تغيير شيء واحد حتى انها مطابقة لل ما فعلناه للتو. كما ذكرت في الأسبوع الماضي، فإنه لا أينما تذهب. في الواقع، عادة ما كنت وضعت نجمة بجانب اسم متغير. ولكن أعتقد أنه سيكون أسهل قليلا للنظر في * بجانب نوع البيانات كما يعني انها مؤشر إلى int في هذه الحالة. فماذا أفعل هنا؟ أنا أقول لا تعطيني الباحث تلاه الباحث آخر، دعوتهم أ و ب. تعطيني عنوان لكثافة العمليات. تعطيني عنوان كثافة آخر. استدعاء هؤلاء عناوين أ و ب. ثم باستخدام * تدوين أسفل أدناه، انتقل إلى كل من هذه العناوين حسب الحاجة إما إلى الحصول على أو تعيين القيمة الخاصة به. ولكن هناك استثناء هنا. لماذا لا يكون لديك * بجانب TMP؟ لماذا لا يمكنني القيام بذلك، على سبيل المثال؟ بدا الامر وكأننا يجب أن أذهب فقط كل خروج وتصحيح كل شيء. نعم؟ الحضور: [غير مسموع]. سرور 1: أنا لم أعلن تمة كسلسلة. ولذلك فإن هذا من شأنه أن تعلن، في هذه الحالة، وتمة لتكون عنوان لكثافة العمليات. ولكن هذا ليس تماما ما أريد، لبضعة أسباب. الحضور: أنت لا تريد مقايضتهم. سرور 1: بالضبط، وأنا لا أريد أن مبادلة أي شيء مع تمة. تمة هو مجرد الاشياء أسبوع واحد. كل ما أريده هو متغير لتخزين بعض الأرقام. أنا حتى لا يهتمون عناوين في هذه اللحظة. أنا فقط بحاجة 32 بت أو لذلك لتخزين عدد صحيح. وأريد أن أضع في تلك البتات 32 كل ما هو ليس في ذلك، إذا جاز التعبير، ولكن ما هو في ذلك، لمجرد أن يكون أكثر دقة. لأنه إذا كان هو عنوان، وسيلة * نذهب الى هناك والحصول على قيمة 1. على سبيل المثال، في المثال الأسبوع الماضي أو في حالة ب، والحصول على قيمة 2. وذلك ما يحدث في الواقع؟ اسمحوا لي هنا رسم صورة من شأنها أن إلا ندف عدا جزء من اليوم. ولكن هذا لن يستمر في الظهور لبعض الوقت. هذا، أزعم، هو ما جهاز الكمبيوتر الخاص بك الذاكرة يبدو عند تشغيل البرنامج، أي برنامج. عند تشغيل البرنامج في أعلى جدا من ذاكرة الوصول العشوائي جهاز الكمبيوتر الخاص بك - حتى التفكير في هذا المستطيل، حقا، ك RAM الكمبيوتر أو ذاكرة، وكلها 101 مليار بايت، إلا أن كافة ملياري بايت، كل اثنين غيغابايت من ذلك، مهما كانت كمية ما عليك هو، دعونا استدراجه على شكل مستطيل. وأزعم أنه عند تشغيل برنامج مثل Microsoft Word أو كروم أو أي شيء من هذا القبيل، البتات التي كتب Microsoft أو أن جوجل - في حالات تلك البرامج - يتم تحميلها في ذاكرة الكمبيوتر الخاص بك حيث يمكن تنفيذ المزيد بسرعة وإدخالها في وحدة المعالجة المركزية، والتي هو العقل المدبر لجهاز الكمبيوتر. وفي TAM انهم المخزنة في غاية أعلى البرنامج الخاص بك، إذا جاز التعبير. وبعبارة أخرى، إذا كان هذا هو قطعة من الذاكرة، وعند النقر المزدوج على مايكروسوفت وورد، وتأتي بت قبالة القرص الصلب. الحصول على تحميلها في ذاكرة الوصول العشوائي. ونحن سوف يشق لهم حتى في أعلى جدا من الناحية النظرية هذا المستطيل. كذلك، والباقي من الذاكرة الخاصة بك هو تستخدم لأشياء مختلفة. في أعلى جدا ترى تهيئة البيانات وإلغاء تهيئتها. هذا له علاقة، بالنسبة للجزء الأكبر، مع الثوابت أو المتغيرات العالمية التي تحتوي على قيم. ولكن أكثر على تلك وقت آخر. ثم لديك كومة، والتي سوف نعود إلى. ولكن في الجزء السفلي هو الجزء الذي ل وثيق ولا سيما في الوقت الحالي. انها ما يسمى المكدس. لذلك مثلما هو الحال في معظم أي قاعة D هنا الحرم الجامعي، لديك تلك الصواني التي مجرد كومة فوق بعضها البعض التي يمكنك وضع الطعام وغيرها. مكدس في نظام الكمبيوتر هي مشابهة جدا. إلا حين الدرج، كما نستخدمها في قاعة الطعام، بطبيعة الحال، هو المقصود لحمل الأشياء الصواني أو الأطر - ونحن سوف ندعو لهم - في الكمبيوتر يتم استخدام الذاكرة لعقد المتغيرات والقيم. وذلك ما يذهب حقا على تحت غطاء محرك السيارة؟ حسنا، اسمحوا لي أن اقلب إلى الشاشة هنا. ودعونا نركز فقط على الجزء السفلي للحظة. إذا كان هذا هو الجزء السفلي من بلدي ذاكرة الكمبيوتر اتضح عندما كنت استدعاء الدالة الرئيسية - والذي يحدث، وبصراحة، تلقائيا بالنسبة لي - أحصل على قطعة من الذاكرة في السفلي من ذاكرة الوصول العشوائي بلدي إذا جاز التعبير. وهذا هو المكان الرئيسي المتغيرات المحلية تذهب. حيث انها ARGC وربما ARGV تذهب، وأية متغيرات أنا تعلن داخل الرئيسي. أنهم في نهاية المطاف في الجزء السفلي من ذاكرة الوصول العشوائي جهاز الكمبيوتر الخاص بي. الآن لنفترض أن يدعو الرئيسي وظيفة أحب المبادلة، مثل ما فعلت الأسبوع الماضي؟ حسنا، وضعنا أساسا صينية جديدة، و إطار جديد، على بلدي قطعة من الذاكرة. وانا ذاهب لوصف ذلك بأنه ينتمون إلى وظيفة المبادلة. الآن ما هو داخل المبادلة؟ كذلك، على أساس برنامج الأسبوع الماضي و واحد رأينا مجرد مقتطفات من، داخل إطار المبادلة، أو على مبادلة لل علبة، هي ما المتغيرات؟ حسنا، أ و ب. لأن تلك كانت الحجج المحلية، بالإضافة إلى الثلث، تمة. لذلك حقا، وأنا يمكن أن يوجه هذا أكثر من ذلك بقليل نظيفة. اسمحوا لي المضي قدما والتراجع عن التسمية. واسمحوا لي أن تدعي أنك تعرف لماذا؟ وربما لن ينتهي هنا. B هو الذهاب الى نهاية المطاف هنا. وتمة هو الذهاب الى نهاية المطاف هنا. الآن، ربما ترتيب تكون مختلفة قليلا. ولكن من الناحية المفاهيمية هذه هي الفكرة. وفقط بشكل جماعي، وهذا هو ما وسوف ندعو الإطار المبادلة، وأو الطعام قاعة الدرج. ونفس الصفقة مع الرئيسي. ولكن أنا لن رسم ذلك. ولكن هذا حيث ARGC وARGV وأي المتغيرات المحلية مثل x و y قد يكون كذلك. لذلك نعتبر الآن ما يحدث حقا عند استدعاء المبادلة. عند استدعاء المبادلة، تنفيذ التعليمات البرمجية مثل هذا، وأنت تمر في، في الإصدار عربات التي تجرها الدواب، أ و ب كما نسخ من x و y. حتى لو لم يوجه هذا الآن على الشاشة - حصلت على الحصول على أفضل في هذا - وبالتالي فإن القصة كنت أقول لنفسي وكان في هذا الإصدار عربات التي تجرها الدواب، ونحن عندما استدعاء مبادلة يمر في حرفيا أ و ب أنها أعداد صحيحة، ما يحدث حقا؟ حسنا، ما الذي يحدث حقا هو هذا. اسمحوا لي المضي قدما والتراجع فقط لمسح بعض المساحة هنا. لذلك هذا هو ذاكرة جهاز الكمبيوتر الخاص بي. حتى إذا كان لدي، على سبيل المثال - دعونا نفعل ذلك فعلا بهذه الطريقة - إذا كنت تدعي أن هذا هو العاشر، وتخزين قيمة 1 تماما مثل الاسبوع الماضي. وهذا هو ذ، تخزين قيمة 2 تماما مثل الاسبوع الماضي. وهذا هو الرئيسي، وعندما أدعو المبادلة، وبالتالي إعطاء نفسي الوصول إلى و ب وتمة، انا ذاهب الى الادعاء بأن هذا هو وهذا هو 1. هذا هو ب. هذا هو 2. وهذا ما يسمى تمة. ومبدئيا، فإن له بعض القيمة القمامة حتى أنا فعلا تخزين في ذلك لذلك، الذي هو 1. ثم أذهب إلى الأمام والتغيير على أن يكون ماذا؟ القيمة ب. وحتى الآن لدي اثنين هنا. ثم قلنا ب يحصل تمة. مرة أخرى، تماما كما شيك التعقل، والثالثة سطر من التعليمات البرمجية هنا هو ببساطة هذا واحد، ب يحصل تمة. وهكذا أخيرا، ماذا أفعل؟ أذهب إلى الأمام وتغيير ب أن يكون مهما قيمة تمة هو، والذي هو 1. أنا لا تلمس تمة مرة أخرى. ولكن الآن، والمشكلة هي في أقرب وقت المبادلة يعود، لأنه لا تسليم يعود بعض القيمة، وليس هناك عودة بيان صريح في ذلك. ما يحدث في الواقع؟ حسنا، أساسا كل هذه الذاكرة - موافق، على ما يبدو يحب الممحاة إصبع واحد فقط في المرة الواحدة - يختفي تماما. الآن في واقع الأمر ليست أذهب إلى أي مكان. ولكن يمكنك التفكير في الأمر الآن كعلامات استفهام. لأنه لم يعد فعلا في الاستخدام. ويتم عمل شيء مع تلك القيم. حتى في حالة إصدار الخضراء هذا الرمز، بدلا ما يجري مرت في المبادلة؟ حتى العناوين. وبالتالي فإن عنوان x و عنوان ذ. إذا كان الأمر كذلك نعيد أقول هذه القصة واحدة مشاركة الوقت، وأنا في الواقع رسم مبادلة مرة أخرى، ولكن مع مؤشرات، وهذا كونه، وهذا يجري ب، وهذا يجري تمة، ما هو المخزنة في الواقع في في هذا الخضراء إصدار قانون بلدي حيث أنا يمر في عناوين؟ انها سوف تكون مؤشر إلى x. حتى أتمكن من رسم السهم. ولكن دعونا استخدام نفس التعسفي المثال كما كان من قبل. دعنا نقول أن هذا هو شيء من هذا القبيل Ox123. وهذا سيكون Ox127 ل انها اربعة بايت بعيدا لانها الباحث، لذلك Ox127. ومرة أخرى، أنا أخذ بعض الحريات مع الأرقام. انهم أصغر بكثير مما لو كانوا يكون في الواقع وبترتيب مختلف. ولكن هذه هي الطريقة الصورة الآن مختلفة. ولكن عند استخدام هذا الرمز الأخضر وأنا لا الباحث تمة عليه * أ. * وسيلة للقيام بما يلي، واتخاذ معالجة هذا في وتذهب إليها، الذي هو 1. وهذا ما أنا ثم وضع في تمة. وفي الوقت نفسه، في السطر التالي من التعليمات البرمجية هنا، * ويحصل ب، ماذا يعني ذلك؟ حسنا، * لذلك، لذلك يذهب هنا يحصل * ب، وهو ما يعني الذهاب إلى هناك. وهذا يعني وضع القيمة إلى هناك. أخيرا، السطر الأخير من التعليمات البرمجية قال ببساطة * ب يحصل تمة. ذلك ب يقول نذهب الى هناك والكتابة مع تمة الذي، في هذه الحالة، يجري أن يكون، مرة أخرى، 1. وهذا هو السبب في أن النسخة الخضراء يعمل الكود، في حين أن الأحمر نسخة لم يفعل. كل شيء يغلي فقط وصولا الى كيفية تتم إدارة الذاكرة وحيث انها وضعت فعلا في حياتك ذاكرة الوصول العشوائي بالكمبيوتر. وحتى الآن، وهذا واحد من الأشياء ان مكدس يتم استخدامه ل. أسئلة حول التخطيط؟ على المؤشرات؟ أو على المبادلة؟ كل الحق، لذلك malloc، أذكر، فعلت شيئا من هذا القبيل. كان هذا مثال بسيط السوبر. وكان هذا واحد أن بينكي قدم لنا، وإن كان تماما بسرعة، في نهاية الصف. اللعنة، نذهب هناك مرة أخرى. لذلك نذكر أن هذا هو المثال الذي قدم لنا بينكي ل، وإن كان بسرعة إلى حد ما في نهاية الصف. وهنا كنا حقا malloc للمرة الثانية. لأن المرة الأولى التي تستخدم ل خلق ما يكفي من ذاكرة الوصول العشوائي، وتخصيص ما يكفي من ذاكرة الوصول العشوائي لتخزين سلسلة. هذه المرة بينكي أبقاها بسيطة. لذلك فمن لتخزين فقط عدد صحيح، على ما يبدو. وهذا هو بخير تماما. انها غريبة بعض الشيء، وبصراحة، ل استخدام malloc للتخصيص كثافة واحدة. ولكن وجهة claymation نيك كان في الحقيقة مجرد إخبار قصة ما يحدث أو لا يحدث عندما كنت يسيئون معاملة الذاكرة. حتى في هذه الحالة، وهذا البرنامج فعلت بعض الأشياء. في الحالة الأولى هنا، فإنها تعلن مؤشر يسمى العاشر إلى int. بعد ذلك يعلن مؤشر دعا ذ إلى int. بعد ذلك مخازن في العاشر، ما هي؟ شخص آخر الآن. ما يحصل المخزنة في x وفقا ل السطر الثالث من هذا البرنامج؟ الحضور: [غير مسموع]. سرور 1: حسنا، ليس تماما بايت، في القول. نكون أكثر دقة الآن. ما يحصل المخزنة في x؟ عنوان، وأعتقد أنني سمعت ذلك. فماذا malloc العودة؟ يخصص malloc سلوكيا قطعة من الذاكرة. ولكن كيف أنها لا تعطيك الوصول إلى ذلك؟ فإنها ترجع ماذا؟ عنوان البايت الأول في جزء من الذاكرة. الآن، وهذا هو السوبر سهلة. انها بايت واحد فقط، مما يعني أن نحن نحصل على عنوان العودة هو عنوان من كل شيء. حتى المخزنة في x ثم، هو عنوان ذلك جزء من الذاكرة. وفي الوقت نفسه، ما يحدث بعد ذلك؟ ذلك الواقع، دعونا نمضي قدما و رسم هذا الخروج بسرعة حقيقية. حتى إذا نذهب أكثر إلى الشاشة هنا و نحن نلعب من ذلك كثافة * x و كثافة * ذ هو ذاهب لتفعل ما بالنسبة لي؟ أزعم أنه مجرد تنوي القيام به شيء من هذا القبيل والذي يطلق عليه السينية، و هذا والذي يطلق عليه ذ. وفي الوقت نفسه، السطر الثالث من التعليمات البرمجية الذهاب الى تخصيص حجم وكثافة العمليات، والذي يحدث أن تكون - آسف إذا قلت واحدة قبل قصدته كثافة واحدة - أربعة بايت على جهاز كمبيوتر نموذجي. على الأقل مع الأجهزة CS50. لذلك هذا هو الذهاب الى تخصيص ذلك، من يدري؟ في مكان ما هنا. وهذا يتم تخزينها في بعض معالجة الثور، من يدري؟ ولكن ما يحدث أن يحصل عاد هو هذا العنوان. ولكننا سوف يوجه هذا بالصور بوصفه مجرد السهم من هذا القبيل. الآن في السطر التالي * س يحصل 42. ماذا * س يعني في شروط للشخص العادي؟ مجرد الذهاب إلى هناك. انتقل إلى هذا العنوان. أو بعبارة أخرى، اتبع سهم وضعت 42 هناك. ولكن بعد ذلك حدث شيء سيء لبينكي، أليس كذلك؟ أذكر هذا الخط خمسة هنا، * ذ يحصل 13، في الواقع عدد سيئ الحظ، فعلت ما بالنسبة لنا؟ حسنا، * ذ يعني الذهاب إلى هناك. كذلك، لم يعط هذا قيمة بعد، أليس كذلك؟ لايوجد رمز ذ يجري تهيئة إلى أي شيء. كنا قد س يتم تهيئة إلى عنوان. ولكن أعلن ذ حتى أعلى. ولكن بعد ذلك فاصلة منقوطة، لا قيمة وقد وضعت فعلا في ذلك. لذلك فمن الإنصاف أن نسمي هذا قيمة القمامة. من يدري ما هو هناك؟ انها بقايا من البتات التي تم استخدامها بعض السطر السابق من التعليمات البرمجية في برنامجي. لذلك إذا قلت أذهب إلى هناك، وهذا هو مثل، ليس لدي أي فكرة من أين هذا السهم الذهاب الى نهاية المطاف. وهذا عادة عند الحصول على خطأ تجزئة. إذا كنت غير قصد إلغاء مرجعية، وذلك ل الكلام، أو يذهب إلى عنوان هذا ليس في الواقع عنوان المشروعة، تحدث أمور سيئة. وهذا هو بالضبط ما حدث التفكير بينكي. لذلك نذكر بأن القصة التي كان نيك نقول هنا ان نفس الفكرة مثل ما لقد تعادل مع الوهم الطباشير على السبورة هناك. وأعلن X و y. ثم أننا تخصيص حجم عدد صحيح وتخزينها في العاشر. ثم السطر التالي فعلنا * س. كان هذا عصا سحرية نيك من يعتبر إلغاء مرجعية. التي وضعت 42 في الذاكرة أشار س. ولكن هذا هو المكان الأشياء ذهب خاطئ. أليس كذلك؟ حاولنا أن إلغاء مرجعية ذ. ولكن ذ له بعض القيمة وهمية، أليس كذلك؟ أن السهم في الأيسر السفلي الزاوية، ليس مشيرا في الواقع إلى أي شيء. انها نوع من يفعل ماذا أنا فعلت هنا على متن الطائرة. لذلك تحدث أمور سيئة، وتجزئة خطأ، أو خطأ بينكي، في هذه الحالة. ولكن إذا كنا ثم تحديد ذلك عن طريق القيام خ ذ كيف يحصل تغيير القصة؟ حسنا، إذا كنت تفعل خ ذ يحصل، وهذا فعال نفس قوله أيا كان هذا هو، الثور، وهو شيء سوف تكون هي نفسها هنا، ثور شيء. بالصور أو سنقوم رسم السهم. حتى هنا على متن الطائرة مع بينكي، مع السطر التالي من رمز، ذ * يعني الذهاب إلى هناك. حيث هناك؟ وهو ما يعني أكثر من هنا. وعندما نقوم بتحديث ذلك لتكون 13 انها مجرد ينطوي على الذهاب و كتابة 13 هنا الآن. لذلك ربما ليس تماما واضحة للوهلة الأولى. ولكن لنلخص واستخدام نفس المصطلحات بينكي أن تستخدم هنا، لذلك أول اثنين من تخصيص المؤشرات، x و y، ولكن ليس pointees. وpointees ليس مصطلح يستخدم عموما. لكن مؤشر على الاطلاق. ولكن هذا ما يجري وأشار في التسميات في بينكي و. هذا السطر التالي، بطبيعة الحال، يخصص الباحث pointee. ذلك جزءا من الذاكرة - كما وجهت أكثر من يوم على الجانب الأيمن هناك - وتعيين س مساويا للإشارة إلى ذلك. هذا dereferences العاشر لتخزين 42 في الذاكرة التي انها لافتا في. ثم هذا، بطبيعة الحال، كان أمرا سيئا. لأن ذ لم يكن لافتا في أي شيء حتى الآن. هذا يصلح له. لذلك هذا لا يزال برنامج عربات التي تجرها الدواب. فقط لأننا تهب من خلال سطر التعليمات البرمجية عن طريق خط والمثل، يا جيدا، ندعه يتلف هناك. هذا شيء سيء. خلاف والبرنامج مجرد الذهاب الى إحباط تماما في هذا الخط. ولكن إذا كانت لإزالة تحطمت خط واستبدالها الماضيين هناك خطوط تعيين - باستخدام مؤشر الاحالة - ذ أن نشير إلى x كنقطة ر. ومن ثم يمكنك إلغاء مرجعية ذ بطريقة آمنة جدا. فأين هذا لا يترك لنا؟ كذلك، تبين أن تحت غطاء محرك السيارة في المكتبة CS50، مؤشرات هي المستخدمة في جميع أنحاء. وسنبدأ فعلا لقشر دعم تلك الطبقة قبل فترة طويلة. ولكن تبين أيضا، تعبير البعض منكم قد يكون على دراية، ولا سيما تلك أكثر راحة، هو في الواقع أن من شعبية جدا الموقع، أو تجاوز سعة مكدس، في هذه الأيام. ولكن هذا في الواقع جدا معنى تقني. نحن نعرف الآن ما هو المكدس. انها مثل كومة من الصواني داخل قاعة لتناول الطعام. أو داخل جهاز الكمبيوتر الخاص بك ذاكرته تلك الأطر التي يتم استخدامها بواسطة وظائف. كذلك، اتضح أنه بسبب ذلك تنفيذ بسيطة جدا لل الذاكرة والإطارات على ما يسمى مكدس، يمكنك أن تأخذ في الواقع السيطرة نظام الكمبيوتر بسهولة إلى حد ما. يمكنك تقتحم نظام إذا كان الناس مثلنا لم تكتب رمز لنا بشكل خاص. إذا كان الناس مثلنا استخدام قطع من الذاكرة أو استخدام المصفوفات - حتى أكثر شيوعا - ولكن في بعض الأحيان ننسى للتحقق من لدينا مجموعة من الحدود كما كنت قد لديك نفسك في بعض الأحيان، وتكرارية الطريق بعيدا جدا بعد نهاية صفيف. في أفضل الأحوال، برنامجك قد يتلف فقط. خطأ تجزئة، النوع من محرجة. ليست كبيرة، لكنها ليست بالضرورة شيئا سيئا للغاية. ولكن إذا كان البرنامج هو في الواقع الحقيقي على أجهزة المستخدمين، إذا انها تعمل على موقع على شبكة الانترنت أن الناس بشكل عشوائي الفعلية على شبكة الانترنت هي ضرب، والسماح الناس أشياء سيئة لحث على التعليمات البرمجية غير عموما ليس شيئا جيدا ل ذلك يعني فرصة ل السيطرة على جهاز الكمبيوتر. وهذا هو الذهاب الى نظرة خفي قليلا. لكنني اعتقدت أن تخويف لكم مع هذا المثال الأخير هنا. وهنا مثال من التعليمات البرمجية. وهناك ويكيبيديا جيدة المادة أن يمشي من خلال هذا بمزيد من التفصيل. لدي الرئيسي على الدعوة القاع فو، ويمر في ARGV 1. وهذا مجرد بحيث يمكنك تشغيل البرنامج وتمرير مدخلا التعسفي. ثم يتم التصريح فو حتى أعلى كما تقبل سلسلة أو أكثر على وجه التحديد، وشار *. بعد ذلك يعلن مجموعة من الأحرف. يطلق عليه منطقة عازلة، وبصورة أعم، من حجم 12. حتى 12 حرف يمكن احتواؤه لذلك دعا مجموعة ج. وبعد ذلك يستخدم هذه الوظيفة الجديدة، وهو جديد ولكن ليس من الصعب فهم، نسخة الذاكرة. فإنه ينسخ الذاكرة من شريط، والذي كان الماضي ن متغير، مهما كانت كتبته المستخدم في ARGV 1 في ج. كم عدد وحدات البايت؟ طول سلسلة من العارضة. لذلك وبعبارة أخرى، إذا كان المستخدم في أنواع ح-E-L-L-O دخول، طول السلسلة مرحبا من خمسة. لذلك خمسة من تلك بايت هو الذهاب الى الحصول نسخ في مجموعة تسمى ج، والتي هو من حجم 12. ولكن ما أنواع المستخدم في أطول بكثير الكلمة التي من 13 حرفا أو 14 حرفا أو 100 حرفا أو أكثر من ذلك؟ حيث هم ذاهبون أن تذهب؟ حسنا، هذا الإطار، أن علبة في كومة الطعام القاعة، انهم ذاهبون للذهاب إلى هناك. وانها مجرد الذهاب الى بدء الكتابة غيرها من الاشياء وهذا بالفعل على أن المكدس، تفيض المكدس، إذا جاز التعبير. لذلك بالصور، والتفكير في الامر بهذه الطريقة. هذا هو مجرد نسخة ملونة من الصورة كنا الرسم. في الجزء السفلي، دعنا نقول، هو الرئيسي. وعلى رأس ما ترونه الآن والإطار، ونا مميزا الآن، ل وظيفة تسمى فو. ولكن ما هو مثير للاهتمام هنا عن فو هو أن هنا هو إطاره. حتى انها سحبت منه فقط وكأنني فعلت ولكن في اللون الأزرق الفاتح. والآن هذا هو المكان ج قوس 0 يذهب. وهذا هو المكان ج قوس 11 هو الذهاب الى نهاية المطاف. وبعبارة أخرى، فإنه يحدث ل تكون ممثلة على النحو مربع. ولكن إذا كنت تبقي فقط السقوط بايت أسفل - أو حرف - انهم ذاهبون لإنهاء وصلت إلى المكان 0 على طول الطريق حتى إلى 11 لتصبح النتيجة 0 المفهرسة. ولكن أين هو الطابع 13TH الذهاب الى نهاية المطاف؟ حيث هو 14؟ أين الطابع 50 الذهاب الى نهاية المطاف؟ انها سوف تستمر إلى أسفل. لأنه حتى وإن كنا رسمها صورة مع مكدس يكبرون، و عناوين، اتضح، انتقل من عناوين صغيرة، صغيرة مؤشرات، إلى عناوين كبيرة. لذلك يبقى مجرد الذهاب أعلى وأعلى. لذلك إذا كانت أنواع المستخدم في مرحبا، هذا أمر عظيم. لا علة، لا توجد مشكلة، والجميع آمنة. ولكن إذا كان المستخدم في أنواع ما سنقوم استدعاء التعليمات البرمجية الخصومة، ممثلة بشكل عام باسم لذلك، هجوم، هجوم، هجوم، هجوم، ما يمكن أن يحدث؟ حسنا، إذا كان كل من المدخلات أن المستخدم كتبته في ليست مجرد بعض ودية أو سلسلة من الأحرف الهجوم. انها في الواقع سلسلة من الأحرف أنه إذا جمعت ذلك، هو رمز في الواقع. ربما انها رمز يقوم بحذف جميع الملفات الموجودة على القرص الصلب الخاص بك أو يرسل البريد المزعج أو شيء من هذا القبيل. لاحظ أن ما هو المفتاح هنا هو أن إذا حصلت على الرجل السيئ محظوظا بما فيه الكفاية ل الكتابة فوق قطعة حمراء من الذاكرة - التي لم أكن رسم على صورة بلدي ولكن هذه الصورة لديه ويكيبيديا هنا - ما يسمى عنوان عودتها. عندما يعود الغذاء، عندما يعود المبادلة، كيف تعرف الكمبيوتر للانتقال من هنا لهنا؟ أو في قطاع التكنولوجيا حتى أعلاه، وكيف أنها لا تعرف للذهاب من مبادلة كود - و0 و1 ل أن المبادلة الإنشاء - العودة الى الأصل؟ هناك ما يسمى عنوان المرسل المخزنة في هذا الإطار مكدس نفسه، على نفس الكافتيريا الدرج. لذلك إذا كان الرجل السيئ هو ذكي بما فيه الكفاية ل وضع شفرة الهجوم، شفرة الهجوم، والهجوم رمز، والحصول على محظوظا بما فيه الكفاية - في كثير من الأحيان من خلال التجربة والخطأ - ل الكتابة أن عنوان المرسل الحمراء، مع عنوان وإشعار أعلى جدا. إشعار 0835C080. الذي كتبت عليه الوراء حتى أعلى ل أسباب سنقوم ربما إعادة النظر. هذا هو هذا العدد. لذلك إذا كان الرجل السيئ يحصل محظوظا بما فيه الكفاية أو ذكي بما فيه الكفاية لكتابة فوق الحمراء شريط من الذاكرة مع عنوان كود انه او انها لديها بطريقة ما حقنها في جهاز الكمبيوتر الخاص بك، وتخمين الذي كود سوف تعاد إلى حالما يتم تنفيذ فو؟ رمز الرجل سيئة. لذلك هذا شفرة الهجوم، AAA، ومرة ​​أخرى، قد إرسال البريد المزعج، قد حذف كافة الملفات على القرص الصلب الخاص بك. ولكن هذا هو ما حقا تجاوز سعة مكدس هو، أو تجاوز سعة المخزن المؤقت، أو هجوم تجاوز سعة المخزن المؤقت. وانها لا يصدق، لا يصدق المشتركة حتى يومنا هذا مع البرامج المكتوبة في C، C + +، وحتى بعض اللغات الأخرى. على تلك المذكرة مخيف، وسوف نقوم تنتهي مزحة. [ضحك] أراك يوم الاربعاء. في CS50 المقبل - لذلك أنا كل من المصابيح القرص ولكن اليوم الانتظار، والحليب الخالي من الدهون، ونصف الهاتف الكتاب، وعصير البرتقال التي شربت اليوم. كابل USB، وجع. [عزف الموسيقى]