1 00:00:00,000 --> 00:00:10,970 >> [عزف الموسيقى] 2 00:00:10,970 --> 00:00:12,536 >> DAVID J. مالان: حسنا. 3 00:00:12,536 --> 00:00:13,392 >> [ضحك] 4 00:00:13,392 --> 00:00:14,240 >> نرحب مرة. 5 00:00:14,240 --> 00:00:14,990 هذا هو CS50. 6 00:00:14,990 --> 00:00:16,890 وهذا نهاية الأسبوع الخمسة. 7 00:00:16,890 --> 00:00:20,020 وحتى الآن، لدينا الى حد كبير تم اتخاذ أمرا مفروغا منه أن هناك 8 00:00:20,020 --> 00:00:23,480 وجود هذا المجمع، ضجيج، التي قمت تم استدعاء عن طريق هذا 9 00:00:23,480 --> 00:00:27,100 أداة أخرى تسمى جعل هذا بطريقة أو بأخرى سحرية يحول شفرة المصدر الخاصة بك 10 00:00:27,100 --> 00:00:31,350 إلى رمز الكائن، الأصفار ومنها أن أجهزة الكمبيوتر الخاصة بك وحدة المعالجة المركزية، المركزية 11 00:00:31,350 --> 00:00:33,410 وحدة المعالجة، يفهم الواقع. 12 00:00:33,410 --> 00:00:36,770 ولكن اتضح أن هناك عددا هذا يجري تحت غطاء محرك السيارة في 13 00:00:36,770 --> 00:00:38,690 بين المدخلات والمخرجات. 14 00:00:38,690 --> 00:00:41,800 >> وأود أن أقترح أن نقوم لحم أن في بشيء من التفصيل في 15 00:00:41,800 --> 00:00:45,130 هذه الخطوات الأربع، وشيء يسمى ما قبل المعالجة، شيء 16 00:00:45,130 --> 00:00:48,300 دعا تجميع، والتي رأينا، ما يسمى تجميع، و 17 00:00:48,300 --> 00:00:49,420 ما يسمى الارتباط. 18 00:00:49,420 --> 00:00:53,270 لذلك حتى الآن، في بعض لدينا برامج، لقد كان لدينا حادة تشمل. 19 00:00:53,270 --> 00:00:56,650 في الآونة الأخيرة كان لدينا بعض حاد ويعرف عن الثوابت. 20 00:00:56,650 --> 00:01:00,660 حتى اتضح أن تلك الأشياء التي تكون مسبوقة بالرمز أو تجزئة 21 00:01:00,660 --> 00:01:04,150 رمز الجنيه هي ما قبل المعالج توجيهات. 22 00:01:04,150 --> 00:01:07,960 هذا مجرد طريقة أخرى للقول انها سطر من التعليمات البرمجية هذا في الواقع 23 00:01:07,960 --> 00:01:12,280 تحويلها إلى شيء آخر قبل الكمبيوتر حتى في محاولة لتحويل 24 00:01:12,280 --> 00:01:13,800 البرنامج الى أصفار ومنها. 25 00:01:13,800 --> 00:01:19,000 >> على سبيل المثال، يتضمن حادة القياسية I / O ح، يعني الى حد كبير اذهبوا 26 00:01:19,000 --> 00:01:24,010 قبل، والاستيلاء على محتويات الملفات stdio.h ولصقها هناك حق. 27 00:01:24,010 --> 00:01:25,880 لذلك لا الآحاد والأصفار و عند تلك النقطة بعد. 28 00:01:25,880 --> 00:01:27,470 انها حقا مجرد تبديل. 29 00:01:27,470 --> 00:01:30,790 وهذا ما فعله خلال ما يسمى قبل معالجة المرحلة، عند 30 00:01:30,790 --> 00:01:34,230 في الواقع تشغيل ضجيج أو على وجه التحديد جعل في معظم الحالات. 31 00:01:34,230 --> 00:01:36,950 لذلك كل هذا حدث ويحدث أول تلقائيا حتى الآن. 32 00:01:36,950 --> 00:01:38,800 >> ثم تأتي الخطوة تجميع. 33 00:01:38,800 --> 00:01:40,920 ولكن كنا التبسيط تجميع. 34 00:01:40,920 --> 00:01:45,060 تجميع برنامج يعني حقا أن أعتبر من شيء من هذا القبيل C، و 35 00:01:45,060 --> 00:01:48,430 شفرة المصدر لقد تم كتابة، بانخفاض إلى ما يسمى التجمع. 36 00:01:48,430 --> 00:01:52,900 لغة التجميع هو المستوى الأدنى اللغة التي، لحسن الحظ، فإننا لن 37 00:01:52,900 --> 00:01:55,480 لدينا الكثير المناسبة ل أكتب هذا الفصل الدراسي. 38 00:01:55,480 --> 00:01:59,100 لكنه عند أدنى مستوى في بمعنى أن عليك أن تبدأ الكتابة حرفيا 39 00:01:59,100 --> 00:02:04,270 إضافة وطرح وضرب وتحميل من الذاكرة، وحفظ لذاكرة، و 40 00:02:04,270 --> 00:02:08,259 تعليمات أساسية جدا أن كمبيوتر، تحت غطاء محرك السيارة، 41 00:02:08,259 --> 00:02:09,639 يفهم الواقع. 42 00:02:09,639 --> 00:02:14,930 >> أخيرا، تجميع يأخذ تلك اللغة إلى الأصفار وتلك التي كنا 43 00:02:14,930 --> 00:02:16,190 واصفا حتى الآن. 44 00:02:16,190 --> 00:02:19,270 وأخيرا حقا، وهناك ما يسمى المرحلة ربط، والتي سنقوم 45 00:02:19,270 --> 00:02:22,360 نرى في مجرد لحظة، يجمع التي الأصفار ومنها مع الأصفار الخاص بك و 46 00:02:22,360 --> 00:02:24,870 منها أشخاص آخرين قبل قمت بإنشائها. 47 00:02:24,870 --> 00:02:26,660 >> لذلك نعتبر هذا البرنامج بسيطة عظمى. 48 00:02:26,660 --> 00:02:27,560 كان عليه من الأسبوع 1. 49 00:02:27,560 --> 00:02:29,610 أنه فقط قال، مرحبا العالم، على الشاشة. 50 00:02:29,610 --> 00:02:30,920 ركضنا ذلك من خلال ضجيج. 51 00:02:30,920 --> 00:02:33,200 أو هربنا من خلال الصنع الذي استمر ضجيج. 52 00:02:33,200 --> 00:02:36,170 وأنتج في الوقت الذي بعض الأصفار ومنها. 53 00:02:36,170 --> 00:02:38,100 ولكن تبين هناك و خطوة وسيطة. 54 00:02:38,100 --> 00:02:40,460 إذا ذهبت أكثر من هنا -، فعلت عفوا لا نريد أن نرى له حتى الآن. 55 00:02:40,460 --> 00:02:44,800 إذا ذهبت أكثر من هنا إلى الأجهزة بلدي وأنا فتح hello.c، هنا 56 00:02:44,800 --> 00:02:46,160 هو أن البرنامج نفسه. 57 00:02:46,160 --> 00:02:48,600 وما أنا ذاهب الى القيام به في محطة بلدي نافذة هنا وانا ذاهب الى 58 00:02:48,600 --> 00:02:51,430 تشغيل ضجيج بدلا من جعل التي بأتمتة كل أربعة من 59 00:02:51,430 --> 00:02:52,870 تلك الخطوات بالنسبة لنا. 60 00:02:52,870 --> 00:02:58,620 وانا ذاهب الى القيام رنة-S و ثم hello.c ثم أدخل. 61 00:02:58,620 --> 00:03:00,590 >> وأحصل على موجه وامض مرة أخرى، وهو أمر جيد. 62 00:03:00,590 --> 00:03:05,280 والآن في نافذة أكبر قليلا، أنا ذاهب لفتح gedit هنا. 63 00:03:05,280 --> 00:03:09,610 وانا ذاهب لفتح ملف، تبين، ويسمى هذا hello.s 64 00:03:09,610 --> 00:03:11,870 يحتوي أن لغة التجميع التي أشرت إليها سابقا. 65 00:03:11,870 --> 00:03:15,060 وهذا هو ما يسمى التجمع اللغة، ومستوى منخفض نسبيا 66 00:03:15,060 --> 00:03:18,470 التعليمات التي إنتل وحدة المعالجة المركزية الخاصة بك أو كل ما هو في الداخل 67 00:03:18,470 --> 00:03:19,350 يفهم. 68 00:03:19,350 --> 00:03:24,480 وسائل التحقق هو الخطوة. المكالمة ل الدعوة، وهي وظيفة على مستوى منخفض جدا. 69 00:03:24,480 --> 00:03:26,380 فرعية هي للطرح. 70 00:03:26,380 --> 00:03:30,370 >> لذلك عندما يكون لديك وحدة المعالجة المركزية خاصة داخل من جهاز الكمبيوتر الخاص بك، ما يجعلها 71 00:03:30,370 --> 00:03:34,300 متميزة، مقابل وحدات المعالجة المركزية الأخرى على السوق، هو الذي التعليمات التي 72 00:03:34,300 --> 00:03:39,460 يفهم كثير من الأحيان وكيف كفاءة هو، كيف هو سريع في تنفيذ بعض 73 00:03:39,460 --> 00:03:40,380 من هذه التعليمات. 74 00:03:40,380 --> 00:03:45,150 الآن لمعرفة المزيد عن هذا، يمكنك أن تأخذ المقبل CS61 سقوط في الكلية. 75 00:03:45,150 --> 00:03:48,170 ولكن هنا لدينا، على سبيل المثال، بعض المعرفات التي قد تبدو مألوفة. 76 00:03:48,170 --> 00:03:50,150 hello.c هو اسم البرنامج. 77 00:03:50,150 --> 00:03:51,070 >> . النص - 78 00:03:51,070 --> 00:03:54,190 ليس هناك الكثير من الاهتمام هناك الآن فقط، نذكر بأن النص 79 00:03:54,190 --> 00:03:59,190 الجزء، اعتبارا من الاثنين، حيث في ذاكرة البرنامج ينتهي فعليا حتى. 80 00:03:59,190 --> 00:04:01,330 ذلك أن ما لا يقل عن غامضة مألوفة هناك. 81 00:04:01,330 --> 00:04:03,730 هنا، بطبيعة الحال، هو إشارة من المهمة الرئيسية لدينا. 82 00:04:03,730 --> 00:04:07,220 التمرير لأسفل، وهذه إشارة إلى الأشياء دعا السجلات وقطع صغيرة جدا من 83 00:04:07,220 --> 00:04:09,190 الذاكرة داخل وحدة المعالجة المركزية الفعلية الخاصة بك. 84 00:04:09,190 --> 00:04:12,930 وإذا كنت انتقل لأسفل حتى أبعد من ذلك، أرى نوعا 85 00:04:12,930 --> 00:04:14,240 ذكر غير المباشرة للASCII. 86 00:04:14,240 --> 00:04:17,120 وهناك، في الواقع، هو أن سلسلة، مرحبا، فاصلة، العالم. 87 00:04:17,120 --> 00:04:20,079 >> قصة قصيرة طويلة، وقد كان هذا يحدث بالنسبة لك، تلقائيا، 88 00:04:20,079 --> 00:04:22,140 تحت غطاء محرك السيارة كل هذا الوقت. 89 00:04:22,140 --> 00:04:26,450 وماذا كان يحدث هو في الحقيقة مرة واحدة كنت قد تشغيل ضجيج، أو عن طريق 90 00:04:26,450 --> 00:04:29,150 جعل، كنت الحصول على الأولى، من شفرة المصدر، و 91 00:04:29,150 --> 00:04:30,700 ما يسمى لغة التجميع. 92 00:04:30,700 --> 00:04:35,210 ثم ضجيج هو تحويل هذا التجمع اللغة وصولا الى أصفار ومنها. 93 00:04:35,210 --> 00:04:38,340 وهذه هي الشريحة التي بدأنا مناقشتنا في الأسبوع 0 على - 94 00:04:38,340 --> 00:04:39,840 ثم أسبوع 1 يوم. 95 00:04:39,840 --> 00:04:44,030 ثم أخيرا، ومنها تلك الأصفار وجنبا إلى جنب مع الآحاد والأصفار و 96 00:04:44,030 --> 00:04:47,190 من هذه المكتبات كنا اتخاذ لمنح مثل ستاندرد I / O أو 97 00:04:47,190 --> 00:04:50,010 المكتبة سلسلة أو حتى مكتبة CS50. 98 00:04:50,010 --> 00:04:54,200 >> لذلك لرسم هذه الصورة أكثر بصريا، لدينا hello.c. 99 00:04:54,200 --> 00:04:57,220 وذلك، بطبيعة الحال، يستخدم printf تعمل القول، مرحبا العالم. 100 00:04:57,220 --> 00:05:01,810 الخطوة تجميع يأخذ عليه ل هذا الملف رأينا فقط hello.s، حتى 101 00:05:01,810 --> 00:05:04,290 على الرغم من أن عادة هو حذف تلقائيا بالنسبة لك. 102 00:05:04,290 --> 00:05:06,050 ولكن هذا هو رمز التجميع في خطوة الوسط. 103 00:05:06,050 --> 00:05:09,750 وبعد ذلك عندما نجتمع في التجمع اللغة، إذا جاز التعبير، وذلك عندما كنت 104 00:05:09,750 --> 00:05:10,830 الحصول على تلك الأصفار ومنها. 105 00:05:10,830 --> 00:05:13,920 لذلك قمنا بالتكبير فعال اليوم على ما كنا اتخاذ أمرا مفروغا منه، 106 00:05:13,920 --> 00:05:16,430 يعني الذهاب شفرة المصدر إلى التعليمات البرمجية الهدف. 107 00:05:16,430 --> 00:05:18,850 >> ولكن أخيرا، والآن تلك الصورة نفسها - دعونا يشق عليه أكثر من ل 108 00:05:18,850 --> 00:05:20,020 الجانب الأيسر. 109 00:05:20,020 --> 00:05:22,880 ونلاحظ أنه في الجزء العلوي هناك ذكرت stdio.h. 110 00:05:22,880 --> 00:05:25,030 وهذا هو الملف الذي قمنا بتضمين تقريبا في كل من 111 00:05:25,030 --> 00:05:26,250 برامج لدينا كتب. 112 00:05:26,250 --> 00:05:28,830 وهذا هو الملف محتوياتها الحصول على نسخة لصق، 113 00:05:28,830 --> 00:05:30,350 على نحو فعال على قمة التعليمات البرمجية. 114 00:05:30,350 --> 00:05:34,170 ولكن اتضح أنه على الكمبيوتر النظام في مكان ما، هناك يفترض أن 115 00:05:34,170 --> 00:05:39,150 ملف stdio.c أن شخصا ما كتب سنوات قبل أن تنفذ جميع 116 00:05:39,150 --> 00:05:41,870 الوظائف التي تم الإعلان في stdio.h. 117 00:05:41,870 --> 00:05:45,465 >> الآن في واقع الأمر ربما ليس على ماك أو جهاز الكمبيوتر أو حتى في 118 00:05:45,465 --> 00:05:47,660 الأجهزة CS50 هو رمز C الخام. 119 00:05:47,660 --> 00:05:52,710 شخص جمعت بالفعل، وشملت ملف س لرمز الكائن أو أ 120 00:05:52,710 --> 00:05:56,020 ملف، والذي يشير إلى مكتبة المشتركة وهذا ما كان مثبتة مسبقا و 121 00:05:56,020 --> 00:05:57,240 قبل تجميعها بالنسبة لك. 122 00:05:57,240 --> 00:06:01,950 ولكن لنفترض أن هناك في الواقع على موقعنا على stdio.c الكمبيوتر بالتوازي 123 00:06:01,950 --> 00:06:02,650 مع ضجيج. 124 00:06:02,650 --> 00:06:04,960 يتم ترجمة التعليمات البرمجية الخاصة بك وتجميعها. 125 00:06:04,960 --> 00:06:09,200 ويجري تجميع كود stdio.c 'ق و تجميعها، بحيث هذه الأخيرة جدا 126 00:06:09,200 --> 00:06:13,730 خطوة، إلى هنا، علينا أن بطريقة ما ربط، إذا جاز التعبير، الأصفار واولادكم 127 00:06:13,730 --> 00:06:18,430 مع له أو لها الأصفار ومنها إلى واحدة برنامج بسيط وهذا هو في نهاية المطاف 128 00:06:18,430 --> 00:06:20,540 فقط ودعا مرحبا. 129 00:06:20,540 --> 00:06:23,340 >> بحيث كل من سحر هذا حدث ويحدث حتى الآن. 130 00:06:23,340 --> 00:06:26,430 وسوف تستمر في اتخاذ هذه العمليات أمرا مفروغا منه، ولكن ندرك 131 00:06:26,430 --> 00:06:28,750 هناك الكثير من التفاصيل المثيرة يجري تحت هناك. 132 00:06:28,750 --> 00:06:31,920 وهذا ما يجعل لديك الكمبيوتر مع إنتل في الداخل 133 00:06:31,920 --> 00:06:33,940 مميزة بشكل خاص. 134 00:06:33,940 --> 00:06:37,020 >> لذلك على تلك المذكرة، إذا كنت ترغب في الانضمام إلينا لتناول طعام الغداء يوم الجمعة، لا تذهب 135 00:06:37,020 --> 00:06:41,570 إلى المكان cs50.net/rsvp المعتادة، 13:15 يوم الجمعة. 136 00:06:41,570 --> 00:06:43,400 والآن عدد قليل من الإعلانات. 137 00:06:43,400 --> 00:06:44,670 لذلك لدينا بعض الأخبار الجيدة. 138 00:06:44,670 --> 00:06:45,970 ونحن لدينا بعض الأخبار السيئة. 139 00:06:45,970 --> 00:06:47,260 نبدأ مع بعض الأخبار الجيدة هنا. 140 00:06:47,260 --> 00:06:52,038 141 00:06:52,038 --> 00:06:54,510 >> [أنين] 142 00:06:54,510 --> 00:06:54,710 >> حسنا. 143 00:06:54,710 --> 00:06:56,670 حسنا، انها من الناحية الفنية عطلة، لذلك انها ليست الكثير هدية منا. 144 00:06:56,670 --> 00:06:58,030 ولكن بعد ذلك أنباء سيئة بالطبع. 145 00:06:58,030 --> 00:07:00,550 146 00:07:00,550 --> 00:07:01,880 >> [أنين] 147 00:07:01,880 --> 00:07:03,530 >> قضيت الكثير من الوقت على هذه الرسوم المتحركة. 148 00:07:03,530 --> 00:07:04,690 >> [ضحك] 149 00:07:04,690 --> 00:07:07,000 >> سيكون هناك دورة الاستعراض هذا المقبلة الاثنين. 150 00:07:07,000 --> 00:07:08,340 انها سوف تكون في الساعة 5:30 AM. 151 00:07:08,340 --> 00:07:11,210 نحن سوف أذكر لكم من كل هذه التفاصيل عبر البريد الإلكتروني على ملعب ل 152 00:07:11,210 --> 00:07:13,470 الموقع في بضع أيام. 153 00:07:13,470 --> 00:07:16,610 سيتم تصويره وإتاحتها بعد ذلك بوقت قصير. 154 00:07:16,610 --> 00:07:19,200 حتى إذا كنت لا يمكن أن تجعل ان يوم الاثنين فتحة الليل، لا تقلق. 155 00:07:19,200 --> 00:07:22,270 أقسام هذا الأسبوع القادمة سوف أيضا التركيز على استعراض لهذه المسابقة. 156 00:07:22,270 --> 00:07:25,670 إذا فرعكم هو يوم الاثنين، والذي هو عطلة الجامعة في الواقع، ونحن سوف 157 00:07:25,670 --> 00:07:26,920 لا تزال تجتمع في القسم. 158 00:07:26,920 --> 00:07:28,890 إذا كنت ببساطة لا يمكن جعل ذلك قسم لأنك ذاهب 159 00:07:28,890 --> 00:07:29,860 بعيدا، هذا شيء طيب. 160 00:07:29,860 --> 00:07:33,710 حضور يوم الأحد أو يوم الثلاثاء أو القسم لحن في لقسم جيسون، الذي هو 161 00:07:33,710 --> 00:07:35,110 على شبكة الإنترنت. 162 00:07:35,110 --> 00:07:37,490 >> لذلك، المزيد من الأخبار السيئة. 163 00:07:37,490 --> 00:07:41,960 وذلك وفقا للمنهج، لدينا محاضرة يوم الجمعة المقبل. 164 00:07:41,960 --> 00:07:43,690 ولكن الخبر السار - 165 00:07:43,690 --> 00:07:44,860 بوضوح، وقضيت وقتا طويلا في هذا الشأن. 166 00:07:44,860 --> 00:07:45,280 >> [ضحك] 167 00:07:45,280 --> 00:07:47,140 >> سنقوم بإلغاء محاضرات يوم الجمعة المقبل ل. 168 00:07:47,140 --> 00:07:50,590 بحيث يكون هدية بالنسبة لنا، لذلك كنت يمكن أن يكون حقا راحة لطيفة في 169 00:07:50,590 --> 00:07:52,990 بين هذا الاسبوع وأسبوعين من الآن. 170 00:07:52,990 --> 00:07:57,460 لذلك لا محاضرات الاسبوع المقبل، مجرد صغيرة مسابقة قليلا، والتي يجب أن تكون 171 00:07:57,460 --> 00:07:59,030 الحصول على متحمسون بشكل متزايد. 172 00:07:59,030 --> 00:08:03,870 >> لذلك دعونا الآن أن نوجه اهتمامنا ل ما هو في الواقع أكثر البصرية 173 00:08:03,870 --> 00:08:06,990 وأكثر إثارة وتحديد المرحلة لماذا سيكون في الأفق 174 00:08:06,990 --> 00:08:08,420 في غضون بضعة أسابيع الوقت. 175 00:08:08,420 --> 00:08:12,160 بعد الاختبار الأول، ونحن سوف تحويل محور مشكلتنا يحدد إلى أخرى 176 00:08:12,160 --> 00:08:16,710 المشكلة مجال معين، وذلك من الطب الشرعي أو الأمن بشكل عام. 177 00:08:16,710 --> 00:08:19,550 >> في الواقع، فإن التقليد مع هذه المشكلة المجموعة هي بالنسبة لي واحدة من 178 00:08:19,550 --> 00:08:24,850 زميل التدريس أو المصدقة على السير عبر حرم أخذ بعض الصور من 179 00:08:24,850 --> 00:08:29,450 الناس واضحة يمكن تحديدها ولكن غير، الأماكن، أو الأشياء، ثم كل عام وأنا 180 00:08:29,450 --> 00:08:34,520 إدارة بطريقة أو بأخرى لحذف بطريق الخطأ أو الفاسدة بطاقة وسائل الإعلام الرقمية 181 00:08:34,520 --> 00:08:35,720 وهذا داخل الكاميرا. 182 00:08:35,720 --> 00:08:36,860 ولكن ليست صفقة كبيرة. 183 00:08:36,860 --> 00:08:39,200 يمكنني المضي قدما والمكونات ذلك في جهاز الكمبيوتر الخاص بي. 184 00:08:39,200 --> 00:08:43,010 أنا يمكن أن تجعل صورة الشرعي منه، لذلك في الكلام، عن طريق نسخ الأصفار و 185 00:08:43,010 --> 00:08:46,830 منها الخروج من أن بطاقة الذاكرة، سواء في بطاقة SD أو بطاقة فلاش مدمج أو 186 00:08:46,830 --> 00:08:48,100 مهما كنت على دراية. 187 00:08:48,100 --> 00:08:49,300 وبعد ذلك يمكننا أن يسلم بها. 188 00:08:49,300 --> 00:08:53,190 >> وبالتالي فإن التحدي الذي ينتظرنا، من بين أمور أخرى الامور بالنسبة لك، وسوف تكون لكتابة 189 00:08:53,190 --> 00:08:58,630 كود C أن يتعافى في مجمله مجموعة من سوف ملفات JPEG بالنسبة لي وكشفت يكون 190 00:08:58,630 --> 00:09:00,190 هؤلاء الناس، الأماكن، أو الأشياء. 191 00:09:00,190 --> 00:09:03,340 وسنقوم أيضا التحدث في هذه المشكلة تعيين وخلال الأيام القادمة، عن 192 00:09:03,340 --> 00:09:04,440 الرسومات بشكل عام. 193 00:09:04,440 --> 00:09:06,140 استخدمنا لهم، وبطبيعة الحال، للخروج. 194 00:09:06,140 --> 00:09:09,080 ولكن كنت قد اتخذت لمنح نوع من توجد هذه المفاهيم على مستوى عال 195 00:09:09,080 --> 00:09:10,680 من المستطيلات والأشكال البيضاوية. 196 00:09:10,680 --> 00:09:12,450 لكن تحت غطاء محرك السيارة هناك بكسل. 197 00:09:12,450 --> 00:09:14,370 وكان لديك لبدء التفكير في تلك. 198 00:09:14,370 --> 00:09:18,800 أو سوف للتعيين ص 4 أن نفكر حول الفجوة بين الطوب، وكيف 199 00:09:18,800 --> 00:09:21,990 بسرعة كنت الكرة تتحرك في جميع أنحاء الشاشة للخروج. 200 00:09:21,990 --> 00:09:24,830 حتى لا يكون هناك هذه الفكرة من النقاط على الشاشة هذا 201 00:09:24,830 --> 00:09:26,290 حيز اللعب بالفعل. 202 00:09:26,290 --> 00:09:29,430 >> الآن ماذا أنت ترى، رغم ذلك، هو ما تحصل على شاشة الكمبيوتر. 203 00:09:29,430 --> 00:09:33,680 إذا كنت قد شاهدت من أي وقت مضى بعض جيدة أو تلفزيون سيئة، خلاف هم الى حد كبير 204 00:09:33,680 --> 00:09:36,280 علاج للجمهور مثل technophobes الذين لا حقا 205 00:09:36,280 --> 00:09:37,630 أعرف الكثير عن الحوسبة. 206 00:09:37,630 --> 00:09:40,840 وهكذا فإنه من السهل جدا للشرطة المباحث أن أقول، يمكنك 207 00:09:40,840 --> 00:09:41,710 تنظيف ما يصل بالنسبة لي؟ 208 00:09:41,710 --> 00:09:42,710 أو تعزيز، أليس كذلك؟ 209 00:09:42,710 --> 00:09:45,550 تعزيز مثل الكلمة الطنانة في معظم أي عرض الجريمة ذات الصلة. 210 00:09:45,550 --> 00:09:49,240 والواقع هو إذا كنت تأخذ جدا الصورة ضبابية من المشتبه به 211 00:09:49,240 --> 00:09:51,620 شيئا سيئا، لا يمكنك فقط تعزيزه. 212 00:09:51,620 --> 00:09:53,080 لا يمكنك تكبير ما لا نهاية. 213 00:09:53,080 --> 00:09:56,350 لا يمكنك أن ترى في بريق من شخص ما العين الذين ارتكبوا تلك 214 00:09:56,350 --> 00:09:59,860 جريمة معينة، على الرغم من انتشار هذه على شاشة التلفزيون. 215 00:09:59,860 --> 00:10:04,110 >> وحتى مع ذلك دعونا أن تحفيز المشكلة القادمة مع مجموعة لمحة 216 00:10:04,110 --> 00:10:05,765 بعض البرامج التي قمت قد تكون مألوفة. 217 00:10:05,765 --> 00:10:06,500 >> [تشغيل الفيديو] 218 00:10:06,500 --> 00:10:07,835 >> -OK. 219 00:10:07,835 --> 00:10:09,956 الآن، دعونا الحصول على نظرة فاحصة على لك. 220 00:10:09,956 --> 00:10:17,060 221 00:10:17,060 --> 00:10:17,766 >> -لأنه عقد. 222 00:10:17,766 --> 00:10:18,658 تشغيل هذا مرة أخرى. 223 00:10:18,658 --> 00:10:19,550 >> -انتظر لحظة. 224 00:10:19,550 --> 00:10:21,580 يسير في الاتجاه الصحيح. 225 00:10:21,580 --> 00:10:21,800 >> هناك. 226 00:10:21,800 --> 00:10:22,690 تجميد ذلك. 227 00:10:22,690 --> 00:10:23,692 >> كامل الشاشة. 228 00:10:23,692 --> 00:10:23,846 >> -OK. 229 00:10:23,846 --> 00:10:24,154 تجميد ذلك. 230 00:10:24,154 --> 00:10:25,140 >> -تشديد على ذلك، سوف يا؟ 231 00:10:25,140 --> 00:10:27,090 >> المتجهات في على هذا الرجل من العجلة الخلفية. 232 00:10:27,090 --> 00:10:29,730 >> التكبير في الحق هنا على هذه البقعة. 233 00:10:29,730 --> 00:10:33,700 >> ، مع الحق في المعدات، وتصويرها يمكن تكبير وشحذ. 234 00:10:33,700 --> 00:10:34,490 >> -ما هذا؟ 235 00:10:34,490 --> 00:10:35,870 >> -إنها برنامج تعزيز. 236 00:10:35,870 --> 00:10:36,793 >> هل بإمكانك الواضح أن يصل أي؟ 237 00:10:36,793 --> 00:10:38,560 >> -I لا أعرف. 238 00:10:38,560 --> 00:10:39,090 دعونا تعزيزه. 239 00:10:39,090 --> 00:10:41,690 >> -A-تعزيز القسم 6. 240 00:10:41,690 --> 00:10:43,510 >> -I تعزيز التفصيل و- 241 00:10:43,510 --> 00:10:44,456 >> -أعتقد أن هناك ما يكفي لتعزيز. 242 00:10:44,456 --> 00:10:45,402 الإفراج عنها إلى الشاشة. 243 00:10:45,402 --> 00:10:47,300 >> -تعزيز انعكاس في عينها. 244 00:10:47,300 --> 00:10:49,330 >> دعنا تشغيل هذا من خلال تعزيز الفيديو. 245 00:10:49,330 --> 00:10:50,340 >> إدغار-، يمكنك تعزيز هذا؟ 246 00:10:50,340 --> 00:10:52,320 >> هانغ جرا. 247 00:10:52,320 --> 00:10:54,290 >> -I've تم العمل على هذا التفكير. 248 00:10:54,290 --> 00:10:55,560 >> -شخص ما التفكير. 249 00:10:55,560 --> 00:10:56,440 >> للانعكاس. 250 00:10:56,440 --> 00:10:57,940 >> -هناك انعكاس من وجه الرجل. 251 00:10:57,940 --> 00:10:58,860 >> -انعكاس. 252 00:10:58,860 --> 00:10:59,710 >> -هناك انعكاس. 253 00:10:59,710 --> 00:11:00,900 >> التكبير في على المرآة. 254 00:11:00,900 --> 00:11:03,500 >> أنت يمكن أن نرى انعكاس. 255 00:11:03,500 --> 00:11:04,700 >> هل بإمكانك تعزيز صورة من هنا؟ 256 00:11:04,700 --> 00:11:05,700 >> هل بإمكانك تعزيز له الحق هنا؟ 257 00:11:05,700 --> 00:11:06,500 >> هل بإمكانك تعزيز ذلك؟ 258 00:11:06,500 --> 00:11:07,380 >> هل بإمكانك تعزيز ذلك؟ 259 00:11:07,380 --> 00:11:08,190 >> هل يمكن أن نعزز هذا؟ 260 00:11:08,190 --> 00:11:08,940 >> -يمكنك تحسين ذلك؟ 261 00:11:08,940 --> 00:11:10,280 >> امسك على الثانية، سوف تعزز. 262 00:11:10,280 --> 00:11:11,570 >> التكبير في على الباب. 263 00:11:11,570 --> 00:11:12,180 >> -X10. 264 00:11:12,180 --> 00:11:13,052 >> التكبير. 265 00:11:13,052 --> 00:11:13,197 >> [ضحك] 266 00:11:13,197 --> 00:11:14,360 >> -نتحرك فيها 267 00:11:14,360 --> 00:11:15,100 >> -الانتظار، ووقف. 268 00:11:15,100 --> 00:11:15,740 >> وقفة. 269 00:11:15,740 --> 00:11:16,290 >> وقفة ذلك. 270 00:11:16,290 --> 00:11:19,390 >> تناوب 75 درجة حول العمودي من فضلك. 271 00:11:19,390 --> 00:11:19,886 >> [ضحك] 272 00:11:19,886 --> 00:11:24,350 >> وقفة، والعودة إلى الجزء حول الباب مرة أخرى. 273 00:11:24,350 --> 00:11:26,330 >> -حصلت على صورة محسن التي يمكن النقطية؟ 274 00:11:26,330 --> 00:11:28,990 >> لربما يمكننا استخدام براديب سين طريقة لمعرفة إلى النوافذ. 275 00:11:28,990 --> 00:11:30,680 >> وهذا البرنامج هو حالة من الفن. 276 00:11:30,680 --> 00:11:31,676 >> -قيمة الرمز هو خارج. 277 00:11:31,676 --> 00:11:34,166 >> ، مع الحق في الجمع من الخوارزميات. 278 00:11:34,166 --> 00:11:38,399 >> -انه اتخذ خوارزميات الإضاءة ل المستوى التالي، ويمكنني استخدامها ل 279 00:11:38,399 --> 00:11:38,648 تعزيز هذه الصورة. 280 00:11:38,648 --> 00:11:42,050 >> للقفل على وتوسيع محور ض. 281 00:11:42,050 --> 00:11:42,760 >> -تعزيز. 282 00:11:42,760 --> 00:11:43,060 >> -تعزيز. 283 00:11:43,060 --> 00:11:43,760 >> -تعزيز. 284 00:11:43,760 --> 00:11:45,010 >> -تجميد وتعزيز. 285 00:11:45,010 --> 00:11:47,470 286 00:11:47,470 --> 00:11:47,910 >> [END تشغيل الفيديو] 287 00:11:47,910 --> 00:11:51,470 >> DAVID J. مالان: إذن مشكلة تعيين 5 هو ما ينتظرنا هناك. 288 00:11:51,470 --> 00:11:55,260 لذلك سنقوم قريبا الحصول على فهم أفضل من متى وماذا يمكنك 289 00:11:55,260 --> 00:11:57,300 ونحن لا يمكن أن تعزز بهذه الطريقة. 290 00:11:57,300 --> 00:12:00,090 ولكن أولا، دعونا العودة اهتمامنا لبعض اللبنات سنقوم 291 00:12:00,090 --> 00:12:02,250 تحتاج إلى أن تكون قادرة على ان اقول ان القصة. 292 00:12:02,250 --> 00:12:05,580 >> لذلك أذكر بأننا وجه هذه الصورة على الاثنين وقليلا الاسبوع الماضي. 293 00:12:05,580 --> 00:12:09,970 وهذا يصف تخطيط الأشياء في ذاكرة الكمبيوتر الخاص بك عندما 294 00:12:09,970 --> 00:12:11,000 تشغيل بعض البرامج. 295 00:12:11,000 --> 00:12:14,310 قطاع التكنولوجيا حتى اعلى، التذكير، يشير إلى الأصفار الفعلية ومنها 296 00:12:14,310 --> 00:12:16,000 التي تشكل البرنامج. 297 00:12:16,000 --> 00:12:19,340 هناك، دون أن بعض تهيئة أو البيانات غير مهيأ، والتي عادة ما 298 00:12:19,340 --> 00:12:22,910 يشير إلى أشياء مثل الثوابت أو سلاسل أو المتغيرات العالمية التي لديها 299 00:12:22,910 --> 00:12:24,200 تم الإعلان في وقت مبكر. 300 00:12:24,200 --> 00:12:26,500 هناك كومة، لكننا سوف يأتي عد إلى أنه في بعض الشيء. 301 00:12:26,500 --> 00:12:27,410 >> وبعد ذلك هناك المكدس. 302 00:12:27,410 --> 00:12:30,660 مثل الكثير من كومة من الصواني في كافتيريا، وهذا هو المكان الذي يحصل الذاكرة 303 00:12:30,660 --> 00:12:33,610 الطبقات والطبقات كلما أنت تفعل ما في البرنامج؟ 304 00:12:33,610 --> 00:12:36,380 305 00:12:36,380 --> 00:12:37,730 ما هو استخدام المكدس ل؟ 306 00:12:37,730 --> 00:12:39,320 >> نعم؟ 307 00:12:39,320 --> 00:12:40,000 >> نداء ظيفة. 308 00:12:40,000 --> 00:12:42,890 أي وقت استدعاء دالة، انها نظرا لشظية من الذاكرة لل 309 00:12:42,890 --> 00:12:45,020 المتغيرات المحلية أو معلماته. 310 00:12:45,020 --> 00:12:48,810 وبالصور، ونحن نرى أنه مع كل وظيفة المتعاقبة دعا، عند A 311 00:12:48,810 --> 00:12:52,520 يدعو B C يدعو يدعو D، فإنها الحصول على الطبقات إلى المكدس. 312 00:12:52,520 --> 00:12:55,630 وداخل كل من تلك الشرائح من الذاكرة هي في جوهرها نطاق فريد من نوعه 313 00:12:55,630 --> 00:12:58,590 لذلك وظيفة، والتي، بطبيعة الحال، إشكالية إذا كنت ترغب في تسليم 314 00:12:58,590 --> 00:13:01,850 من وظيفة واحدة إلى قطعة أخرى البيانات التي تريدها 315 00:13:01,850 --> 00:13:03,500 ليتحور أو تغيير. 316 00:13:03,500 --> 00:13:08,060 >> وذلك ما كان لدينا الحل لتمكين وظيفة ممثلة كومة واحدة 317 00:13:08,060 --> 00:13:11,390 تأطير لتغيير داخل الذاكرة من إطار المكدس آخر؟ 318 00:13:11,390 --> 00:13:14,590 كيف تفعل هذه الكلام اثنين إلى واحد آخر؟ 319 00:13:14,590 --> 00:13:18,510 ذلك عن طريق مؤشرات أو عناوين، والتي، مرة أخرى، فقط تصف فيها في 320 00:13:18,510 --> 00:13:22,280 الذاكرة، عن طريق محددة لدغة العدد، وخاصة 321 00:13:22,280 --> 00:13:23,830 يمكن العثور على القيمة. 322 00:13:23,830 --> 00:13:26,860 لذلك أذكر آخر مرة جدا واصلنا القصة وبدا في 323 00:13:26,860 --> 00:13:28,280 برنامج عربات التي تجرها الدواب إلى حد ما. 324 00:13:28,280 --> 00:13:32,900 وهذا البرنامج هو عربات التي تجرها الدواب لبضع الأسباب، ولكن الأكثر إثارة للقلق هو 325 00:13:32,900 --> 00:13:34,620 لأنه فشل في التحقق من ماذا؟ 326 00:13:34,620 --> 00:13:39,111 327 00:13:39,111 --> 00:13:40,450 >> نعم، فإنه فشل في التحقق من المدخلات. 328 00:13:40,450 --> 00:13:41,870 آسف؟ 329 00:13:41,870 --> 00:13:43,880 >> إذا كان أكثر من 12 حرفا. 330 00:13:43,880 --> 00:13:47,260 بذكاء لذلك جدا، عند استدعاء memcopy، والتي، كما يوحي اسمها، فقط 331 00:13:47,260 --> 00:13:50,630 الذاكرة نسخ من حجة الثانية في أول حجة لها. 332 00:13:50,630 --> 00:13:54,730 الحجة الثالثة، بذكاء جدا، و فحص للتأكد من أن كنت لا 333 00:13:54,730 --> 00:13:59,400 نسخ أكثر من، في هذه الحالة، وطول من بار، عدد من الشخصيات، 334 00:13:59,400 --> 00:14:03,810 إلى الوجهة، والذي هو هذا مجموعة C. ولكن المشكلة هي أن ما 335 00:14:03,810 --> 00:14:07,230 إذا C نفسها ليست كبيرة بما فيه الكفاية للتعامل مع ذلك؟ 336 00:14:07,230 --> 00:14:09,900 وأنت تسير لنسخ عدد من بايت التي كنت قد أعطيت. 337 00:14:09,900 --> 00:14:13,040 ولكن ماذا لديك في الواقع أكثر بايت مما لديك غرفة لل؟ 338 00:14:13,040 --> 00:14:16,770 >> حسنا، هذا البرنامج بحماقة جدا فقط العائدات عمياء لاتخاذ أي انها 339 00:14:16,770 --> 00:14:20,650 معين، مرحبا مائل 0 هو كبيرة إذا سلسلة قصيرة 340 00:14:20,650 --> 00:14:22,040 بما فيه الكفاية، مثل خمسة أحرف. 341 00:14:22,040 --> 00:14:26,470 ولكن لو كان في الواقع 12 حرفا أو 1،200 حرفا، شاهدنا آخر مرة 342 00:14:26,470 --> 00:14:29,380 ان كنت مجرد الذهاب الى تماما الكتابة الذاكرة التي 343 00:14:29,380 --> 00:14:30,470 لا ينتمي لك. 344 00:14:30,470 --> 00:14:34,390 وأسوأ الحالات، إذا قمت بالكتابة فوق ذلك الجزء الأحمر هناك والتي كنا نسميها 345 00:14:34,390 --> 00:14:35,380 العودة عنوان - 346 00:14:35,380 --> 00:14:38,370 هذا هو فقط حيث الكمبيوتر تلقائيا، بالنسبة لك، وراء 347 00:14:38,370 --> 00:14:43,130 مشاهد، الثنيات بعيدا قيمة 32 بت التي يذكر أن ما ينبغي التصدي له 348 00:14:43,130 --> 00:14:47,080 العودة عندما فو، هذه وظيفة أخرى، ويتم تنفيذ. 349 00:14:47,080 --> 00:14:49,320 انها كسرة الخبز من نوع التي تقوم بإرجاع. 350 00:14:49,320 --> 00:14:52,490 إذا قمت بالكتابة فوق ذلك، يحتمل أن تكون، إذا كنت الرجل سيئة، يمكن يمكن 351 00:14:52,490 --> 00:14:54,750 يحتمل أن تولي شخص ما الكمبيوتر. 352 00:14:54,750 --> 00:14:58,020 وعليك بالتأكيد تحطم ذلك في معظم الحالات. 353 00:14:58,020 --> 00:15:01,690 >> الآن وقد تفاقمت هذه المشكلة فقط كما بدأنا نتحدث عن الذاكرة 354 00:15:01,690 --> 00:15:03,010 الإدارة بشكل عام. 355 00:15:03,010 --> 00:15:07,150 وmalloc، لتخصيص الذاكرة، هو الوظيفة التي يمكننا استخدامها لتخصيص 356 00:15:07,150 --> 00:15:11,260 الذاكرة عندما كنا لا نعرف مقدما أننا قد تحتاج الى بعض. 357 00:15:11,260 --> 00:15:13,960 لذلك، على سبيل المثال، إذا أعود إلى الأجهزة هنا. 358 00:15:13,960 --> 00:15:21,010 وأنا فتح من آخر مرة hello2.c، أذكر هذا البرنامج هنا، والتي بدا 359 00:15:21,010 --> 00:15:23,500 شيئا قليلا من هذا القبيل، فقط ثلاثة خطوط - 360 00:15:23,500 --> 00:15:27,940 أذكر اسمك، ثم اسم السلسلة، على اليسار، يساوي getstring. 361 00:15:27,940 --> 00:15:29,690 وبعد ذلك يمكننا طباعته، اسم المستخدم. 362 00:15:29,690 --> 00:15:31,170 >> لذلك كان هذا البرنامج بسيطة عظمى. 363 00:15:31,170 --> 00:15:34,870 أن يكون واضحا، اسمحوا لي أن المضي قدما وجعل مرحبا-2. 364 00:15:34,870 --> 00:15:36,680 انا ذاهب الى القيام مائل نقطة مرحبا-2. 365 00:15:36,680 --> 00:15:37,750 تذكر اسمك - 366 00:15:37,750 --> 00:15:38,140 ديفيد. 367 00:15:38,140 --> 00:15:38,840 دخول. 368 00:15:38,840 --> 00:15:39,540 مرحبا ديفيد. 369 00:15:39,540 --> 00:15:41,060 يبدو للعمل موافق. 370 00:15:41,060 --> 00:15:43,140 ولكن ما يحدث في الواقع تحت غطاء محرك السيارة هنا؟ 371 00:15:43,140 --> 00:15:44,670 دعونا أولا قشر يعود بعض الطبقات. 372 00:15:44,670 --> 00:15:48,380 سلسلة هو مجرد مرادف قمنا أدركت لماذا؟ 373 00:15:48,380 --> 00:15:49,110 نجمة شار. 374 00:15:49,110 --> 00:15:52,740 لذلك دعونا جعله أكثر قليلا غامضة ولكن الأصح أن هذا من الناحية الفنية 375 00:15:52,740 --> 00:15:55,570 هو نجم شار، وهو ما يعني أن اسم، نعم، هو متغير. 376 00:15:55,570 --> 00:15:59,920 ولكن ما مخازن اسم هو عنوان شار، الذي يشعر غريبا بعض الشيء 377 00:15:59,920 --> 00:16:01,050 لأنني الحصول على العودة سلسلة. 378 00:16:01,050 --> 00:16:03,580 انني اتلقى يعود متعددة حرف ليس حرف. 379 00:16:03,580 --> 00:16:07,400 >> ولكن بالطبع، ما عليك سوى أول عنوان شار إلى تذكر حيث 380 00:16:07,400 --> 00:16:08,870 سلسلة كاملة لأن لماذا؟ 381 00:16:08,870 --> 00:16:12,700 كيف يمكنك معرفة أين نهاية السلسلة هو معرفة بداية؟ 382 00:16:12,700 --> 00:16:13,630 الصفر مائل. 383 00:16:13,630 --> 00:16:17,260 حتى مع تلك القرائن اثنين على معرفة قبل بداية ونهاية 384 00:16:17,260 --> 00:16:20,280 أي سلسلة هي، طالما أنهم شكلت بشكل صحيح مع أن فارغة 385 00:16:20,280 --> 00:16:22,110 فاصل، بأن الصفر مائل. 386 00:16:22,110 --> 00:16:24,520 >> ولكن هذا يدعو getstring. 387 00:16:24,520 --> 00:16:28,020 واتضح أن getstring وقد تم كل هذا الوقت نوع من 388 00:16:28,020 --> 00:16:28,820 الغش بالنسبة لنا. 389 00:16:28,820 --> 00:16:32,460 انه تم القيام بهذا العمل، للتأكد، الحصول على سلسلة من المستخدم. 390 00:16:32,460 --> 00:16:34,580 ولكن أين تلك الذاكرة قد تأتي من؟ 391 00:16:34,580 --> 00:16:38,440 إذا رجعنا إلى الصورة هنا و تطبيق تعريف من مجرد 392 00:16:38,440 --> 00:16:42,610 منذ اللحظة، أن المكدس هو المكان الذاكرة يذهب عندما يتم استدعاء وظائف، 393 00:16:42,610 --> 00:16:45,370 من هذا المنطق، عند استدعاء getstring، وبعد ذلك اكتب في 394 00:16:45,370 --> 00:16:50,900 D-A-V-I-D أدخل، حيث هو D-A-V-I-D مائل الصفر المخزنة، استنادا إلى 395 00:16:50,900 --> 00:16:53,480 القصة لقد قال لنا الآن؟ 396 00:16:53,480 --> 00:16:55,190 >> يبدو أن يكون في المكدس، أليس كذلك؟ 397 00:16:55,190 --> 00:16:58,120 عند استدعاء سلسلة الحصول تحصل على شريحة صغيرة من الذاكرة على المكدس. 398 00:16:58,120 --> 00:17:01,630 لذلك من المعقول أن D-A-V-I-D يتم تخزين الصفر مائل 399 00:17:01,630 --> 00:17:02,770 هناك في المكدس. 400 00:17:02,770 --> 00:17:07,680 ولكن الانتظار لمدة دقيقة، getstring عوائد هذه السلسلة، إذا جاز التعبير، وهو ما يعني 401 00:17:07,680 --> 00:17:11,700 انها علبة من الكافتيريا واقلعت المكدس. 402 00:17:11,700 --> 00:17:14,560 وقلنا المرة الأخيرة أنه بمجرد و ترجع وظيفة، وكنت تأخذ ذلك 403 00:17:14,560 --> 00:17:20,109 صينية، إذا جاز التعبير، من المكدس، ما يمكن أن نفترض حول بقايا 404 00:17:20,109 --> 00:17:21,819 تلك الذاكرة؟ 405 00:17:21,819 --> 00:17:25,160 أنا نوع من أعادت رسم لهم كعلامات استفهام لأنها تصبح فعالة 406 00:17:25,160 --> 00:17:26,250 القيم غير معروف. 407 00:17:26,250 --> 00:17:29,500 يمكن إعادة استخدامها عند بعض يتم استدعاء الدالة المقبل. 408 00:17:29,500 --> 00:17:31,870 >> وبعبارة أخرى، إذا كان لنا أن يحدث ليتم تخزين - 409 00:17:31,870 --> 00:17:34,350 انا رسم صورة سريعة هنا من المكدس. 410 00:17:34,350 --> 00:17:38,690 إذا كان لنا أن يحدث ليكون أسفل الرسم من الجزء ذاكرتي، وسوف نقول 411 00:17:38,690 --> 00:17:42,230 أن هذا هو المكان من الذاكرة التي تحتلها ج الرئيسية وربما ARG و 412 00:17:42,230 --> 00:17:46,790 ARG الخامس وأي شيء آخر في البرنامج، عندما getstring يسمى، 413 00:17:46,790 --> 00:17:51,120 getstring يفترض يحصل قطعة من الذاكرة هنا. 414 00:17:51,120 --> 00:17:53,940 ثم D-A-V-I-D بطريقة أو بأخرى ينتهي في هذه الوظيفة. 415 00:17:53,940 --> 00:17:55,320 وانا ذاهب الى تبسيط. 416 00:17:55,320 --> 00:18:00,050 ولكن دعونا نفترض أن لD-A-V-I-D مائل الصفر. 417 00:18:00,050 --> 00:18:03,500 وهكذا يتم استخدام هذا العدد الكبير من وحدات البايت في إطار لgetstring. 418 00:18:03,500 --> 00:18:08,270 >> ولكن بمجرد getstring العودة، ونحن وقال آخر مرة أن هذه الذاكرة أكثر 419 00:18:08,270 --> 00:18:11,340 هنا يصبح كل - woops! - 420 00:18:11,340 --> 00:18:14,270 جميع يصبح محوها بشكل فعال. 421 00:18:14,270 --> 00:18:17,220 ويمكن أن نفكر في هذا السؤال كما هو الحال الآن يصادف لأن الذي يعرف 422 00:18:17,220 --> 00:18:18,720 ما يحدث لتصبح من تلك الذاكرة. 423 00:18:18,720 --> 00:18:22,130 في الواقع، وأنا في كثير من الأحيان استدعاء وظائف غير getstring. 424 00:18:22,130 --> 00:18:24,750 وبأسرع ما أسميه بعض الدول الاخرى وظيفة من getstring، ربما ليس في 425 00:18:24,750 --> 00:18:28,860 هذا البرنامج بالذات ونحن ننظر فقط ولكن بعض في أخرى، وبالتأكيد بعض الدول الاخرى 426 00:18:28,860 --> 00:18:34,180 وظيفة قد ينتهي يولى هذه البقعة المقبل في المكدس. 427 00:18:34,180 --> 00:18:39,410 >> لذلك لا يمكن أن يكون يخزن getstring D-A-V-I-D على المكدس لأنني سوف 428 00:18:39,410 --> 00:18:41,040 تفقد على الفور الوصول إليها. 429 00:18:41,040 --> 00:18:43,720 ولكننا نعرف أنهم getstring فقط بإرجاع ماذا؟ 430 00:18:43,720 --> 00:18:47,220 انها ليست العودة إلى لي ستة أحرف. 431 00:18:47,220 --> 00:18:51,090 ما هو العودة حقا فعلت نستنتج آخر مرة؟ 432 00:18:51,090 --> 00:18:52,480 عنوان أول. 433 00:18:52,480 --> 00:18:56,650 لذلك بطريقة أو بأخرى، عندما قمت بالاتصال getstring، انها تخصيص جزء من الذاكرة ل 434 00:18:56,650 --> 00:18:59,620 السلسلة التي المستخدمين اكتب و ثم يعود عنوان منه. 435 00:18:59,620 --> 00:19:02,930 واتضح أنه عندما تريد وظيفة تخصيص الذاكرة في هذا 436 00:19:02,930 --> 00:19:08,390 الطريق والعودة إلى الشخص الذي يسمى أن وظيفة، وعنوان 437 00:19:08,390 --> 00:19:11,870 أن جزءا من الذاكرة، كنت على الاطلاق لا يمكن وضعها في المكدس في 438 00:19:11,870 --> 00:19:14,750 أسفل، لأن وظيفيا انها مجرد سوف لا تصبح لك جدا 439 00:19:14,750 --> 00:19:17,800 بسرعة، لذلك ربما يمكنك تخمين حيث نحن على الارجح الى إرم 440 00:19:17,800 --> 00:19:20,130 بدلا من ذلك، ما يسمى الكومة. 441 00:19:20,130 --> 00:19:25,290 >> حتى بين الجزء السفلي من الذاكرة لديك تخطيط والجزء العلوي من الذاكرة لديك 442 00:19:25,290 --> 00:19:26,820 تخطيط هي في مجمله مجموعة من القطاعات. 443 00:19:26,820 --> 00:19:29,270 واحد هو المكدس، والحق أعلاه هو الكومة. 444 00:19:29,270 --> 00:19:33,680 والرجمة هي مجرد قطعة مختلفة من الذاكرة التي لا تستخدم لوظائف 445 00:19:33,680 --> 00:19:34,770 عندما كنت طالب. 446 00:19:34,770 --> 00:19:38,100 انها تستخدم للذاكرة على المدى الطويل، عندما تريد وظيفة واحدة للاستيلاء على بعض 447 00:19:38,100 --> 00:19:42,700 الذاكرة وتكون قادرة على الصمود إليها دون أن تفقد التحكم فيه. 448 00:19:42,700 --> 00:19:45,550 >> الآن هل يمكن أن ربما على الفور نرى أن هذا ليس 449 00:19:45,550 --> 00:19:48,060 بالضرورة التصميم المثالي. 450 00:19:48,060 --> 00:19:51,350 كما خصص البرنامج على الذاكرة المكدس، أو كما تسمونه أكثر و 451 00:19:51,350 --> 00:19:55,540 المزيد من الوظائف، أو كما كنت تخصيص الذاكرة على كومة مع malloc قبالة كما 452 00:19:55,540 --> 00:20:00,690 getstring يقوم به، ما بوضوح ويبدو أن المشكلة لا مفر منه؟ 453 00:20:00,690 --> 00:20:00,860 >> الحق. 454 00:20:00,860 --> 00:20:03,150 مثل حقيقة أن هذه السهام ويشيران إلى بعضهما البعض 455 00:20:03,150 --> 00:20:04,380 لا يبشر بالخير. 456 00:20:04,380 --> 00:20:08,630 وبالفعل، ونحن يمكن أن تعطل بشكل سريع جدا برنامج في أي عدد من الطرق. 457 00:20:08,630 --> 00:20:12,050 في الواقع، وأعتقد أننا قد يكون يتم ذلك عن طريق الخطأ مرة واحدة. 458 00:20:12,050 --> 00:20:14,020 أو إن لم يكن، دعونا نفعل ذلك تعمد الآن. 459 00:20:14,020 --> 00:20:21,330 اسمحوا لي المضي قدما وبسرعة فائقة إرسال برنامج يسمى dontdothis.c. 460 00:20:21,330 --> 00:20:26,730 والآن سأذهب هنا و لا تشمل stdio.h حادة. 461 00:20:26,730 --> 00:20:32,620 دعونا نعلن يأخذ وظيفة فو بدون وسائط، والذي هو 462 00:20:32,620 --> 00:20:34,040 تدل كذلك عن طريق الفراغ. 463 00:20:34,040 --> 00:20:37,830 >> والشيء الوحيد فو هو بصدد القيام به هو استدعاء فو، والتي ربما ليست 464 00:20:37,830 --> 00:20:39,100 أذكى فكرة، ولكن فليكن ذلك. 465 00:20:39,100 --> 00:20:40,490 ENT باطلة الرئيسي. 466 00:20:40,490 --> 00:20:45,270 الآن الشيء الوحيد الرئيسي هو الذهاب القيام به هو دعوة فو كذلك. 467 00:20:45,270 --> 00:20:51,050 وفقط لركلات، وانا ذاهب للذهاب قبل وهنا نقول printf "مرحبا من 468 00:20:51,050 --> 00:20:52,340 فو ". 469 00:20:52,340 --> 00:20:52,890 >> موافق. 470 00:20:52,890 --> 00:21:00,160 حتى إذا لم أكن جعل أي أخطاء، جعل dontdothis مائل نقطة. 471 00:21:00,160 --> 00:21:01,960 ودعونا نفعل ذلك في إطار أكبر - 472 00:21:01,960 --> 00:21:03,210 نقطة مائل، dontdothis. 473 00:21:03,210 --> 00:21:07,590 474 00:21:07,590 --> 00:21:08,840 هيا. 475 00:21:08,840 --> 00:21:10,940 476 00:21:10,940 --> 00:21:11,890 اه اه. 477 00:21:11,890 --> 00:21:13,100 على ما يبدو، يمكنك القيام بذلك. 478 00:21:13,100 --> 00:21:15,190 اللعنة. 479 00:21:15,190 --> 00:21:16,190 موافق. 480 00:21:16,190 --> 00:21:16,580 الانتظار. 481 00:21:16,580 --> 00:21:17,370 الوقوف إلى جانب. 482 00:21:17,370 --> 00:21:18,270 هل نحن - 483 00:21:18,270 --> 00:21:20,110 فعلنا استخدامه مع السيارة. 484 00:21:20,110 --> 00:21:22,050 >> [تنهدات] 485 00:21:22,050 --> 00:21:25,110 >> أنا أعرف ولكن أعتقد أننا حذف ذلك تماما. 486 00:21:25,110 --> 00:21:28,410 اه، نعم. 487 00:21:28,410 --> 00:21:30,660 اللعنة. 488 00:21:30,660 --> 00:21:32,640 حل هذه روب. 489 00:21:32,640 --> 00:21:34,678 ماذا؟ 490 00:21:34,678 --> 00:21:35,928 الأمر في غاية البساطة. 491 00:21:35,928 --> 00:21:43,820 492 00:21:43,820 --> 00:21:47,360 نعم، لجأنا قبالة الأمثل. 493 00:21:47,360 --> 00:21:48,970 موافق، والوقوف وداعا. 494 00:21:48,970 --> 00:21:49,950 الآن أشعر بتحسن. 495 00:21:49,950 --> 00:21:51,390 موافق. 496 00:21:51,390 --> 00:21:51,780 حسنا. 497 00:21:51,780 --> 00:21:53,430 >> لذلك دعونا إعادة ترجمة هذا - 498 00:21:53,430 --> 00:21:55,880 تجعلك dontdothis. 499 00:21:55,880 --> 00:22:00,090 قد تضطر إلى إعادة تسمية هذا ل dothis.c في مجرد لحظة. 500 00:22:00,090 --> 00:22:00,710 هناك نذهب. 501 00:22:00,710 --> 00:22:01,240 شكرا لك. 502 00:22:01,240 --> 00:22:02,050 موافق. 503 00:22:02,050 --> 00:22:05,480 وبالتالي فإن حقيقة أن كنت الطباعة من كان شيئا في الواقع مجرد 504 00:22:05,480 --> 00:22:08,150 تباطؤ العملية التي نحن أن وصلت إلى هذه النقطة. 505 00:22:08,150 --> 00:22:08,510 موافق. 506 00:22:08,510 --> 00:22:08,870 تفو! 507 00:22:08,870 --> 00:22:11,180 >> فما هو في الواقع يحدث؟ 508 00:22:11,180 --> 00:22:14,440 السبب هناك، مثلما جانبا، هو القيام بأي شيء من حيث المدخلات و 509 00:22:14,440 --> 00:22:17,270 الناتج يميل إلى أن يكون أبطأ لأنك لديك لكتابة أحرف ل 510 00:22:17,270 --> 00:22:18,600 الشاشة، ولديها للتمرير. 511 00:22:18,600 --> 00:22:21,720 قصة قصيرة طويلة، كان لي فعلا حدث ذلك بفارغ الصبر، سيكون لدينا 512 00:22:21,720 --> 00:22:23,260 ينظر إلى هذا النتيجة النهائية كذلك. 513 00:22:23,260 --> 00:22:26,220 الآن بعد أن حصلت على ركوب الطباعة المنبثقة، نرى ذلك على الفور. 514 00:22:26,220 --> 00:22:28,410 فلماذا يحدث هذا. 515 00:22:28,410 --> 00:22:31,300 كذلك، فإن تفسير بسيط، بطبيعة الحال، هو أن فو ربما لا ينبغي 516 00:22:31,300 --> 00:22:32,500 أن تطلق على نفسها اسم. 517 00:22:32,500 --> 00:22:34,470 >> الآن بعبارات عامة، هذا هو العودية. 518 00:22:34,470 --> 00:22:36,970 وكنا نظن بضعة أسابيع منذ العودية جيدة. 519 00:22:36,970 --> 00:22:40,330 العودية هو بهذه الطريقة السحرية ل التعبير عن نفسك بإيجاز السوبر. 520 00:22:40,330 --> 00:22:41,400 ويعمل فقط. 521 00:22:41,400 --> 00:22:45,060 ولكن هناك سمة أساسية من سمات كل من برامج العودية تحدثنا 522 00:22:45,060 --> 00:22:48,260 حول ونظرت حتى الآن، والتي وكان أن لديهم ما؟ 523 00:22:48,260 --> 00:22:52,610 وهناك حالة قاعدة، والتي كان بعض الثابت ترميز القضية التي قال في بعض الحالات 524 00:22:52,610 --> 00:22:56,210 لا ندعو فو، والذي هو بوضوح ليس الحال هنا. 525 00:22:56,210 --> 00:22:58,920 >> ذلك ما يحدث حقا من حيث هذه الصورة؟ 526 00:22:58,920 --> 00:23:01,790 حسنا، عندما فو المكالمات الرئيسي، يحصل على شريحة الذاكرة. 527 00:23:01,790 --> 00:23:04,150 عندما يدعو فو فو، فإنه يحصل شريحة الذاكرة. 528 00:23:04,150 --> 00:23:06,430 عندما يدعو فو فو، فإنه يحصل على شريحة. 529 00:23:06,430 --> 00:23:07,080 فإنه يحصل على شريحة. 530 00:23:07,080 --> 00:23:08,120 فإنه يحصل على شريحة. 531 00:23:08,120 --> 00:23:09,460 لأن فو أبدا العودة. 532 00:23:09,460 --> 00:23:12,160 نحن أبدا محو واحدة من تلك إطارات من المكدس. 533 00:23:12,160 --> 00:23:15,930 لذلك نحن تهب من خلال كومة، وليس أن أذكر الذي يعرف ما آخر، و 534 00:23:15,930 --> 00:23:19,600 نحن تجاوز حدود دينا يسمى الجزء من الذاكرة. 535 00:23:19,600 --> 00:23:21,790 الخطأ الذهاب تجزئة كاذبة. 536 00:23:21,790 --> 00:23:24,110 >> وبالتالي فإن الحل هناك بوضوح لا تفعل هذا. 537 00:23:24,110 --> 00:23:28,830 ولكن المعنى الضمني هو أن أكبر، نعم، ليست هناك بعض الحد، 538 00:23:28,830 --> 00:23:32,470 حتى لو انها ليست واضحة المعالم، لكيفية العديد من الوظائف التي يمكن أن نطلق في 539 00:23:32,470 --> 00:23:34,970 البرنامج، كم مرة وظيفة يمكن استدعاء نفسها. 540 00:23:34,970 --> 00:23:38,430 على الرغم من ذلك حتى فعلنا الوعظ العودية كما يحتمل أن هذا الشيء السحري ل 541 00:23:38,430 --> 00:23:41,870 بضعة أسابيع قبل لسيغما وظيفة، وعندما نحصل على البيانات 542 00:23:41,870 --> 00:23:45,270 الهياكل وCS50، سترى أخرى تطبيقات لذلك، انها ليست 543 00:23:45,270 --> 00:23:46,500 بالضرورة أفضل شيء. 544 00:23:46,500 --> 00:23:50,070 لأنه إذا كان يستدعي دالة نفسها، تطلق على نفسها، حتى إذا كان هناك قاعدة 545 00:23:50,070 --> 00:23:54,860 الحالة، إذا كنت لا تصل هذه الحالة قاعدة ل1،000 مكالمات أو مكالمات 10،000، من خلال 546 00:23:54,860 --> 00:23:58,800 ذلك الوقت كنت قد نفد من الغرفة على جهاز يسمى المكدس وضرب 547 00:23:58,800 --> 00:24:00,400 بعض شرائح أخرى من الذاكرة. 548 00:24:00,400 --> 00:24:03,950 لذلك هو أيضا تصميم مفاضلة بين الأناقة وبين 549 00:24:03,950 --> 00:24:06,920 متانة خاص بك التنفيذ. 550 00:24:06,920 --> 00:24:10,780 >> لذلك هناك الجانب السلبي أخرى أو مسكتك آخر لما كنا 551 00:24:10,780 --> 00:24:11,720 تم القيام حتى الآن. 552 00:24:11,720 --> 00:24:12,980 عندما دعوت getstring - 553 00:24:12,980 --> 00:24:15,120 اسمحوا لي أن أعود إلى مرحبا-2. 554 00:24:15,120 --> 00:24:18,170 تلاحظ أن ادعو getstring، التي تعود عنوان. 555 00:24:18,170 --> 00:24:20,730 وندعي اليوم أن عنوان هو من الكومة. 556 00:24:20,730 --> 00:24:24,480 والآن أنا طبع و السلسلة عند هذا العنوان. 557 00:24:24,480 --> 00:24:27,000 ولكن لدينا يسمى أبدا عكس getstring. 558 00:24:27,000 --> 00:24:30,850 لقد كان علينا أن أبدا calll وظيفة مثل ungetstring، حيث يمكنك تسليم الظهر 559 00:24:30,850 --> 00:24:31,610 تلك الذاكرة. 560 00:24:31,610 --> 00:24:33,250 ولكن بصراحة نحن ربما كان ينبغي أن يكون. 561 00:24:33,250 --> 00:24:37,390 لأنه إذا واصلنا طرح الكمبيوتر للذاكرة، عن طريق شخص مثل 562 00:24:37,390 --> 00:24:40,830 getstring ولكن لم يعيدها، وبالتأكيد ذلك أيضا لا بد أن يؤدي إلى 563 00:24:40,830 --> 00:24:42,970 المشاكل حيث اننا نفاد الذاكرة. 564 00:24:42,970 --> 00:24:46,140 >> وفي الواقع، يمكننا أن ننظر لهذه مشاكل مع الأداة الجديدة التي الاستخدام 565 00:24:46,140 --> 00:24:47,640 هو خفي قليلا لنوع. 566 00:24:47,640 --> 00:24:50,960 ولكن اسمحوا لي أن تمضي قدما ودفقة عنه على الشاشة في مجرد لحظة. 567 00:24:50,960 --> 00:24:56,940 انا ذاهب الى المضي قدما وتشغيل Valgrind مع المعلمة التي الأمر الأول 568 00:24:56,940 --> 00:25:00,260 وسيطة سطر هو اسم هذا البرنامج مرحبا-2. 569 00:25:00,260 --> 00:25:02,650 ولسوء الحظ انها الإخراج هو بوحشية 570 00:25:02,650 --> 00:25:04,290 معقدة لا لسبب جيد. 571 00:25:04,290 --> 00:25:06,280 لذلك نرى أن كل الفوضى. 572 00:25:06,280 --> 00:25:07,530 ديفيد هو القول اسمي. 573 00:25:07,530 --> 00:25:09,760 ولهذا البرنامج الواقع الحالي. 574 00:25:09,760 --> 00:25:11,180 والآن نحصل على هذا الناتج. 575 00:25:11,180 --> 00:25:13,400 >> حتى Valgrind مشابه في الروح لGDB. 576 00:25:13,400 --> 00:25:14,950 انها ليست في حد ذاتها المصحح. 577 00:25:14,950 --> 00:25:16,270 ولكن هذا المدقق الذاكرة. 578 00:25:16,270 --> 00:25:20,140 انها البرنامج الذي سيتم تشغيل الخاص برنامج واقول لكم لو انك سألت 579 00:25:20,140 --> 00:25:23,860 الكمبيوتر للذاكرة وأبدا سلمها مرة أخرى، مما يعني أن لديك 580 00:25:23,860 --> 00:25:24,570 تسرب الذاكرة. 581 00:25:24,570 --> 00:25:26,240 وتسرب الذاكرة تميل إلى أن تكون سيئة. 582 00:25:26,240 --> 00:25:29,120 ولكم هو مستخدمي أجهزة الكمبيوتر لديها شعرت ربما هذا، سواء كان لديك 583 00:25:29,120 --> 00:25:30,300 ماك أو جهاز كمبيوتر. 584 00:25:30,300 --> 00:25:33,730 لقد سبق لك أن تستخدم جهاز الكمبيوتر الخاص بك ل في حين وليس تمهيد في عدة 585 00:25:33,730 --> 00:25:36,820 أيام، أو كنت قد حصلت للتو على الكثير من برامج تشغيل، والشيء عنة 586 00:25:36,820 --> 00:25:42,360 تباطؤ لوقف طحن، أو على الأقل انها فائقة مزعج للاستخدام، لأن 587 00:25:42,360 --> 00:25:44,350 كل شيء فقط حصلت بطيئة عظمى. 588 00:25:44,350 --> 00:25:46,260 >> الآن يمكن أن يكون أي عدد من الأسباب. 589 00:25:46,260 --> 00:25:49,600 يمكن أن يكون حلقة لا نهائية، خطأ في شخص ما رمز، أو، ببساطة أكثر، فإنه 590 00:25:49,600 --> 00:25:53,250 قد يعني أن كنت تستخدم أكثر الذاكرة، أو تحاول، من الخاص 591 00:25:53,250 --> 00:25:54,920 الكمبيوتر لديه فعلا. 592 00:25:54,920 --> 00:25:57,770 وربما هناك خلل في بعض البرامج أن يتساءلون عن الذاكرة. 593 00:25:57,770 --> 00:26:02,480 كانت المتصفحات لسنوات سيئة السمعة ل هذا، طلب المزيد والمزيد من الذاكرة 594 00:26:02,480 --> 00:26:03,870 ولكن لم يسلم مرة أخرى. 595 00:26:03,870 --> 00:26:07,220 بالتأكيد، إذا كان لديك فقط محدود مقدار الذاكرة، لا يمكن أن نطلب 596 00:26:07,220 --> 00:26:09,990 مرات عديدة بلا حدود ل بعض من تلك الذاكرة. 597 00:26:09,990 --> 00:26:13,070 >> وذلك ما تراه هنا، على الرغم من مرة أخرى خرج Valgrind هو 598 00:26:13,070 --> 00:26:17,490 معقدة دون داع لمحة الأولى، وهذا هو الجزء مثيرة للاهتمام. 599 00:26:17,490 --> 00:26:18,890 كومة - 600 00:26:18,890 --> 00:26:20,060 الاستخدام في الخروج. 601 00:26:20,060 --> 00:26:22,810 حتى هنا كيف كان مقدار الذاكرة في الاستخدام في كومة في 602 00:26:22,810 --> 00:26:24,300 تنقضي خرجت برنامجي - 603 00:26:24,300 --> 00:26:27,280 يبدو ستة بايت في كتلة واحدة. 604 00:26:27,280 --> 00:26:28,710 لذلك أنا ذاهب لموجة يدي في ما هو كتلة. 605 00:26:28,710 --> 00:26:31,270 التفكير في الأمر هو مجرد قطعة، وأكثر كلمة الفنية للقطعة. 606 00:26:31,270 --> 00:26:33,140 لكن ستة بايت - 607 00:26:33,140 --> 00:26:36,870 ما هي بايت الست التي كانت لا تزال في الاستخدام؟ 608 00:26:36,870 --> 00:26:37,390 >> بالضبط. 609 00:26:37,390 --> 00:26:41,520 D-A-V-I-D مائل الصفر، خمسة إلكتروني اسم بالإضافة إلى فاصل فارغة. 610 00:26:41,520 --> 00:26:46,350 لذلك هذا البرنامج لاحظت أنني Valgrind طلب ستة بايت، على ما يبدو، من خلال 611 00:26:46,350 --> 00:26:48,950 طريقة getstring، ولكن لم أعطى لهم مرة أخرى. 612 00:26:48,950 --> 00:26:52,030 في واقع الأمر، وهذا قد لا يكون الأمر كذلك واضح إذا برنامجي ليس ثلاثة 613 00:26:52,030 --> 00:26:53,590 خطوط، ولكنها ل300 خطوط. 614 00:26:53,590 --> 00:26:56,920 حتى نستطيع أن نقدم الواقع أمر آخر وسيطة سطر لValgrind ل 615 00:26:56,920 --> 00:26:58,290 جعله أكثر مطول. 616 00:26:58,290 --> 00:26:59,760 انها مزعجة قليلا لنتذكر. 617 00:26:59,760 --> 00:27:01,580 ولكن إذا كنت تفعل - 618 00:27:01,580 --> 00:27:01,930 دعونا نرى. 619 00:27:01,930 --> 00:27:03,540 تسرب - 620 00:27:03,540 --> 00:27:05,030 هل كان تسرب - 621 00:27:05,030 --> 00:27:07,580 حتى أنني لا أتذكر ما هو عليه من ناحية. 622 00:27:07,580 --> 00:27:08,550 >> - تسرب الاختيار يساوي كامل. 623 00:27:08,550 --> 00:27:10,180 نعم، شكرا لك. 624 00:27:10,180 --> 00:27:12,520 - تسرب الاختيار يساوي كامل. 625 00:27:12,520 --> 00:27:13,800 دخول. 626 00:27:13,800 --> 00:27:14,940 يتم تشغيل نفس البرنامج. 627 00:27:14,940 --> 00:27:16,180 اكتب في ديفيد مرة أخرى. 628 00:27:16,180 --> 00:27:17,660 الآن أرى أكثر من ذلك بقليل من التفصيل. 629 00:27:17,660 --> 00:27:20,890 ولكن تحت ملخص كومة، والتي مطابق لأربعة - آه، 630 00:27:20,890 --> 00:27:22,120 هذا هو نوع من لطيفة. 631 00:27:22,120 --> 00:27:25,460 الآن Valgrind يبحث الواقع اصعب قليلا في قانون بلدي. 632 00:27:25,460 --> 00:27:29,580 وانها القول، على ما يبدو، malloc في خط - 633 00:27:29,580 --> 00:27:30,580 نحن التصغير. 634 00:27:30,580 --> 00:27:31,980 في السطر - 635 00:27:31,980 --> 00:27:32,930 ونحن لا نرى ما سطر هو عليه. 636 00:27:32,930 --> 00:27:35,110 ولكن malloc هو المذنب الأول. 637 00:27:35,110 --> 00:27:38,630 هناك بلوق في malloc. 638 00:27:38,630 --> 00:27:39,810 >> كل الحق؟ 639 00:27:39,810 --> 00:27:40,450 حسنا، لا. 640 00:27:40,450 --> 00:27:40,940 أليس كذلك؟ 641 00:27:40,940 --> 00:27:42,520 دعوت getstring. 642 00:27:42,520 --> 00:27:44,460 getstring يدعو يبدو malloc. 643 00:27:44,460 --> 00:27:47,800 وذلك ما سطر من التعليمات البرمجية على ما يبدو على خطأ لأنه 644 00:27:47,800 --> 00:27:49,050 تخصيص هذه الذاكرة؟ 645 00:27:49,050 --> 00:27:51,560 646 00:27:51,560 --> 00:27:55,540 دعونا نفترض أن كل من كتب malloc وقد حولها طويلة بما فيه الكفاية أنه من 647 00:27:55,540 --> 00:27:56,390 ليس على خطأ. 648 00:27:56,390 --> 00:27:57,520 لذلك فمن المحتمل الألغام. 649 00:27:57,520 --> 00:28:02,000 getstring في cs50.c - لذلك هذا هو ملف في مكان ما على الكمبيوتر - 650 00:28:02,000 --> 00:28:05,210 في خط 286 ويبدو أن الجاني. 651 00:28:05,210 --> 00:28:08,140 الآن دعونا نفترض أن كان CS50 حول لمبلغ محترم من الوقت، لذلك 652 00:28:08,140 --> 00:28:09,720 نحن أيضا معصوم. 653 00:28:09,720 --> 00:28:14,080 ولذا فإنه على الأرجح ليس في getstring أن علة تقع، وإنما في 654 00:28:14,080 --> 00:28:17,810 مرحبا-2.C خط 18. 655 00:28:17,810 --> 00:28:20,670 >> لذلك دعونا نلقي نظرة على ما كان هذا الخط 18. 656 00:28:20,670 --> 00:28:21,130 اه. 657 00:28:21,130 --> 00:28:27,130 بطريقة أو بأخرى هذا الخط ليس بالضرورة عربات التي تجرها الدواب، في حد ذاته، ولكن هذا هو السبب 658 00:28:27,130 --> 00:28:28,630 وراء ذلك تسرب الذاكرة. 659 00:28:28,630 --> 00:28:32,140 ذلك ببساطة فائقة، ما من شأنه حدسي يكون الحل هنا؟ 660 00:28:32,140 --> 00:28:34,710 إذا نطلبه الذاكرة، لم تكن يعطيها ظهره، والتي يبدو أن 661 00:28:34,710 --> 00:28:37,940 المشكلة مع مرور الوقت لأن جهاز الكمبيوتر الخاص بي قد نفدت الذاكرة، قد يتباطأ 662 00:28:37,940 --> 00:28:42,110 أسفل، أشياء سيئة يمكن أن يحدث، حسنا، ما هو الحل البديهي البسيط؟ 663 00:28:42,110 --> 00:28:43,140 مجرد اعطاء إعادته. 664 00:28:43,140 --> 00:28:44,770 >> كيف يمكن تحرير تلك الذاكرة؟ 665 00:28:44,770 --> 00:28:49,970 جيدا، والحمد لله انها بسيطة جدا أن أقول مجرد اسم المجانية. 666 00:28:49,970 --> 00:28:51,260 ونحن لم تفعل هذا من قبل. 667 00:28:51,260 --> 00:28:55,890 ولكن يمكنك أن تفكر أساسا من الحرة كما عكس malloc. 668 00:28:55,890 --> 00:28:58,030 الحر هو نقيض تخصيص الذاكرة. 669 00:28:58,030 --> 00:28:59,540 وحتى الآن اسمحوا لي أن إعادة ترجمة هذا. 670 00:28:59,540 --> 00:29:02,050 جعل مرحبا-2. 671 00:29:02,050 --> 00:29:04,620 اسمحوا لي تشغيله مرة أخرى. مرحبا-2 ديفيد. 672 00:29:04,620 --> 00:29:07,290 لذلك يبدو للعمل في بالضبط بنفس الطريقة. 673 00:29:07,290 --> 00:29:11,180 ولكن إذا أعود إلى Valgrind وإعادة التشغيل أن نفس الأمر على بلدي حديثا 674 00:29:11,180 --> 00:29:14,720 ترجمة البرنامج، الكتابة باسمي كما كان من قبل - 675 00:29:14,720 --> 00:29:15,370 لطيفة. 676 00:29:15,370 --> 00:29:16,760 ملخص كومة - 677 00:29:16,760 --> 00:29:17,740 الاستخدام في الخروج - 678 00:29:17,740 --> 00:29:19,370 صفر بايت في كتل الصفر. 679 00:29:19,370 --> 00:29:21,840 وهذا هو سوبر لطيفة، جميع وأطلق سراح كتل الكومة. 680 00:29:21,840 --> 00:29:23,480 أي تسرب ممكن. 681 00:29:23,480 --> 00:29:27,200 >> لذلك الخروج، وليس مع مشكلة تعيين 4، ولكن مع مشكلة تعيين 5، والطب الشرعي 682 00:29:27,200 --> 00:29:30,740 وما بعده، وهذا أيضا سوف تصبح مقياس للصحة الخاصة بك 683 00:29:30,740 --> 00:29:33,630 برنامج، أم لا يكون لديك أو ليس لديك تسرب الذاكرة. 684 00:29:33,630 --> 00:29:36,900 ولكن لحسن الحظ، ليس فقط يمكنك العقل من خلالهم بشكل حدسي، والتي 685 00:29:36,900 --> 00:29:40,430 هو، يمكن القول، من السهل للبرامج الصغيرة ولكن من الصعب للبرامج أكبر، 686 00:29:40,430 --> 00:29:43,860 Valgrind، لتلك البرامج أكبر، يمكن أن تساعدك على تحديد 687 00:29:43,860 --> 00:29:45,360 المشكلة معينة. 688 00:29:45,360 --> 00:29:47,500 >> ولكن هناك مشكلة واحدة أخرى التي قد تنشأ. 689 00:29:47,500 --> 00:29:51,245 اسمحوا لي أن فتح هذا الملف هنا، والتي هي، مرة أخرى، مثال بسيط نوعا ما. 690 00:29:51,245 --> 00:29:53,760 ولكن دعونا نركز على ما هل هذا البرنامج. 691 00:29:53,760 --> 00:29:55,190 وهذا ما يسمى memory.c. 692 00:29:55,190 --> 00:29:58,380 سنقوم بنشر هذا في وقت لاحق اليوم في الرمز البريدي من التعليمات البرمجية المصدر اليوم. 693 00:29:58,380 --> 00:30:01,610 وتلاحظ أن لدي وظيفة تسمى و أن لا يأخذ الحجج و 694 00:30:01,610 --> 00:30:02,800 يعود شيئا. 695 00:30:02,800 --> 00:30:07,240 في خط 20، وأنا على ما يبدو إعلان مؤشر إلى int واصفا اياه بانه السينية. 696 00:30:07,240 --> 00:30:09,570 أنا تعيين هو عودة قيمة malloc. 697 00:30:09,570 --> 00:30:14,590 ومجرد أن تكون واضحة، وكم أنا بايت أنا ربما الحصول على العودة من malloc 698 00:30:14,590 --> 00:30:17,080 في هذه الحالة؟ 699 00:30:17,080 --> 00:30:18,040 >> ربما 40. 700 00:30:18,040 --> 00:30:18,840 أين تحصل على هذا من؟ 701 00:30:18,840 --> 00:30:22,410 حسنا، إذا كنت أذكر أن الباحث في كثير من الأحيان 4 بايت، على الأقل هو في 702 00:30:22,410 --> 00:30:25,110 الأجهزة، 10 مرة 4 ومن الواضح 40. 703 00:30:25,110 --> 00:30:28,920 حتى malloc تعود على عنوان قطعة من الذاكرة وتخزين تلك 704 00:30:28,920 --> 00:30:30,800 معالجة في نهاية المطاف في العاشر. 705 00:30:30,800 --> 00:30:32,570 لكي نكون واضحين، ما ثم يحدث؟ 706 00:30:32,570 --> 00:30:34,990 حسنا، اسمحوا لي أن يعود مرة أخرى لدينا صورة هنا. 707 00:30:34,990 --> 00:30:38,150 اسمحوا لي ليس مجرد رسم الجزء السفلي من بلدي ذاكرة الكمبيوتر، واسمحوا لي أن تمضي قدما و 708 00:30:38,150 --> 00:30:42,990 رسم المستطيل كله أن تمثل كل من ذاكرة الوصول العشوائي بلدي. 709 00:30:42,990 --> 00:30:44,790 >> سوف نقول أن المكدس هو في القاع. 710 00:30:44,790 --> 00:30:47,010 وهناك شريحة في النص البيانات غير مهيأ. 711 00:30:47,010 --> 00:30:49,880 ولكن أنا مجرد الذهاب الى تلك مجردة أمور أخرى بعيدا عن نقطة، نقطة نقطة. 712 00:30:49,880 --> 00:30:53,470 أنا ذاهب لمجرد الإشارة إلى هذا كما كومة في الأعلى. 713 00:30:53,470 --> 00:30:57,070 ثم في الجزء السفلي من هذه الصورة، لتمثيل الرئيسي، وانا ذاهب 714 00:30:57,070 --> 00:30:59,880 لاعطائها الذاكرة شرائح على المكدس. 715 00:30:59,880 --> 00:31:03,150 لو، وانا ذاهب لاعطائها شريحة من الذاكرة على المكدس. 716 00:31:03,150 --> 00:31:05,140 الآن، وأنا حصلت على التشاور بلدي شفرة المصدر مرة أخرى. 717 00:31:05,140 --> 00:31:07,170 ما هي المتغيرات المحلية للرئيسية؟ 718 00:31:07,170 --> 00:31:10,710 على ما يبدو شيئا، حتى أن شريحة فارغة فعال أم لا حتى كبيرة كما 719 00:31:10,710 --> 00:31:11,600 كما كنت رسمها. 720 00:31:11,600 --> 00:31:15,730 ولكن في و، ولدي متغير محلي، وهو ما يسمى خ. 721 00:31:15,730 --> 00:31:20,410 لذلك انا ذاهب الى المضي قدما وإعطاء و قطعة من الذاكرة، واصفا إياه السينية. 722 00:31:20,410 --> 00:31:24,680 >> والآن malloc من 10 مرات 4، malloc حتى 40، حيث أن هذا 723 00:31:24,680 --> 00:31:25,430 الذاكرة القادمة من؟ 724 00:31:25,430 --> 00:31:27,530 ليس لدينا صورة مرسومة مثل هذا من قبل. 725 00:31:27,530 --> 00:31:31,140 ولكن دعونا نفترض أنه فعال القادمة من هنا، لذلك واحد، 726 00:31:31,140 --> 00:31:33,170 اثنان، ثلاثة، أربعة، خمسة. 727 00:31:33,170 --> 00:31:34,680 والآن أحتاج 40 من هذه. 728 00:31:34,680 --> 00:31:37,540 ولذا فإنني سوف يفعل نقطة، نقطة، نقطة تشير إلى أن هناك المزيد من الذاكرة 729 00:31:37,540 --> 00:31:39,350 يعود من الكومة. 730 00:31:39,350 --> 00:31:40,710 الآن ما هو العنوان؟ 731 00:31:40,710 --> 00:31:42,620 دعونا اختيار التعسفي لدينا معالجة كما هو الحال دائما - 732 00:31:42,620 --> 00:31:46,310 Ox123، على الرغم من انه سيكون على الارجح أن يكون شيئا مختلفا تماما. 733 00:31:46,310 --> 00:31:50,420 هذا هو عنوان البايت الأول في الذاكرة التي أنا أسأل malloc ل. 734 00:31:50,420 --> 00:31:53,630 >> لذلك باختصار، بمجرد خط 20 ينفذ، ما هو حرفيا 735 00:31:53,630 --> 00:31:57,170 تخزينها داخل س هنا؟ 736 00:31:57,170 --> 00:31:58,730 Ox123. 737 00:31:58,730 --> 00:32:00,370 Ox123. 738 00:32:00,370 --> 00:32:01,550 والثور هو رتيبا. 739 00:32:01,550 --> 00:32:03,200 بل يعني فقط هنا هو ل رقم سداسي عشري. 740 00:32:03,200 --> 00:32:06,490 ولكن ما هو المفتاح هو أن ما عندي مخزن في العاشر، والذي هو متغير محلي. 741 00:32:06,490 --> 00:32:10,260 ولكن نوع البيانات الخاصة به، ومرة ​​أخرى، هو عنوان لكثافة العمليات. 742 00:32:10,260 --> 00:32:12,710 حسنا، انا ذاهب لتخزين Ox123. 743 00:32:12,710 --> 00:32:16,610 ولكن مرة أخرى، إذا كان هذا قليلا جدا معقدة دون داع، وإذا كنت التمرير 744 00:32:16,610 --> 00:32:21,490 مرة أخرى، يمكننا مجردة هذا بعيدا جدا معقول ونقول فقط أن x هو ل 745 00:32:21,490 --> 00:32:23,910 مؤشر إلى أن جزءا من الذاكرة. 746 00:32:23,910 --> 00:32:24,070 >> موافق. 747 00:32:24,070 --> 00:32:26,230 والسؤال المطروح الآن في متناول اليد هو ما يلي - 748 00:32:26,230 --> 00:32:29,910 خط 21، كما تبين، هو عربات التي تجرها الدواب. 749 00:32:29,910 --> 00:32:31,160 لماذا؟ 750 00:32:31,160 --> 00:32:34,890 751 00:32:34,890 --> 00:32:36,930 >> آسف؟ 752 00:32:36,930 --> 00:32:38,640 أنه لا يملك - 753 00:32:38,640 --> 00:32:40,390 أقول إن من جديد. 754 00:32:40,390 --> 00:32:41,240 كذلك، فإنه لا يخلو. 755 00:32:41,240 --> 00:32:42,350 لذلك هذا هو الثاني ولكن. 756 00:32:42,350 --> 00:32:45,000 لذلك هناك واحد آخر ولكن على وجه التحديد في السطر 21. 757 00:32:45,000 --> 00:32:49,480 758 00:32:49,480 --> 00:32:50,040 >> بالضبط. 759 00:32:50,040 --> 00:32:54,980 هذا الخط بسيطة من التعليمات البرمجية هو مجرد تجاوز سعة المخزن المؤقت، وتجاوز سعة المخزن المؤقت. 760 00:32:54,980 --> 00:32:57,050 مخزن مؤقت يعني مجرد جزء من الذاكرة. 761 00:32:57,050 --> 00:33:01,520 ولكن هذا جزء من الذاكرة من حجم 10، 10 أعداد صحيحة، وهو ما يعني إذا كنا 762 00:33:01,520 --> 00:33:05,350 مؤشر إلى أنه باستخدام السكر النحوية من تدوين مجموعة، مربع 763 00:33:05,350 --> 00:33:09,220 بين قوسين، لديك حق الوصول إلى × قوس 0 × قوس 1 ×، 764 00:33:09,220 --> 00:33:10,390 قوس نقطة، نقطة، نقطة. 765 00:33:10,390 --> 00:33:13,270 × قوس 9 هو أكبر واحد. 766 00:33:13,270 --> 00:33:17,680 حتى لو كنت تفعل × قوس 10، حيث انا ذاهب فعلا في الذاكرة؟ 767 00:33:17,680 --> 00:33:19,120 >> حسنا، إذا كان لدي 10 كثافة العمليات - 768 00:33:19,120 --> 00:33:21,070 دعونا فعلا رسم كل هذه من هنا. 769 00:33:21,070 --> 00:33:22,700 لذلك كان أن أول خمسة. 770 00:33:22,700 --> 00:33:24,660 وهنا الخمسة الآخرين رجات. 771 00:33:24,660 --> 00:33:29,580 حتى العاشر قوس 0 هنا. × قوس 1 هو هنا. × قوس 9 هنا. × قوس 772 00:33:29,580 --> 00:33:37,960 10 هو هنا، وهو ما يعني أنني أقول، في خط 21، والكمبيوتر لوضع 773 00:33:37,960 --> 00:33:39,400 عدد أين؟ 774 00:33:39,400 --> 00:33:42,010 عدد 0 أين؟ 775 00:33:42,010 --> 00:33:43,380 حسنا، انها 0، نعم. 776 00:33:43,380 --> 00:33:45,460 ولكن مجرد حقيقة أن لها 0 هو نوع من صدفة. 777 00:33:45,460 --> 00:33:47,140 يمكن أن يكون عدد 50، لكل ما يهمني. 778 00:33:47,140 --> 00:33:50,480 ولكننا نحاول وضعه في العاشر قوس 10، الذي هو فيه هذا 779 00:33:50,480 --> 00:33:53,700 ويوجه علامة استفهام، والتي هو ليس شيئا جيدا. 780 00:33:53,700 --> 00:33:57,070 ربما هذا البرنامج بشكل جيد للغاية تحطم نتيجة لذلك. 781 00:33:57,070 --> 00:33:59,400 >> الآن، دعونا نمضي قدما ونرى ما اذا كان هذا هو، في الواقع، فإن ما يحدث. 782 00:33:59,400 --> 00:34:02,600 جعل الذاكرة، لأن الملف يسمى memory.c. 783 00:34:02,600 --> 00:34:05,950 دعونا نمضي قدما وتشغيل ذاكرة البرنامج. 784 00:34:05,950 --> 00:34:08,239 حتى وصلنا محظوظ، في الواقع، على ما يبدو. 785 00:34:08,239 --> 00:34:09,340 وصلنا محظوظ. 786 00:34:09,340 --> 00:34:11,060 ولكن دعونا نرى ما اذا كنا الآن تشغيل Valgrind. 787 00:34:11,060 --> 00:34:14,170 للوهلة الأولى، قد برنامجي يبدو أن يكون صحيحا تماما. 788 00:34:14,170 --> 00:34:18,010 ولكن اسمحوا لي أن تشغيل Valgrind مع - تسرب الاختيار يساوي كامل على الذاكرة. 789 00:34:18,010 --> 00:34:20,110 >> والآن عند تشغيل هذا - 790 00:34:20,110 --> 00:34:21,030 مثيرة للاهتمام. 791 00:34:21,030 --> 00:34:26,800 الكتابة غير صالحة من حجم 4 في خط 21 من memory.c. 792 00:34:26,800 --> 00:34:29,284 خط 21 من memory.c هو أي واحد؟ 793 00:34:29,284 --> 00:34:30,340 أوه، مثيرة للاهتمام. 794 00:34:30,340 --> 00:34:31,080 ولكن الانتظار. 795 00:34:31,080 --> 00:34:32,389 حجم 4، ما هو اشارة الى؟ 796 00:34:32,389 --> 00:34:34,969 فعلت فقط واحدة الكتابة، لكنه من حجم 4. 797 00:34:34,969 --> 00:34:36,889 لماذا هو 4؟ 798 00:34:36,889 --> 00:34:39,280 انها لأنه عدد صحيح، والذي هو، مرة أخرى، أربعة بايت. 799 00:34:39,280 --> 00:34:42,510 لذلك وجدت Valgrind الخلل الذي أنا، نظرة عابرة في قانون بلدي، لم يفعل ذلك. 800 00:34:42,510 --> 00:34:45,040 وربما سيكون TF الخاص بك أو لا. 801 00:34:45,040 --> 00:34:48,469 ولكن ما Valgrind بالتأكيد وجدت أن لقد ارتكب خطأ هناك، حتى 802 00:34:48,469 --> 00:34:52,719 على الرغم من أننا حصلت على الحظ، والكمبيوتر قررت، إيه، أنا لا أذهب إلى تعطل 803 00:34:52,719 --> 00:34:57,470 فقط لأنك لمست بايت واحد، واحد الجدير كثافة من الذاكرة التي لم 804 00:34:57,470 --> 00:34:58,550 تملك في الواقع. 805 00:34:58,550 --> 00:35:00,380 >> حسنا، ما هو آخر عربات التي تجرها الدواب هنا. 806 00:35:00,380 --> 00:35:01,180 عنوان - 807 00:35:01,180 --> 00:35:03,190 هذا هو عنوان مجنون يبحث في ست عشري. 808 00:35:03,190 --> 00:35:06,890 وهذا يعني مجرد مكان في الكومة صفر بايت بعد كتلة من حجم 40 809 00:35:06,890 --> 00:35:07,620 يتم تخصيص. 810 00:35:07,620 --> 00:35:10,610 اسمحوا لي أن التصغير هنا ومعرفة ما إذا كان هذا هو أكثر من ذلك بقليل مفيدة. 811 00:35:10,610 --> 00:35:11,410 مثيرة للاهتمام. 812 00:35:11,410 --> 00:35:15,600 يتم فقدان 40 بايت بالتأكيد في خسائر قياسية 1 من 1. 813 00:35:15,600 --> 00:35:17,840 مرة أخرى، أكثر من الكلمات مما هو مفيد هنا. 814 00:35:17,840 --> 00:35:21,350 ولكن استنادا إلى خطوط الضوء، حيث يجب أن تركز على الارجح بلدي 815 00:35:21,350 --> 00:35:24,070 الانتباه لعلة أخرى؟ 816 00:35:24,070 --> 00:35:26,570 يبدو وكأنه خط 20 من memory.c. 817 00:35:26,570 --> 00:35:30,990 >> لذلك إذا رجعنا إلى خط 20، وهذا هو واحد الذي قمت بتحديده في وقت سابق. 818 00:35:30,990 --> 00:35:33,030 وانها ليست عربات التي تجرها الدواب بالضرورة. 819 00:35:33,030 --> 00:35:35,160 ولكن لدينا هذا عكس آثاره. 820 00:35:35,160 --> 00:35:38,790 فكيف يمكنني تصحيح على الأقل واحدة من تلك الأخطاء؟ 821 00:35:38,790 --> 00:35:42,240 ماذا يمكن أن أفعل بعد خط 21؟ 822 00:35:42,240 --> 00:35:47,110 يمكن أن أفعله خالية من العاشر، وذلك هو لتعيد تلك الذاكرة. 823 00:35:47,110 --> 00:35:49,230 وكيف يمكنني إصلاح هذا الخطأ؟ 824 00:35:49,230 --> 00:35:52,120 وأود أن تذهب بالتأكيد أبعد من 0. 825 00:35:52,120 --> 00:35:53,670 لذلك اسمحوا لي أن أحاول وإعادة تشغيل هذا. 826 00:35:53,670 --> 00:35:56,080 آسف، وتذهب بالتأكيد أبعد من 9. 827 00:35:56,080 --> 00:35:57,510 جعل الذاكرة. 828 00:35:57,510 --> 00:36:00,650 اسمحوا لي أن أعد Valgrind في إطار أكبر. 829 00:36:00,650 --> 00:36:01,580 ونتطلع الآن. 830 00:36:01,580 --> 00:36:02,250 لطيفة. 831 00:36:02,250 --> 00:36:03,270 وأطلق سراح جميع الكتل الكومة. 832 00:36:03,270 --> 00:36:04,270 أي تسرب ممكن. 833 00:36:04,270 --> 00:36:07,520 وحتى فوق ذلك، ليس هناك ذكر أي أكثر من الحق غير صالحة. 834 00:36:07,520 --> 00:36:09,820 >> لمجرد الحصول على الجشع، ودعونا معرفة ما إذا كان مظاهرة أخرى 835 00:36:09,820 --> 00:36:11,050 لا يذهب على النحو المنشود - 836 00:36:11,050 --> 00:36:12,560 أنا لم تحصل على الحظ قبل لحظة. 837 00:36:12,560 --> 00:36:15,530 وحقيقة أن هذا هو 0 ربما مضللة دون داع. 838 00:36:15,530 --> 00:36:20,650 دعونا نفعل فقط 50، وهو إلى حد ما التعسفي عدد، وجعل الذاكرة ذاكرة نقطة مائلة - 839 00:36:20,650 --> 00:36:21,410 لا تزال تحصل على الحظ. 840 00:36:21,410 --> 00:36:22,510 لا شيء تحطمها. 841 00:36:22,510 --> 00:36:26,150 لنفترض أنا فقط أفعل شيئا حقا أحمق، وأنا أفعل 100. 842 00:36:26,150 --> 00:36:30,360 اسمحوا لي أن إعادة تشكيل الذاكرة، نقطة خفض الذاكرة - 843 00:36:30,360 --> 00:36:31,075 حصلت على الحظ مرة أخرى. 844 00:36:31,075 --> 00:36:32,800 كيف حوالي 1،000؟ 845 00:36:32,800 --> 00:36:35,370 رجات بعده، تقريبا، حيث يجب أن أكون؟ 846 00:36:35,370 --> 00:36:37,410 جعل الذاكرة - 847 00:36:37,410 --> 00:36:38,570 اللعنة. 848 00:36:38,570 --> 00:36:39,920 >> [ضحك] 849 00:36:39,920 --> 00:36:41,270 >> موافق. 850 00:36:41,270 --> 00:36:43,920 دعونا لا تسكع بعد الآن. 851 00:36:43,920 --> 00:36:45,120 الذاكرة باعادتها. 852 00:36:45,120 --> 00:36:45,840 هناك نذهب. 853 00:36:45,840 --> 00:36:46,410 حسنا. 854 00:36:46,410 --> 00:36:52,500 لذلك يبدو لك مؤشر 100،000 رجات ما وراء المكان الذي كان ينبغي أن يكون في 855 00:36:52,500 --> 00:36:54,410 الذاكرة، تحدث أمور سيئة. 856 00:36:54,410 --> 00:36:56,430 لذلك هذا هو الواضح أنه لا لذلك، حكم سريع الثابت. 857 00:36:56,430 --> 00:36:58,190 الأول هو نوع من استخدام المحاكمة والخطأ للوصول إلى هناك. 858 00:36:58,190 --> 00:37:02,230 ولكن هذا هو لأنه، قصة قصيرة طويلة، وينقسم أيضا ذاكرة الكمبيوتر الخاص بك 859 00:37:02,230 --> 00:37:03,580 في هذه الأمور تسمى شرائح. 860 00:37:03,580 --> 00:37:07,260 وأحيانا، الكمبيوتر فعلا أعطاك أكثر الذاكرة قليلا 861 00:37:07,260 --> 00:37:08,400 مما كنت تسأل عنه. 862 00:37:08,400 --> 00:37:12,170 ولكن لتحقيق الكفاءة، انها مجرد أسهل ل الحصول على المزيد من الذاكرة، ولكن فقط اقول لكم 863 00:37:12,170 --> 00:37:13,780 أن كنت الحصول على جزء منه. 864 00:37:13,780 --> 00:37:16,370 >> وإذا كنت محظوظا في بعض الأحيان، وبالتالي، قد تكون قادرة على تلمس 865 00:37:16,370 --> 00:37:17,795 الذاكرة التي لا تنتمي لك. 866 00:37:17,795 --> 00:37:21,860 لا يوجد لديك ضمان بأن ما قيمة كنت وضعت هناك سيبقى هناك، لأن 867 00:37:21,860 --> 00:37:25,080 الكمبيوتر لا يزال يعتقد انها ليست لك، لكنه لن بالضرورة 868 00:37:25,080 --> 00:37:29,910 ليصل إلى مقطع آخر من الذاكرة في الكمبيوتر وتحفز على خطأ مثل 869 00:37:29,910 --> 00:37:31,710 هذا واحد هنا. 870 00:37:31,710 --> 00:37:32,060 حسنا. 871 00:37:32,060 --> 00:37:37,240 أي أسئلة ثم على الذاكرة؟ 872 00:37:37,240 --> 00:37:37,590 >> حسنا. 873 00:37:37,590 --> 00:37:40,610 دعونا نلقي نظرة هنا، بعد ذلك، في شيء كنا أخذ ل 874 00:37:40,610 --> 00:37:48,361 منحت لبعض الوقت، والتي ودعا في هذا الملف cs50.h. 875 00:37:48,361 --> 00:37:49,420 لذلك هذا هو الملف. 876 00:37:49,420 --> 00:37:51,130 هذه ليست سوى مجموعة كاملة من تعليقات حتى أعلى. 877 00:37:51,130 --> 00:37:53,900 وكنت قد نظرت في هذا إذا كنت مطعون حول على الأجهزة. 878 00:37:53,900 --> 00:37:57,000 ولكن تبين أن في كل وقت، عندما كنا استخدام سلسلة بمثابة 879 00:37:57,000 --> 00:38:01,130 مرادف، والوسائل التي أعلنا كان ذلك مرادف مع هذا 880 00:38:01,130 --> 00:38:03,990 typedef والكلمة، لتعريف نوع. 881 00:38:03,990 --> 00:38:07,500 ونقوله أساسا، وجعل سلسلة مرادفا للنجمة شار. 882 00:38:07,500 --> 00:38:11,190 أن الوسائل التي المكدس خلقت هذه العجلات التدريب المعروفة باسم 883 00:38:11,190 --> 00:38:12,040 السلسلة. 884 00:38:12,040 --> 00:38:14,830 >> الآن وهنا مجرد نموذج أولي لgetchar. 885 00:38:14,830 --> 00:38:17,350 كنا قد رأينا ذلك من قبل، ولكن هذا في الواقع ما تقوم به. getchar 886 00:38:17,350 --> 00:38:19,070 يأخذ بدون وسائط، بإرجاع شار. 887 00:38:19,070 --> 00:38:21,340 getdouble يأخذ بدون وسائط، بإرجاع مزدوجة. 888 00:38:21,340 --> 00:38:24,440 getfloat يأخذ بدون وسائط، والعودة تعويم، وهكذا دواليك. 889 00:38:24,440 --> 00:38:27,270 getint هو هنا. getlonglong هو هنا. 890 00:38:27,270 --> 00:38:28,820 وgetstring هو هنا. 891 00:38:28,820 --> 00:38:29,420 وهذا كل شيء. 892 00:38:29,420 --> 00:38:33,080 هذا الخط الأرجواني هو المعالج أخرى التوجيه بسبب 893 00:38:33,080 --> 00:38:35,550 الوسم في بداية ذلك. 894 00:38:35,550 --> 00:38:35,870 >> حسنا. 895 00:38:35,870 --> 00:38:38,380 وحتى الآن اسمحوا لي أن انتقل إلى cs50.c. 896 00:38:38,380 --> 00:38:40,400 ونحن لن نتحدث طويلا في هذا الشأن. 897 00:38:40,400 --> 00:38:43,280 ولكن لتعطيك لمحة عن ما هو كان يحدث كل هذا 898 00:38:43,280 --> 00:38:46,434 الوقت، اسمحوا لي ان اذهب ل- 899 00:38:46,434 --> 00:38:48,250 دعونا نفعل getchar. 900 00:38:48,250 --> 00:38:51,050 حتى getchar هي في معظمها تعليقات. 901 00:38:51,050 --> 00:38:52,060 ولكن يبدو مثل هذا. 902 00:38:52,060 --> 00:38:54,800 لذلك هذا هو وظيفة الفعلية getchar التي كنا 903 00:38:54,800 --> 00:38:56,055 اتخاذ أمرا مفروغا منه موجودا. 904 00:38:56,055 --> 00:38:59,370 وعلى الرغم من أننا لم تستخدم هذا واحد التي غالبا ما، إذا من أي وقت مضى، انها على الأقل 905 00:38:59,370 --> 00:39:00,470 بسيطة نسبيا. 906 00:39:00,470 --> 00:39:02,580 لذلك يستحق أخذ نظرة سريعة على هنا. 907 00:39:02,580 --> 00:39:06,540 >> حتى getchar ديه حلقة لا نهائية، على ما يبدو عمدا بذلك. 908 00:39:06,540 --> 00:39:10,050 ثم يدعو - وهذا هو نوع من إعادة استخدام طيف من التعليمات البرمجية نحن أنفسنا كتب. 909 00:39:10,050 --> 00:39:11,220 ويدعو getstring. 910 00:39:11,220 --> 00:39:12,460 لأن ما تقوم به يعني للحصول على شار؟ 911 00:39:12,460 --> 00:39:14,730 كذلك، قد كذلك محاولة للحصول على خط كامل من النص من المستخدم و 912 00:39:14,730 --> 00:39:16,940 ثم مجرد إلقاء نظرة واحدة من تلك الأحرف. 913 00:39:16,940 --> 00:39:19,170 في خط 60، وهنا قليلا قليلا من التعقل الاختيار. 914 00:39:19,170 --> 00:39:21,610 إذا عاد getstring فارغة، دعونا لا المضي قدما. 915 00:39:21,610 --> 00:39:22,820 ذهب شيئا خاطئا. 916 00:39:22,820 --> 00:39:28,120 >> الآن هذا أمر مزعج بعض الشيء ولكن التقليدية في C. شار ماكس ربما 917 00:39:28,120 --> 00:39:29,960 يمثل ما فقط بناء على اسمها؟ 918 00:39:29,960 --> 00:39:31,670 انها ثابتة. 919 00:39:31,670 --> 00:39:36,040 انها مثل القيمة الرقمية لل أكبر شار يمكنك تمثيل مع 920 00:39:36,040 --> 00:39:40,370 لدغة واحدة، والذي هو على الارجح عدد 255، وهو أكبر عدد لك 921 00:39:40,370 --> 00:39:42,720 تمثل ثمانية بت، بدءا من الصفر. 922 00:39:42,720 --> 00:39:47,460 حتى لقد استخدام هذا، في هذه الدالة، عندما كتابة هذا الرمز، فقط ل 923 00:39:47,460 --> 00:39:51,753 إذا كان هناك شيء يذهب على نحو خاطئ في getchar لكن هدفها في الحياة هو لإرجاع 924 00:39:51,753 --> 00:39:54,830 شار، عليك أن تكون قادرا بطريقة ما للإشارة إلى المستخدم الذي 925 00:39:54,830 --> 00:39:55,840 حدث خطأ ما. 926 00:39:55,840 --> 00:39:56,970 لا يمكننا العودة فارغة. 927 00:39:56,970 --> 00:39:58,480 اتضح أن لاغية هو مؤشر. 928 00:39:58,480 --> 00:40:01,030 ومرة أخرى، لديه getchar لإرجاع شار. 929 00:40:01,030 --> 00:40:04,760 >> وبالتالي فإن الاتفاقية، إذا ما سارت الأمور الخطأ هو أنت، مبرمج، أو في 930 00:40:04,760 --> 00:40:08,160 هذه الحالة، لي مع المكتبة، وكان لي وتقرر فقط تعسفا، إذا 931 00:40:08,160 --> 00:40:12,230 شيء يذهب على نحو خاطئ، وانا ذاهب ل إرجاع عدد 255، الذي هو حقا 932 00:40:12,230 --> 00:40:17,240 يعني أننا لا يمكن، لا يمكن للمستخدم اكتب الحرف الذي يمثله 933 00:40:17,240 --> 00:40:21,410 عدد 255 لأننا كان لسرقتها كما يسمى قيمة الحارس ل 934 00:40:21,410 --> 00:40:23,410 تمثل مشكلة. 935 00:40:23,410 --> 00:40:27,010 الآن اتضح أن الطابع 255 ليست شيئا يمكنك كتابة على 936 00:40:27,010 --> 00:40:28,380 لوحة المفاتيح الخاصة بك، حتى انها ليست صفقة كبيرة. 937 00:40:28,380 --> 00:40:30,910 لا يلاحظ المستخدم أن لقد سرقت هذه الشخصية. 938 00:40:30,910 --> 00:40:34,620 ولكن إذا كنت ترى أي وقت مضى في صفحات الرجل على نظام الكمبيوتر بعض الإشارة إلى 939 00:40:34,620 --> 00:40:38,560 كل مباراة دولية ثابتة مثل هذا الذي يقول: في حالات الخطأ هذه القوة ثابتة 940 00:40:38,560 --> 00:40:42,720 تعاد، وهذا فعل كل بعض الإنسان منذ سنوات وتقرر بشكل تعسفي ل 941 00:40:42,720 --> 00:40:45,680 العودة هذه القيمة خاصة و نسميها ثابت في حالة 942 00:40:45,680 --> 00:40:46,840 شيء يذهب على نحو خاطئ. 943 00:40:46,840 --> 00:40:48,580 >> الآن السحر يحدث هنا. 944 00:40:48,580 --> 00:40:52,600 أولا، أنا معلنا في خط 67 حرفين، C1 و C2. 945 00:40:52,600 --> 00:40:57,080 ثم في خط 68، وهناك في الواقع سطر من التعليمات البرمجية هذا يذكرنا 946 00:40:57,080 --> 00:41:01,140 صديقنا printf، نظرا لأنه لديها خدمات العملاء في المئة في الاقتباس. 947 00:41:01,140 --> 00:41:06,490 ولكن لاحظ ما يحدث هنا. sscanf يعني مسح سلسلة - 948 00:41:06,490 --> 00:41:11,690 وسائل مسح منسق سلسلة، إرجو sscanf. 949 00:41:11,690 --> 00:41:12,590 ماذا يعني ذلك؟ 950 00:41:12,590 --> 00:41:16,310 فهذا يعني أنك تمر إلى sscanf سلسلة. 951 00:41:16,310 --> 00:41:18,420 والخط هو ما أنواع المستخدم فيه. 952 00:41:18,420 --> 00:41:23,520 يمكنك تمرير إلى sscanf سلسلة تنسيق مثل هذا أن يقول ما هي scanf 953 00:41:23,520 --> 00:41:25,870 كنت قد كتبته أمل المستخدم فيه. 954 00:41:25,870 --> 00:41:29,730 كنت ثم تمرير في عناوين اثنين قطع من الذاكرة، في هذه الحالة، 955 00:41:29,730 --> 00:41:31,150 لأن لدي اثنين من العناصر النائبة. 956 00:41:31,150 --> 00:41:34,610 لذلك أنا ذاهب لاعطائها عنوان من C1 وعنوان C2. 957 00:41:34,610 --> 00:41:37,700 >> وأذكر أن تعطي وظيفة لل عنوان بعض المتغير، ما هو 958 00:41:37,700 --> 00:41:38,950 المعنى الضمني؟ 959 00:41:38,950 --> 00:41:41,400 960 00:41:41,400 --> 00:41:45,050 ما يمكن أن تفعله تلك الوظيفة نتيجة ل من يعطيها عنوان 961 00:41:45,050 --> 00:41:48,170 متغير، خلافا ل المتغير نفسه؟ 962 00:41:48,170 --> 00:41:49,450 فإنه يمكن تغييره، أليس كذلك؟ 963 00:41:49,450 --> 00:41:53,250 إذا كان لديك شخص خريطة لالبدني عنوان، فإنها يمكن أن نذهب الى هناك والقيام 964 00:41:53,250 --> 00:41:54,750 كل ما تريد في هذا العنوان. 965 00:41:54,750 --> 00:41:55,800 نفس الفكرة هنا. 966 00:41:55,800 --> 00:41:59,950 إذا كنا تمريرها إلى sscanf، عنوان اثنين قطع من الذاكرة، حتى هذه الصغيرة 967 00:41:59,950 --> 00:42:03,585 قطع صغيرة من الذاكرة، C1 و C2، ولكن نقول ذلك على العنوان منهم، 968 00:42:03,585 --> 00:42:05,170 sscanf يمكن تغييره. 969 00:42:05,170 --> 00:42:08,530 >> حتى sscanf لهدف في الحياة، وإذا قرأنا الصفحة الرجل، هو أن تقرأ ما 970 00:42:08,530 --> 00:42:13,420 المستعمل في طباعة، والأمل في أن يضطر المستخدم كتبته في حرف وربما 971 00:42:13,420 --> 00:42:16,470 حرف آخر، ومهما كانت المستعمل كتبته، الحرف الأول يذهب 972 00:42:16,470 --> 00:42:19,310 هنا، الحرف الثاني يذهب هنا. 973 00:42:19,310 --> 00:42:22,470 الآن، بوصفها جانبا، وهذا، وتفعل لا يعرفون سوى هذه من وثائق، 974 00:42:22,470 --> 00:42:25,570 حقيقة أن أضع هناك مساحة فارغة يعني فقط ان لا يهمني إذا 975 00:42:25,570 --> 00:42:28,440 المستخدم يضرب الفضاء بار قليلة مرات من قبل انه أو انها تأخذ 976 00:42:28,440 --> 00:42:30,400 حرف، انا ذاهب الى تجاهل أي مساحة بيضاء. 977 00:42:30,400 --> 00:42:32,510 بحيث، وأنا أعلم من وثائق. 978 00:42:32,510 --> 00:42:36,570 >> حقيقة أن هناك٪ ج الثاني تليها المساحة البيضاء هو في الواقع 979 00:42:36,570 --> 00:42:37,410 متعمد. 980 00:42:37,410 --> 00:42:41,190 أريد أن أكون قادرة على الكشف عن ما إذا كان المستخدم ثمل أو لم تتعاون. 981 00:42:41,190 --> 00:42:45,630 لذلك أنا على أمل أن المستخدم بكتابتها فقط في حرف واحد، لذلك أنا على أمل 982 00:42:45,630 --> 00:42:50,640 sscanf أن يجري الوحيد لعودة 1 لأن قيمة، مرة أخرى، إذا قرأت 983 00:42:50,640 --> 00:42:55,400 وثائق، والغرض sscanf في الحياة هو العودة إلى عدد 984 00:42:55,400 --> 00:42:59,170 المتغيرات التي امتلأت مع إدخال المستخدم. 985 00:42:59,170 --> 00:43:02,270 >> مررت في متغيرين عناوين، C1 و C2. 986 00:43:02,270 --> 00:43:06,420 أنا على أمل، على الرغم من أن واحدا فقط من يحصل قتلوهم لأنه إذا sscanf 987 00:43:06,420 --> 00:43:11,130 عوائد 2، ما يفترض الآثار المترتبة منطقيا؟ 988 00:43:11,130 --> 00:43:14,600 أن المستخدم لم فقط أعطني واحدة شخصية مثل قلت له أو لها. 989 00:43:14,600 --> 00:43:17,860 أنها ربما كتبته في الأقل حرفين. 990 00:43:17,860 --> 00:43:22,430 حتى لو لم يكن لديك بدلا الثاني ج٪، وكان لي واحد فقط، والتي 991 00:43:22,430 --> 00:43:25,370 بصراحة سيكون أكثر سهولة النهج، وأعتقد أن أول وهلة، 992 00:43:25,370 --> 00:43:30,220 أنت لن تكون قادرة على الكشف عن إذا كان المستخدم قد تم إعطاء لكم المزيد 993 00:43:30,220 --> 00:43:31,780 المدخلات من أردت فعلا. 994 00:43:31,780 --> 00:43:34,100 لذلك هذا هو شكل ضمني من تدقيق الأخطاء. 995 00:43:34,100 --> 00:43:35,640 >> ولكن لاحظ ما أقوم به هنا. 996 00:43:35,640 --> 00:43:39,970 مرة واحدة وأنا متأكد من أن المستخدم أعطاني واحدة حرف، وأنا سراح الخط، والقيام 997 00:43:39,970 --> 00:43:44,450 على العكس من getstring، والتي بدورها يستخدم malloc، ثم أعود 998 00:43:44,450 --> 00:43:51,030 C1، الحرف الذي كنت آمل في مستخدم فقط المقدمة والمقدمة. 999 00:43:51,030 --> 00:43:54,680 لذلك لمحت السريع فقط، ولكن أي أسئلة على getchar؟ 1000 00:43:54,680 --> 00:43:57,450 1001 00:43:57,450 --> 00:43:59,590 سوف نعود إلى بعض من الآخرين. 1002 00:43:59,590 --> 00:44:03,770 >> حسنا، اسمحوا لي أن نمضي قدما ونفعل ذلك - لنفترض الآن، فقط لتحفيز لدينا 1003 00:44:03,770 --> 00:44:08,910 المناقشة في الأسبوع بالإضافة إلى الوقت، وهذا هو ملف يسمى structs.h. 1004 00:44:08,910 --> 00:44:11,440 ومرة أخرى، وهذا هو مجرد طعم شيء الذي ينتظرنا. 1005 00:44:11,440 --> 00:44:13,090 ولكن لاحظ أن الكثير هذا هو تعليق. 1006 00:44:13,090 --> 00:44:17,440 لذلك اسمحوا لي تسليط الضوء فقط الجزء المثير للاهتمام في الوقت الراهن. 1007 00:44:17,440 --> 00:44:18,020 الرموز المميزة ل typedef - 1008 00:44:18,020 --> 00:44:19,700 هناك تلك الكلمة الرئيسية نفسها مرة أخرى. 1009 00:44:19,700 --> 00:44:23,100 typedef ونستخدمها لتعلن سلسلة كنوع بيانات خاصة. 1010 00:44:23,100 --> 00:44:27,490 يمكنك استخدام الرموز المميزة ل typedef لخلق العلامة التجارية الجديدة أنواع البيانات التي لم تكن موجودة عندما 1011 00:44:27,490 --> 00:44:28,570 اخترع C. 1012 00:44:28,570 --> 00:44:32,520 على سبيل المثال، وكثافة العمليات يأتي مع جيم شار يأتي مع جيم مزدوجة يأتي مع C. ولكن 1013 00:44:32,520 --> 00:44:34,000 ليس هناك مفهوم الطالب. 1014 00:44:34,000 --> 00:44:37,230 وحتى الآن سيكون من المفيد جدا أن تكون قادرة على كتابة برنامج يقوم بتخزين 1015 00:44:37,230 --> 00:44:40,440 في متغير، رقم الطالب، باسمهم، ومنزلهم. 1016 00:44:40,440 --> 00:44:42,890 وبعبارة أخرى، ثلاث قطع من البيانات، مثل كثافة و 1017 00:44:42,890 --> 00:44:44,420 سلسلة وسلسلة أخرى. 1018 00:44:44,420 --> 00:44:48,220 >> مع الرموز المميزة ل typedef، ما هو قوي جدا حول هذا وsturct الكلمة ل 1019 00:44:48,220 --> 00:44:53,660 هيكل، لك، مبرمج في عام 2013، يمكن تعريف الواقع الخاص بك 1020 00:44:53,660 --> 00:44:57,530 أنواع البيانات التي لم تكن موجودة سنوات قبل ولكن هذا دعوى أغراضك. 1021 00:44:57,530 --> 00:45:01,910 وحتى هنا، في خطوط من 13 إلى 19، نحن معلنا نوع بيانات جديدة، مثل 1022 00:45:01,910 --> 00:45:04,320 عدد صحيح، ولكن اصفا ذلك الطالب. 1023 00:45:04,320 --> 00:45:09,310 وداخل هذا المتغير هو الذهاب الى يكون ثلاثة أشياء - عدد صحيح، سلسلة، 1024 00:45:09,310 --> 00:45:09,930 وسلسلة. 1025 00:45:09,930 --> 00:45:13,040 حتى تتمكن من التفكير في ما هو حقا حدث هنا، حتى وإن كان هذا هو 1026 00:45:13,040 --> 00:45:17,160 قليلا من التبسيط لهذا اليوم، طالب يجري أساسا 1027 00:45:17,160 --> 00:45:19,450 لتبدو هذه. 1028 00:45:19,450 --> 00:45:22,580 ه يذهب أن يكون جزءا من الذاكرة بمعرف، وهو اسم 1029 00:45:22,580 --> 00:45:25,580 الميدان، وحقل المنزل. 1030 00:45:25,580 --> 00:45:30,670 وسنكون قادرين على استخدام تلك القطع من الذاكرة والوصول إليها على النحو التالي. 1031 00:45:30,670 --> 00:45:38,870 >> إذا ذهبت إلى struct0.c، وهنا ل طويلة نسبيا، ولكن بعد 1032 00:45:38,870 --> 00:45:42,630 نمط من التعليمات البرمجية التي يستخدم هذه الحيلة الجديدة. 1033 00:45:42,630 --> 00:45:45,790 لذلك الأولى، اسمحوا لي أن ألفت انتباهكم إلى أجزاء مثيرة للاهتمام حتى أعلى. 1034 00:45:45,790 --> 00:45:49,670 حاد يعرف الطلاب 3، يعلن ودعا الطلاب والمتنازل المستمر 1035 00:45:49,670 --> 00:45:53,450 بصورة تعسفية عدد 3، فقط وذلك لدي ثلاثة طلاب باستخدام 1036 00:45:53,450 --> 00:45:54,830 هذا البرنامج في الوقت الراهن. 1037 00:45:54,830 --> 00:45:55,960 هنا يأتي الرئيسية. 1038 00:45:55,960 --> 00:45:58,860 وإشعار، كيف تعلن مجموعة من الطلاب؟ 1039 00:45:58,860 --> 00:46:00,480 حسنا، أنا مجرد استخدام نفس بناء الجملة. 1040 00:46:00,480 --> 00:46:02,110 كلمة الطالب هو جديد واضح. 1041 00:46:02,110 --> 00:46:04,790 ولكن الطالب، والطبقة، والطلاب قوس. 1042 00:46:04,790 --> 00:46:06,720 >> لذلك للأسف هناك الكثير إعادة استخدام المصطلحات هنا. 1043 00:46:06,720 --> 00:46:07,660 هذا هو مجرد رقم. 1044 00:46:07,660 --> 00:46:09,040 لذلك هذا هو مثل قوله الثلاث. 1045 00:46:09,040 --> 00:46:11,430 الطبقة هو فقط ما أريد لاستدعاء متغير. 1046 00:46:11,430 --> 00:46:12,840 أنا يمكن أن يطلق عليه الطلاب. 1047 00:46:12,840 --> 00:46:15,880 ولكن الطبقة، وهذا ليس فئة في الاعتراض الموجه نوع جافا من الطريق. 1048 00:46:15,880 --> 00:46:17,220 انها مجرد فئة من الطلاب. 1049 00:46:17,220 --> 00:46:20,590 ونوع بيانات كل عنصر في ذلك مجموعة من الطلاب. 1050 00:46:20,590 --> 00:46:23,040 لذلك هذا هو مختلفة قليلا ومن يقول شيئا 1051 00:46:23,040 --> 00:46:25,250 مثل هذا، انها مجرد - 1052 00:46:25,250 --> 00:46:29,500 أنا أقول أعطني ثلاثة طلاب وندعو تلك الفئة مجموعة. 1053 00:46:29,500 --> 00:46:29,800 >> حسنا. 1054 00:46:29,800 --> 00:46:30,680 الآن وهنا حلقة الأربعة. 1055 00:46:30,680 --> 00:46:33,480 هذا الرجل مألوفة - أعاد من صفر على ما يصل إلى ثلاثة. 1056 00:46:33,480 --> 00:46:35,160 وهنا قطعة جديدة من بناء الجملة. 1057 00:46:35,160 --> 00:46:37,710 البرنامج سيكون لتدعوني، الإنسان، لإعطائها الطالب 1058 00:46:37,710 --> 00:46:39,200 ID، وهو الباحث. 1059 00:46:39,200 --> 00:46:44,650 وهنا بناء الجملة التي يمكنك تخزين شيء في حقل معرف في 1060 00:46:44,650 --> 00:46:48,630 الطبقة موقع قوس أولا حتى بناء الجملة هذا ليس جديدا. 1061 00:46:48,630 --> 00:46:51,450 هذا يعني فقط أن تعطيني الثامن طالب في الصف. 1062 00:46:51,450 --> 00:46:52,940 ولكن هذا الرمز هو جديد. 1063 00:46:52,940 --> 00:46:56,320 حتى الآن، ليس لدينا يمكن أن تستخدم نقطة، على الأقل في التعليمات البرمجية مثل هذا. 1064 00:46:56,320 --> 00:47:01,490 وهذا يعني الانتقال إلى البنية المعروفة باسم طالب ووضع شيء هناك. 1065 00:47:01,490 --> 00:47:05,670 وبالمثل، في هذا السطر التالي، 31، انتقل إلى الأمام ووضع كل ما يكتب المستخدم 1066 00:47:05,670 --> 00:47:10,530 لاسم هنا وماذا يفعلون ل المنزل، ونفس الشيء، والمضي قدما و 1067 00:47:10,530 --> 00:47:13,230 وضعها في. المنزل. 1068 00:47:13,230 --> 00:47:15,955 >> فماذا هذا البرنامج القيام في نهاية المطاف؟ 1069 00:47:15,955 --> 00:47:17,220 يمكنك أن ترى قليلا دعابة هناك. 1070 00:47:17,220 --> 00:47:24,780 اسمحوا لي أن نمضي قدما ونفعل جعل البنيات 0 نقطة خفض البنية 0، معرف الطالب 1، 1071 00:47:24,780 --> 00:47:28,250 ويقول ديفيد ماذر، هوية الطالب 2. 1072 00:47:28,250 --> 00:47:32,070 سرقة كيركلاند، هوية الطالب 3. 1073 00:47:32,070 --> 00:47:35,010 لورين Leverit - 1074 00:47:35,010 --> 00:47:38,380 والشيء الوحيد الذي فعل هذا البرنامج، الذي هو مجرد التعسفي تماما، هو 1075 00:47:38,380 --> 00:47:40,980 أردت أن تفعل شيئا مع هذه البيانات، الآن بعد أن كنت علمتنا كيفية 1076 00:47:40,980 --> 00:47:43,450 استخدام البنيات، وكان لي للتو هذه حلقة اضافية هنا. 1077 00:47:43,450 --> 00:47:45,260 أنا تكرار عبر مجموعة من الطلاب. 1078 00:47:45,260 --> 00:47:49,170 أنا استخدم لدينا، صديق ربما الآن مألوفة، سلسلة مقارنة، stircomp ل 1079 00:47:49,170 --> 00:47:53,780 الاختيار هو منزل الطالب 8 ل يساوي ماثر؟ 1080 00:47:53,780 --> 00:47:56,760 وإذا كان الأمر كذلك، فقط طباعة شيء تعسفية مثل، نعم، هو. 1081 00:47:56,760 --> 00:47:59,430 ولكن مرة أخرى، فقط إعطائي الفرص لاستخدام وإعادة استخدام و 1082 00:47:59,430 --> 00:48:02,270 إعادة استخدام هذا نقطة تدوين جديد. 1083 00:48:02,270 --> 00:48:03,250 >> حتى يهتم، أليس كذلك؟ 1084 00:48:03,250 --> 00:48:06,270 الخروج مع برنامج الطالب تعسفي إلى حد ما، ولكن اتضح 1085 00:48:06,270 --> 00:48:09,800 أننا يمكن أن تفعل أشياء مفيدة مع هذا، على سبيل المثال على النحو التالي. 1086 00:48:09,800 --> 00:48:14,600 هذا هو بنية أكثر تعقيدا من ذلك بكثير في C. انها حصلت على عشرة أو أكثر من المجالات، 1087 00:48:14,600 --> 00:48:15,880 إلى حد ما يدعى بغموض. 1088 00:48:15,880 --> 00:48:20,110 ولكن إذا كنت قد سمعت من أي وقت مضى من الرسومات شكل ملف يسمى نقطية، BMP، فإنه 1089 00:48:20,110 --> 00:48:22,830 تبين أن تنسيق ملف الصورة النقطية تبدو الى حد كبير مثل أن هذا. 1090 00:48:22,830 --> 00:48:24,200 انها غبية وجه مبتسم قليلا. 1091 00:48:24,200 --> 00:48:27,840 انها صورة صغيرة التي قمت بالتكبير على كبيرة جدا لدرجة أنني يمكن أن نرى بعضنا 1092 00:48:27,840 --> 00:48:30,410 من النقاط الفردية أو بكسل. 1093 00:48:30,410 --> 00:48:33,800 الآن، اتضح أننا يمكن أن تمثل نقطة سوداء مع، على سبيل المثال، فإن عدد 0. 1094 00:48:33,800 --> 00:48:35,520 ونقطة بيضاء مع الرقم 1. 1095 00:48:35,520 --> 00:48:39,140 >> لذلك وبعبارة أخرى، إذا كنت ترغب في رسم مبتسم الوجه وحفظ هذه الصورة في 1096 00:48:39,140 --> 00:48:42,680 الكمبيوتر، فإنه يكفي لتخزين الأصفار و تلك التي تبدو مثل هذا، حيث، 1097 00:48:42,680 --> 00:48:45,250 مرة أخرى، تلك هي بيضاء والأصفار هم من السود. 1098 00:48:45,250 --> 00:48:48,290 ومعا، إذا كان لديك على نحو فعال واربط من الآحاد والأصفار، لديك 1099 00:48:48,290 --> 00:48:51,030 شبكة من بكسل، وإذا كنت تضع بها، لديك لطيف 1100 00:48:51,030 --> 00:48:52,560 وجه مبتسم قليلا. 1101 00:48:52,560 --> 00:48:58,150 الآن، شكل ملف صورة نقطية، BMP، هو فعليا أن تحت غطاء محرك السيارة، 1102 00:48:58,150 --> 00:49:00,970 ولكن مع مزيد من بكسل سكير التي يمكن أن تمثل في الواقع الألوان. 1103 00:49:00,970 --> 00:49:05,170 >> ولكن عندما يكون لديك أكثر تطورا صيغ الملفات مثل BMP و JPEG و GIF 1104 00:49:05,170 --> 00:49:09,360 التي قد تكون مألوفة، وتلك الملفات على القرص عادة ليس فقط 1105 00:49:09,360 --> 00:49:13,760 يكون الآحاد والأصفار وللبكسل، ولكن لديهم بعض البيانات الوصفية، وكذلك - 1106 00:49:13,760 --> 00:49:16,960 الفوقية بمعنى أن ليس حقا البيانات ولكن من المفيد أن يكون. 1107 00:49:16,960 --> 00:49:21,370 لذلك فان هذه الحقول هنا يعني، و سنرى هذا بمزيد من التفصيل في مجموعة P- 1108 00:49:21,370 --> 00:49:25,810 5، قبل أن الأصفار وتلك التي تمثل بكسل في الصورة، 1109 00:49:25,810 --> 00:49:29,110 هناك مجموعة من البيانات الوصفية مثل حجم الصورة و 1110 00:49:29,110 --> 00:49:30,250 عرض الصورة. 1111 00:49:30,250 --> 00:49:32,910 وتلاحظ أنا نتف من بعض الأشياء التعسفي هنا - 1112 00:49:32,910 --> 00:49:34,260 العرض والارتفاع. 1113 00:49:34,260 --> 00:49:36,160 العد قليلا وبعض الأشياء الأخرى. 1114 00:49:36,160 --> 00:49:37,840 لذلك هناك بعض البيانات الوصفية في ملف. 1115 00:49:37,840 --> 00:49:41,470 >> ولكن من خلال فهم كيف وضعت ملفات في هذه الطريقة، يمكنك فعلا 1116 00:49:41,470 --> 00:49:45,890 ثم معالجة الصور، استعادة الصور من القرص، تغيير حجم الصور. 1117 00:49:45,890 --> 00:49:47,560 ولكن لا يمكنك بالضرورة تعزيزها. 1118 00:49:47,560 --> 00:49:48,480 أنا في حاجة إلى صورة. 1119 00:49:48,480 --> 00:49:52,840 فعدت إلى RJ هنا، الذين رأيت على الشاشة منذ بعض الوقت. 1120 00:49:52,840 --> 00:49:57,160 وإذا كنت تفتح الرئيسي هنا، وهذا هو ماذا يحدث إذا حاولت تكبير و 1121 00:49:57,160 --> 00:49:59,380 تعزيز RJ. 1122 00:49:59,380 --> 00:50:01,480 انه لا تحصل على أي أفضل حقا. 1123 00:50:01,480 --> 00:50:06,240 الآن الرئيسي هو نوع من الضبابية عليه قليلا، فقط للتعتيم على 1124 00:50:06,240 --> 00:50:11,040 حقيقة أن الملكية الأردنية لا تحصل ولا سيما تعزيز عند تكبير. 1125 00:50:11,040 --> 00:50:13,310 وإذا فعل ذلك بهذه الطريقة، رؤية الساحات؟ 1126 00:50:13,310 --> 00:50:15,490 نعم، يمكنك أن ترى بالتأكيد الساحات على العرض. 1127 00:50:15,490 --> 00:50:17,690 >> هذا ما تحصل عليه عندما كنت تعزيز. 1128 00:50:17,690 --> 00:50:22,570 ولكن في فهم كيف دينا RJ أو وينفذ وجه مبتسم سيتيح لنا 1129 00:50:22,570 --> 00:50:24,950 في الواقع كتابة التعليمات البرمجية التي تعالج هذه الأشياء. 1130 00:50:24,950 --> 00:50:29,970 واعتقدت أن ينتهي في هذه المذكرة، مع 55 ثانية لتعزيز هذا، 1131 00:50:29,970 --> 00:50:31,230 أجرؤ، ويقول مضللة إلى حد ما. 1132 00:50:31,230 --> 00:50:32,990 >> [تشغيل الفيديو] 1133 00:50:32,990 --> 00:50:34,790 >> -انه يكذب. 1134 00:50:34,790 --> 00:50:38,310 حول ما، وأنا لا أعرف. 1135 00:50:38,310 --> 00:50:41,200 >> لذا، ما الذي نعرفه؟ 1136 00:50:41,200 --> 00:50:45,280 >> هذا، في الساعة 9:15 راي Santoya وكان في أجهزة الصراف الآلي. 1137 00:50:45,280 --> 00:50:47,830 >> -لذا فإن السؤال هو ما كان يفعل في 9:16؟ 1138 00:50:47,830 --> 00:50:50,750 >> إطلاق النار على الشخص ملليمتر تسعة في شيء. 1139 00:50:50,750 --> 00:50:52,615 ربما رأى قناصة. 1140 00:50:52,615 --> 00:50:54,760 >> وقد-أو العمل معه. 1141 00:50:54,760 --> 00:50:56,120 >> -الانتظار. 1142 00:50:56,120 --> 00:50:57,450 أعود واحدة. 1143 00:50:57,450 --> 00:50:58,700 >> ماذا ترى؟ 1144 00:50:58,700 --> 00:51:05,530 1145 00:51:05,530 --> 00:51:09,490 >> -إحضار وجهه حتى، كامل الشاشة. 1146 00:51:09,490 --> 00:51:09,790 >> -صاحب النظارات. 1147 00:51:09,790 --> 00:51:11,040 >> -هناك انعكاس. 1148 00:51:11,040 --> 00:51:21,790 1149 00:51:21,790 --> 00:51:23,520 >> -هذا هو فريق البيسبول Neuvitas. 1150 00:51:23,520 --> 00:51:24,530 هذا هو الشعار. 1151 00:51:24,530 --> 00:51:27,040 >> وكان يتحدث لمن ل يرتدي سترة أن. 1152 00:51:27,040 --> 00:51:27,530 >> [END تشغيل الفيديو] 1153 00:51:27,530 --> 00:51:29,180 >> DAVID J. مالان: هذه الإرادة تكون مشكلة تعيين 5. 1154 00:51:29,180 --> 00:51:30,720 سوف نرى لك الاسبوع المقبل. 1155 00:51:30,720 --> 00:51:32,330 >> المتكلم ذكر: في CS50 المقبل. 1156 00:51:32,330 --> 00:51:39,240 >> [جدجد النقيق] 1157 00:51:39,240 --> 00:51:41,270 >> [عزف الموسيقى]