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