[संगीत बजाना] [वीडियो प्लेबैक] -वह झूठ बोल रहा है। -किस बारे मेँ? -मुझे नहीं पता। -तो हम क्या जानते हैं? 09:15, रे पर -यही Santoya एटीएम पर था। हाँ। तो सवाल यह है क्या वह 9:16 पर कर रहा था? कुछ में 9 मिलीमीटर शूटिंग। शायद वह निशानची देखा। -or उसके साथ काम कर रहा था। रुको। वापस एक जाना। -आप क्या देखते हैं? पूर्ण स्क्रीन उसके चेहरे -Bring। -उसकी ऐनक। एक प्रतिबिंब, वहाँ है। -यह Nuevitas बेसबॉल टीम है। यही कारण है कि अपने लोगो है। -और वह करने के लिए बात कर रहा है जो कोई भी है कि जैकेट पहने हुए है। [अंत प्लेबैक] डेविड मालन: ठीक है। इस CS50 है और यह थोड़ा अधिक है की [सुनाई] के साथ जो आप कर रहे हैं समस्या के साथ dabbling चार सेट। आज हम एक छोटे से अधिक देखने के लिए शुरू गहरा संकेत बुलाया इन बातों पर, यह भले ही जो एक सुंदर रहस्यमय विषय है, अगर यह हो रहा है कि पता चला है साधन है जिसके द्वारा हम निर्माण और असेंबलिंग शुरू कर सकते हैं और अधिक परिष्कृत कार्यक्रम। लेकिन हम पिछले बुधवार को यह किया पहले कुछ claymation के माध्यम से। तो यह, याद है, है Binky और हम उसे इस्तेमाल किया एक कार्यक्रम में एक नज़र लेने के लिए कि वास्तव में कुछ भी दिलचस्प नहीं किया, लेकिन यह कुछ समस्याओं को उजागर किया था। तो क्यों न हम चल नहीं है, आज शुरू करने के लिए जल्दी से इन कदमों से कुछ के माध्यम से, मानव की दृष्टि में गढ़ने की कोशिश वास्तव में क्या हो रहा है यहाँ और क्यों यह बुरा है, और फिर आगे बढ़ने और वास्तव में कुछ का निर्माण शुरू इस तकनीक के साथ? तो ये पहले थे इस कार्यक्रम में दो लाइनें और आम आदमी की दृष्टि में क्या इन दो पंक्तियों कर रहे हो? काफी आरामदायक है, जो किसी को क्या स्क्रीन पर घोषित है के साथ? कर रही है कि इन दो लाइनों क्या हैं? यह सब नहीं है कि सप्ताह एक से अलग, लेकिन कुछ नए विशेष प्रतीक है। हाँ? वहां पर। दर्शकों: संकेत घोषणा? डेविड मालन: फिर से कहो? दर्शकों: संकेत घोषणा? डेविड मालन: घोषणा संकेत और का एक छोटा सा और इसे परिष्कृत करते हैं। दर्शकों: [अश्राव्य] पता एक्स और फिर y। डेविड मालन: और उसके बाद पता। इसलिए विशेष रूप से हम क्या कर रहे हैं हम दो चर घोषणा कर रहे है। इन चर, हालांकि, जा रहे हैं प्रकार int स्टार के होने के लिए जो अधिक विशेष रूप से इसका मतलब है वे स्टोर करने के लिए जा रहे हैं एक पूर्णांक के पते, क्रमश: एक्स और वाई। अब किसी भी मान रहे हैं? इन में से किसी भी वास्तविक पते हैं समय में इस बिंदु पर दो चर? नहीं। यह सिर्फ कचरा मूल्यों तथाकथित है। आप वास्तव में एक आवंटित नहीं करते हैं राम में जो कुछ भी था चर, पहले से शून्य के साथ भरने के लिए जा रहा है और लोगों को उन चर के दोनों। लेकिन हम अभी तक पता नहीं क्या वे कर रहे हैं और वह है क्यों Binky के लिए महत्वपूर्ण होने जा रहा पिछले सप्ताह उसके सिर खो दिया है। इसलिए इस claymation था इस के अवतार जिससे आप सिर्फ दो चर है, मिट्टी के छोटे परिपत्र टुकड़े, चर कि दुकान है, लेकिन के रूप में कर सकते हैं लिपटे तीरों का सुझाव है, वे वास्तव में नहीं इशारा कर रहे हैं करने के लिए कहीं से प्रति जाना जाता है। तो फिर हम इस लाइन थी, और इस स्मृति के लिए था नई पिछले सप्ताह, malloc सिर्फ एक अच्छा तरीका है जो आवंटन, ऑपरेटिंग सिस्टम बता रही है, लिनक्स की या मैक ओएस या विंडोज, अरे, मुझे कुछ स्मृति दे, और तुम सब बताने के लिए ऑपरेटिंग सिस्टम स्मृति के लिए यह पूछे जाने पर कि क्या है। यह क्या परवाह नहीं जा रहा है आप इसके साथ क्या करने जा रहे हैं लेकिन आप ऑपरेटिंग बताने की ज़रूरत है क्या malloc के माध्यम से प्रणाली। हाँ? दर्शकों: कितना? डेविड मालन: कितना? कितना बाइट्स में है, और इसलिए, यह, फिर से, एक काल्पनिक उदाहरण के लिए, बस, कह रहा है मुझे एक पूर्णांक के आकार देते हैं। एक पूर्णांक के अब, आकार चार बाइट्स या 32 बिट है। इसलिए इस बात का सिर्फ एक रास्ता है कह, हे, ऑपरेटिंग सिस्टम, मुझे स्मृति के चार बाइट्स देना मैं अपने निपटान में उपयोग कर सकते हैं, और विशेष रूप से, क्या करता है सम्मान के साथ malloc वापसी चार बाइट्स की है कि हिस्सा करने के लिए? दर्शकों: पता? डेविड मालन: पता। चार बाइट्स की है कि हिस्सा के पते। बिल्कुल सही। और इतना है कि अंततः संग्रहीत किया जाता है क्या हम वास्तव में नहीं है क्यों एक्स में और है कि क्या ख्याल है कि की संख्या यह OX1 या OX2 है कि क्या पता है, या कुछ गुप्त हेक्साडेसिमल पता। हम सिर्फ pictorially परवाह कि चर x है कि अब स्मृति की है कि हिस्सा की ओर इशारा करते। तो तीर एक सूचक का प्रतिनिधित्व करता है, या अधिक विशेष रूप से, एक स्मृति पता। लेकिन फिर, हम आम तौर पर कोई परवाह नहीं है उन वास्तविक पते क्या कर रहे हैं। अब, इस लाइन का कहना है क्या आम आदमी की दृष्टि में? स्टार एक्स 42 अर्धविराम हो जाता है। इसका क्या मतलब होता है? आप जाना चाहते हैं? अपनी गर्दन खरोंच नहीं है। दर्शकों: एक्स का पता 42 पर है। डेविड मालन: एक्स के पते पर 42 से कम है। काफी नहीं। इतने करीब है, लेकिन काफी नहीं है, क्योंकि वहाँ इस एक्स prefixing है कि स्टार। तो हम एक छोटा सा tweak करने की जरूरत है। हाँ? दर्शकों: मूल्य कि सूचक एक्स 42 को इशारा कर रहा है। डेविड मालन: ठीक है। सूचक एक्स है कि मूल्य 42 हो सकता है, हम कहते हैं, के लिए जाएंगे, उनका कहना है या, तारा दूसरे तरीके से रखा एक्स जो कुछ भी पता करने के लिए जाना है, का कहना है यह एक ऑक्सफोर्ड, चाहे एक्स में है स्ट्रीट या 33 ऑक्सफोर्ड स्ट्रीट या OX1 या ox33, जो कुछ भी संख्यात्मक पता है कि स्टार एक्स एक्स के dereferencing है। तो यह है कि पता करने के लिए जाने के लिए और फिर वहाँ संख्या 42 डाल दिया। तो यह है कि हो सकता है एक कह रही है कि के बराबर तरीका है। तो यह है कि सब ठीक है और उसके बाद हम तस्वीर का प्रतिनिधित्व करेंगे हम के रूप में जोड़ दिया है, जहां चार की है कि हिस्सा 42 , दाएँ हाथ की ओर पर बाइट्स लेकिन बातें धराशायी हो गईं, जहां इस लाइन थी और Binky के सिर popped इस बिंदु पर बंद, बुरी बातें हो सकता है जब क्योंकि आप कचरा मूल्यों भिन्नता अमान्य भिन्नता आप या संकेत, और मैं अमान्य कहना क्योंकि में इस बिंदु पर कहानी, वाई के अंदर क्या है? आधार y का मूल्य क्या है पिछले कुछ कदम पर? हाँ? वह क्या है? दर्शकों: एक पता। डेविड मालन: एक पते। यह एक पता होना चाहिए लेकिन मैं यह initialized है? इसलिए मैं अभी तक नहीं किया है। तो वहाँ में होना क्या जाता है? यह सिर्फ कुछ कचरा मूल्य है। यह शून्य से करने के लिए किसी भी पता किया जा सकता है 2 अरब तुम राम के दो gigs है, या शून्य 4 अरब करने के लिए आप है, तो राम के चार गीगाबाइट मिला है। यह कुछ कचरा मूल्य है लेकिन समस्या यह है ऑपरेटिंग सिस्टम है कि, यह आप नहीं दिया गया है, तो स्मृति की है कि हिस्सा विशेष रूप से आप के लिए जाने की कोशिश कर रहे हैं कि, यह आम तौर पर क्या कारण हो रहा है हम एक विभाजन गलती के रूप में देखा है। तो वास्तव में, आप में से किसी को जो दिया है कार्यालय समय में समस्याओं पर संघर्ष किया या समस्याओं में है कि अधिक है आम तौर पर यह पता लगाने की कोशिश कर के साथ एक विभाजन गलती, कि आम तौर पर इसका मतलब आप का एक खंड छू रहे हैं तुम नहीं होना चाहिए कि स्मृति। आप स्मृति छू रहे हैं कि ऑपरेटिंग सिस्टम नहीं है यह है, चाहे आप को छूने की अनुमति अपने सरणी में बहुत दूर जा रहा द्वारा या, चाहे वह अब शुरू आप को छू रहे हैं, क्योंकि यह है बस कुछ कचरा मूल्य है कि स्मृति। यहाँ तो स्टार एक्स कर रही है अपरिभाषित व्यवहार की तरह। आप इसे बाधाओं की वजह से कभी नहीं करना चाहिए , कार्यक्रम बस दुर्घटना के लिए जा रहा है कर रहे हैं, आप कह रहे हैं, क्योंकि इस पते पर जाना और तुम्हें पता नहीं है, जहां है उस पते वास्तव में है। तो ऑपरेटिंग सिस्टम होने की संभावना है अपने कार्यक्रम दुर्घटना के लिए जा रहा एक परिणाम है और वास्तव में, के रूप में है कि क्या Binky करने के लिए वहाँ क्या हुआ। तो अंततः, binky तय इस के साथ यह समस्या है। कि कार्यक्रम तो खुद को त्रुटिपूर्ण था। लेकिन अगर आप एक तरह से आगे बना है, तो और इसके बजाय इस लाइन पर अमल, Y बस एक्स के बराबर होती है जो कुछ भी मतलब पता एक एक्स है, यह भी y में डाल दिया। और तो pictorially, हम है दो तीर के साथ इस का प्रतिनिधित्व किया एक्स से और y ओर इशारा करते हुए से एक ही जगह पर। तो शब्दार्थ, एक्स बराबर है y के लिए उन दोनों क्योंकि एक ही भंडारण कर रहे हैं पता है, फलस्वरूप, 42 पर इशारा और अब, जब आप स्टार का कहना है Y, y में पता करने के लिए जाना यह एक दिलचस्प पक्ष प्रभाव पड़ता है। तो y में पता है एक्स में पते के रूप में एक ही बात है। तो अगर आप पते पर जाने का कहना है और y में 13 का मूल्य परिवर्तन, कौन प्रभावित है? एक्स, बिंदु डी, तो बात करने के लिए किया जाता है के रूप में अच्छी तरह से प्रभावित किया जाना चाहिए। और वास्तव में, कैसे निक इस तस्वीर आकर्षित किया claymation में बिल्कुल था। हम सूचक का पालन करें, भले ही वाई, हम एक ही जगह में समाप्त हो गया और इसलिए हम मुद्रित करने के लिए गए थे एक्स या वाई के pointee बाहर, फिर हम 13 की मूल्य देखना होगा। अब, मैं pointee होने का कहना है वीडियो के साथ संगत। प्रोग्रामर्स, करने के लिए मेरे ज्ञान, वास्तव में कभी नहीं शब्द pointee कहते हैं, बताया है जो कि पर, लेकिन स्थिरता के लिए वीडियो के साथ, एहसास यह थी कि वह सब है उस स्थिति में मतलब होता है। Claymation पर तो किसी भी सवाल या संकेत या malloc बस अभी तक? नहीं? ठीक है। तो आगे की बिना हलचल, चलो एक नज़र रखना यह वास्तव में है जहां पर कुछ समय के लिए इस्तेमाल किया गया। इसलिए हम इस CS50 पुस्तकालय लिया है कि इन कार्यों के सभी मिल गया है। हम GetInt GetString एक बहुत उपयोग किया है शायद पहले GetLongLong मेरी pset में एक या तो है, लेकिन वास्तव में क्या चल रहा है? ठीक है, चलो एक त्वरित नज़र रखना एक कार्यक्रम में हुड के नीचे है कि हम आपको CS50 देना क्यों प्रेरित करती है पुस्तकालय, और वास्तव में पिछले सप्ताह के रूप में, हम उन लेने शुरू कर दिया प्रशिक्षण के पहियों बंद। तो अब यह हल है की पोस्टमार्टम की क्या है पर जा रहा CS50 पुस्तकालय के अंदर, हम अब आगे बढ़ शुरू कर देंगे, भले ही इसे दूर से ज्यादातर कार्यक्रमों के लिए। इसलिए इस 0 scanf नामक एक कार्यक्रम है। यह सुपर कम है। यह सिर्फ इन लाइनों है, लेकिन यह एक समारोह में कहा जाता scanf का परिचय हम वास्तव में देखने के लिए जा रहे हैं कि CS50 पुस्तकालय के अंदर एक पल, एक से थोड़ा अलग रूप में यद्यपि। लाइन पर 16 तो इस कार्यक्रम एक चर x की घोषणा की है। तो मुझे एक पूर्णांक के लिए चार बाइट्स दे। यह उपयोगकर्ता बता दिया गया है नंबर कृपया, और उसके बाद यह एक दिलचस्प लाइन है कि वास्तव में पिछले सप्ताह एक साथ संबंधों और इस। Scanf, और फिर इसे एक लेता है नोटिस प्रारूप स्ट्रिंग, बस printf की तरह, % मैं एक int का मतलब है, और फिर इसे एक लेता है थोड़ा सा दिखता है जो दूसरा तर्क कायरता। यह एम्परसेंड एक्स है, और याद करने के लिए, हम केवल इस बार पिछले सप्ताह देखा। एम्परसेंड एक्स क्या दर्शाता है? एम्परसेंड सी में क्या करता है? हाँ? दर्शकों: का पता। डेविड मालन: का पता। तो यह विपरीत है स्टार ऑपरेटर की, स्टार ऑपरेटर कहते हैं, जबकि करने के लिए जाना इस पते, एम्परसेंड ऑपरेटर यह पता लगाने का कहना है, इस चर का पता, और इसलिए इस वजह से, कुंजी है जीवन में scanf का उद्देश्य उपयोगकर्ता का स्कैन करने के लिए है कीबोर्ड से इनपुट, जो भी हो पर निर्भर करता है कि वह या वह प्रकार, और उसके बाद उस उपयोगकर्ता के इनपुट पढ़ एक चर में है, लेकिन हम पिछले दो हफ्तों में देखा कि स्वैप समारोह है कि हम को लागू करने के लिए सहजता से करने की कोशिश की बस टूट गया था। स्वैप समारोह के साथ याद है कि, हम सिर्फ ints के रूप में ए और बी की घोषणा की है, तो हम सफलतापूर्वक स्वैप किया स्वैप के अंदर दो चर सिर्फ दूध और OJ के साथ की तरह, लेकिन स्वैप, लौट के रूप में जल्द ही के रूप में सम्मान के साथ क्या परिणाम था एक्स और वाई के लिए, मूल मूल्यों? कुछ भी नहीं। हाँ। कुछ भी नहीं है, क्योंकि उस समय हुआ स्वैप, केवल अपने स्थानीय प्रतियां बदल सभी जो कहना है इस बार, जब भी हम है बहस में गुजर गया कार्य करने के लिए, हम कर रहे हैं सिर्फ उन तर्कों की प्रतियां गुजर रहा है। तुम उस के साथ क्या कर सकते हैं आप उन लोगों के साथ जो भी चाहते हैं, लेकिन वे कोई है जा रहे हैं मूल मूल्यों पर प्रभाव। तो यह आप यदि समस्याग्रस्त है scanf तरह एक समारोह है चाहता हूँ जीवन में, जिसका उद्देश्य स्कैन करने के लिए है कीबोर्ड से उपयोगकर्ता के इनपुट और उसके बाद तो, रिक्त स्थान को भरने बात यह है कि, एक्स की तरह एक चर देना एक मूल्य है, अगर मैं थे क्योंकि सिर्फ scanf के लिए एक्स पारित करने के लिए, आप पिछले के तर्क को मानते हैं सप्ताह, scanf यह जो चाहे कर सकते हैं एक्स की एक प्रति के साथ है, लेकिन यह नहीं कर सका हम दे जब तक स्थायी रूप से एक्स बदल इतनी बात करने के लिए, एक खजाने का नक्शा scanf जहां x स्थान अंक, जिससे हम इतना है कि एक्स के पते में पारित scanf देखते हैं और वास्तव में परिवर्तन नहीं जा सकती एक्स के लिए मूल्य। और तो वास्तव में, सभी इस कार्यक्रम करता है कि मैं अपने स्रोत में scanf 0, बनाते हैं 5m निर्देशिका, scanf 0 बनाने, डॉट scanf स्लेश, संख्या 50 कृपया, 50 के लिए धन्यवाद। तो यह है कि सभी दिलचस्प नहीं है लेकिन वास्तव में क्या हो रहा है जैसे ही मैं फोन के रूप में यह है कि , यहां x का मान scanf स्थायी रूप से बदल दिया जा रहा है। अब, यह अच्छा लगता है और अच्छा है, और वास्तव में, यह हम वास्तव में जरूरत नहीं है की तरह लगता है सभी अब पर CS50 पुस्तकालय। उदाहरण के लिए, चलाने के लिए यहां इस बार और अधिक। मुझे एक पल के लिए इसे फिर से खोलना करते हैं। के एक नंबर की कोशिश करते हैं तो कृपया और बजाय पहले की तरह 50 कह रही है, चलो बस कोई कहते हैं। ठीक है, कि एक छोटे से अजीब है। ठीक। यहाँ है और अभी कुछ बकवास है। तो यह प्रतीत नहीं होता गलत स्थितियों को संभाल। इसलिए हम शुरू न्यूनतम करने की जरूरत है कुछ त्रुटि जाँच जोड़ने उपयोगकर्ता है कि यह सुनिश्चित करना 50 की तरह एक वास्तविक संख्या में लिखा है, जाहिरा तौर पर टाइपिंग शब्दों क्योंकि समस्याग्रस्त के रूप में पहचान नहीं है, लेकिन यह शायद होना चाहिए। चलो अब है कि इस संस्करण पर नजर डालते हैं मेरा प्रयास GetString reimplement करने के लिए। Scanf यह सब है तो कार्यक्षमता में बनाया यही कारण है कि हम इन के साथ dabbling कर दिया गया है GetString की तरह प्रशिक्षण के पहियों? वैसे, यहाँ शायद मेरी अपनी है GetString का सरल संस्करण जिससे एक सप्ताह पहले, मैं ने कहा कि हो सकता है, मुझे एक स्ट्रिंग देने के लिए और यह बफर कहते हैं। आज, मैं तो बस शुरू करने के लिए जा रहा हूँ , चार सितारा, जो, याद कह यह सिर्फ पर्याय है। यह डरावना लग रहा है, लेकिन यह है सटीक एक ही बात। तो मुझे एक चर बुलाया बफर देना एक स्ट्रिंग है कि स्टोर करने के लिए जा रहा है, यूजर स्ट्रिंग कृपया बताओ और फिर, पहले की तरह, चलो इस सबक उधार लेने की कोशिश करते हैं scanf % S इस समय और फिर बफर में गुजरती हैं। अब, एक त्वरित मानसिक स्वास्थ्य की जांच। क्यों मैं यह नहीं कह रहा हूँ एम्परसेंड इस बार बफर? पिछले उदाहरण से अनुमान। दर्शकों: चार सितारा एक सूचक है। डेविड मालन: वास्तव में, इस समय, चार क्योंकि स्टार, पहले से ही एक सूचक, एक पता है वहाँ जा रहा है कि स्टार की परिभाषा के द्वारा। और scanf एक पते की उम्मीद है, यह सिर्फ बफर में पारित करने के लिए काफ़ी है। मैं एम्परसेंड बफर कहने की ज़रूरत नहीं है। जिज्ञासु के लिए, तुम सकता है कुछ इस तरह करते हैं। यह अलग अर्थ नहीं होता। यह आपको एक सूचक देना होगा जो वास्तव में एक सूचक, करने के लिए सी में है, लेकिन के लिए एक वैध बात अब, हम इसे सरल रखने के चलो और सुसंगत कहानी रहते हैं। मैं बस में पारित करने के लिए जा रहा हूँ बफर और यह सही है। समस्या है, हालांकि यह है। मुझे आगे जाना है और इस चलाते हैं यह संकलन के बाद कार्यक्रम। Scanf 1 बनाओ। अरे यह मेरी संकलक मेरी त्रुटि को पकड़ने। मुझे एक दूसरी दे। बजना। के scanf-1.c कहते हैं। ठीक। हम वहाँ चलें। मुझे इसकी आवश्यकता है। CS50 आईडी विभिन्न है कॉन्फ़िगरेशन सेटिंग्स कि खुद के खिलाफ की रक्षा। मैं ने उन को निष्क्रिय करने की जरूरत मैन्युअल इस समय बजना चल रहा है। तो स्ट्रिंग कृपया। मुझे आगे जाना है और टाइप करने के लिए जा रहा हूँ मेरी पसंदीदा हैलो दुनिया में। अशक्त, ठीक है। यही कारण है कि मैं क्या टाइप नहीं है। तो यह संकेत है कुछ गलत हो रहा है। मुझे आगे जाना है और टाइप करते हैं वास्तव में एक लंबी स्ट्रिंग में। अशक्त के लिए धन्यवाद और मैं नहीं जानता यदि मैं यह दुर्घटना करने के लिए सक्षम होने के लिए जा रहा हूँ। चलो थोड़ा प्रतिलिपि की कोशिश करते हैं पेस्ट और इस मदद करता है देखते हैं। बस इस का एक बहुत पेस्ट करें। यह निश्चित रूप से एक बड़ा है सामान्य से अधिक स्ट्रिंग। चलो बस वास्तव में यह लिखने दो। नहीं। लानत है। आदेश नहीं मिला। तो यह है कि असंबंधित है। मैं चिपकाया ऐसा इसलिए है क्योंकि कुछ बुरा वर्ण, लेकिन यह पता चला है काम करने के लिए नहीं जा रहा है। क्योंकि, चलो इस बार और अधिक कोशिश करते हैं हम वास्तव में यह दुर्घटना है, तो यह और अधिक मज़ा है। चलो इस टाइप करते हैं और अब, मैं कर रहा हूँ वास्तव में एक लंबी स्ट्रिंग कॉपी करने के लिए जा रहा और अब यदि देखते हैं हम इस बात को दुर्घटना कर सकते हैं। मैं रिक्त स्थान छोड़े गए और नोटिस नई लाइनों और अर्धविराम और सभी कायरता अक्षर। दर्ज करें। और अब नेटवर्क सिर्फ धीमी गति से किया जा रहा है। मैं स्पष्ट रूप से भी लंबे समय के लिए आदेश-वी नीचे का आयोजन किया। लानत है! आदेश नहीं मिला। ठीक। खैर, बात यह है फिर भी निम्नलिखित। तो वास्तव में क्या हो रहा है इस घोषणा के साथ पर लाइन पर 16 चार स्टार बफर की? इसलिए मैं हो रही है क्या कर रहा हूँ मैं एक सूचक की घोषणा कब? मैं जा रहा हूँ सभी एक चार बाइट मूल्य है बफर कहा जाता है, लेकिन इसके अंदर क्या हो रहा है इस समय? यह सिर्फ कुछ कचरा मूल्य है। किसी भी समय है क्योंकि आप एक चर घोषित सी में, यह सिर्फ कुछ कचरा मूल्य है, और हम शुरू कर रहे हैं इस वास्तविकता से अधिक यात्रा। अब, मैं scanf बता जब, इस पते पर जाना और जो कुछ भी उपयोगकर्ता प्रकार डाल दिया। में उपयोगकर्ता प्रकार हैं हैलो दुनिया, ठीक है, मैं उसे कहाँ रखा है? बफर एक कचरा मूल्य है। तो यह है कि एक तीर की तरह की तरह है कि जहां कौन जानता है ओर इशारा करते है। शायद यह इशारा कर रहा है यहीं मेरी स्मृति में। और इसलिए जब उपयोगकर्ता हैलो दुनिया में प्रकार, कार्यक्रम रखा करने की कोशिश करता स्ट्रिंग नमस्ते विश्व बैकस्लैश 0 स्मृति की है कि हिस्सा में। लेकिन उच्च संभावना के साथ है, लेकिन स्पष्ट रूप से नहीं 100% संभावना, कंप्यूटर तो दुर्घटना के लिए जा रहा है कार्यक्रम यह नहीं है क्योंकि स्मृति मैं छूने की अनुमति दी जानी चाहिए। तो संक्षेप में, इस कार्यक्रम है ठीक है कि कारण के लिए त्रुटिपूर्ण। मैं मौलिक क्या कर रहा हूँ? क्या कदम मैं बस की तरह, छोड़ा गया है हम Binky का पहला उदाहरण के साथ छोड़े गए? हाँ? दर्शकों: स्मृति आबंटन? डेविड मालन: मेमोरी आवंटन। मैं वास्तव में आवंटित नहीं किया है कि स्ट्रिंग के लिए किसी भी स्मृति। इसलिए हम तरीके के एक जोड़े में यह तय कर सकते हैं। एक है, हम इसे सरल रखने कर सकते हैं और वास्तव में, अब आप कर रहे हैं एक धुंधला देखने के लिए शुरू करने जा रहा क्या दोनों के बीच लाइनों की एक सरणी, एक स्ट्रिंग है क्या, क्या एक है चार स्टार वर्ण का क्या एक सरणी है है। यहाँ एक दूसरा उदाहरण है तार और नोटिस से जुड़े सब मैं लाइन पर किया है 16 कह के बजाय, है कि बफर एक चार होने जा रहा है स्टार, स्मृति का एक हिस्सा के लिए एक सूचक, मैं बहुत सक्रियता से देने जा रहा हूँ 16 अक्षरों के लिए अपने आप को एक बफर, और वास्तव में, आप परिचित हैं, तो अवधि बफरिंग के साथ, शायद वीडियो की दुनिया से, एक वीडियो बफरिंग, बफरिंग है जहां, बफरिंग। खैर, कनेक्शन यहाँ क्या हो रहा है? यूट्यूब की खैर, अंदर और वीडियो प्लेयर के अंदर आम तौर पर एक सरणी है कि 16 से भी बड़ा है। यह आकार एक की एक सरणी हो सकता है मेगाबाइट, शायद 10 मेगाबाइट, और कहा कि सरणी में आपके ब्राउज़र करता है बाइट्स की एक पूरी गुच्छा डाउनलोड की मेगाबाइट की एक पूरी गुच्छा वीडियो, और वीडियो प्लेयर, YouTube के या जो कोई भी है, शुरू होता है उस सरणी से बाइट्स पढ़ने, और किसी भी समय आप देख शब्द बफरिंग, बफरिंग, उस खिलाड़ी का मतलब है उस सरणी के अंत करने के लिए मिल गया। नेटवर्क यह नहीं है कि इतनी धीमी है अधिक बाइट के साथ सरणी refilled और इसलिए आप बिट्स से बाहर रहे हैं उपयोगकर्ता को प्रदर्शित करने के लिए। तो बफर एक उपयुक्त अवधि में है कि यहाँ है यह सिर्फ एक सरणी, स्मृति का एक हिस्सा है। और यह इसे ठीक कर देंगे यह पता चला है क्योंकि आप सरणियों इलाज कर सकते हैं कि यद्यपि के रूप में वे भी बफर हालांकि, पते हैं सिर्फ एक प्रतीक है, यह एक है पात्रों के अनुक्रम, बफर, यह मेरे लिए उपयोगी है, प्रोग्रामर, आप के आसपास अपने नाम पारित कर सकते हैं यह मानो एक सूचक के रूप में हालांकि यह एक हिस्सा के पते थे 16 वर्ण के लिए स्मृति की। कि कहने के लिए है तो, मैं पारित कर सकते हैं वास्तव में scanf कि शब्द और इसलिए अब, मैं इस कार्यक्रम करते हैं, scanf 2 बनाने, डॉट स्लेश scanf 2, और प्रकार में दुनिया नमस्ते, , कि time-- दर्ज हम्म, क्या हुआ? स्ट्रिंग कृपया। मैंने क्या गलत किया? हैलो दुनिया, बफर। हैलो वर्ल्ड। आह, मैं क्या कर रहा है पता है। ठीक। तो इसे पढ़ रहा है पहला अंतरिक्ष तक। तो चलो बस एक पल के लिए धोखा देना और मैं बस कुछ टाइप करना चाहता था वास्तव में लंबे समय यह एक लंबे वाक्य है की तरह वह है, एक, दो, तीन, चार, पांच, छह, सात, आठ, नौ, 10, 11, 12, 13, 14, 15, 16। ठीक। यह वास्तव में एक लंबे वाक्य है। तो इस वाक्य है अब से 16 अक्षर और इसलिए मैं हिट दर्ज जब क्या होने जा रहा है? ठीक है, इस मामले में कहानी है, मैं घोषित कर दिया था बफर वास्तव में एक सरणी होने के लिए जाने के लिए 16 वर्ण तैयार के साथ। तो एक, दो, तीन, चार, पांच, छह, सात, आठ, नौ, 10, 11, 12, 13, 14, 15, 16। तो 16 वर्ण, और अब, जब मैं यह एक लंबी है जैसे कुछ में पढ़ वाक्य, क्या होने जा रहा है मैं इस में पढ़ने के लिए जा रहा हूँ कि एक लंबे समय है एस-ई एन टी ई एन सी ई, वाक्य। तो यह जानबूझ है एक बुरी बात यह है कि मैं परे लिखते रहते हैं मेरी सरणी की सीमाओं, मेरी बफर की सीमाओं से परे। मैं भाग्यशाली और कार्यक्रम मिल सकता है परवाह चल रहा है पर रखने के लिए और नहीं होगा, लेकिन आम तौर पर, यह बोल रहा हूँ वास्तव में मेरे कार्यक्रम दुर्घटना होगा, और उस में एक बग है मेरी मैं कदम पल कोड सीमाओं के पार उस सरणी की, क्योंकि मैं अगर यह पता नहीं है जरूरी दुर्घटना के लिए जा रहा या मैं सिर्फ भाग्यशाली पाने के लिए जा रहा हूँ। तो यह समस्याग्रस्त है क्योंकि इस मामले में, यह काम करने के लिए लगता है और भले ही, यहां भाग्य लुभाना जाने आईडीई काफी एक सा बर्दाश्त के लिए लगता है का-- हम वहाँ चलें। अंत में। इसलिए मैं यह देख सकते हैं कि केवल एक ही हूँ। तो मैं बस मज़ा टाइपिंग का एक बहुत कुछ था एक वास्तव में लंबे समय वास्तविक वाक्यांश बाहर यह निश्चित रूप से अधिक हो गई है कि 16 बाइट्स, मैं क्योंकि इस पागल लंबे बहु लाइन में टाइप मुहावरा है, और उसके बाद क्या हुआ नोटिस। कार्यक्रम इसे मुद्रण की कोशिश की और फिर एक विभाजन गलती मिला और विभाजन के दोष जब है कुछ इस तरह होता है और ऑपरेटिंग सिस्टम का कहना है नहीं, कि स्मृति छू नहीं सकते। हम को मारने के लिए जा रहे हैं कुल मिलाकर कार्यक्रम। इसलिए इस समस्या पैदा करने लगता है। मैं इस कार्यक्रम जिससे सुधार किया है कम से कम, कुछ स्मृति है लेकिन यह सीमित करने के लिए प्रतीत होता है रही करने के लिए समारोह GetString कुछ परिमित लंबाई 16 के तार। आप लंबे समय तक समर्थन करना चाहते हैं तो 16 अक्षरों से अधिक वाक्य, आप क्या करते हैं? वैसे, अगर आप बढ़ा सकते हैं 32 को यह बफर के आकार या उस तरह के कम लगता है। क्यों हम बस नहीं बनाते हैं यह 1,000 लेकिन वापस धक्का। Intuitively की प्रतिक्रिया क्या है सिर्फ बनाने के द्वारा इस समस्या से बचने 1000 वर्ण की तरह, बड़ा मेरी बफर? इस तरह से GetString को लागू करने से। यहाँ क्या अच्छा है या बुरा है? हाँ? दर्शकों: यदि आप एक बहुत ऊपर बाँध हैं अंतरिक्ष की है और आप इसका इस्तेमाल नहीं करते, तो आपको लगता है कि अंतरिक्ष reallocate नहीं कर सकते। डेविड मालन: बिल्कुल। यदि आप नहीं करते insofar के रूप में अगर यह बेकार है वास्तव में उन बाइट्स की 900 की जरूरत है और फिर भी आप के लिए पूछ रहे हैं वैसे भी कुल में 1,000, आप बस पर और अधिक स्मृति उपभोग कर रहे हैं आप की जरूरत की तुलना में उपयोगकर्ता के कंप्यूटर, और सभी को, कुछ के बाद आप पहले से ही सामना करना पड़ा है जीवन में कर रहे हैं जब कि कार्यक्रमों के बहुत से चल रहा है और वे, स्मृति के बहुत से खा रहे हैं यह वास्तव में प्रदर्शन को प्रभावित कर सकते हैं और उपयोगकर्ता के अनुभव कंप्यूटर पर। तो यह है कि एक तरह से एक आलसी समाधान है, यकीन के लिए, और इसके विपरीत, यह न केवल बेकार है, क्या समस्या अभी भी मैं अपने बफर बनाने, भले ही बनी हुई है 1000? हाँ? दर्शकों: स्ट्रिंग लंबाई 1,001 है। डेविड मालन: बिल्कुल। अपने स्ट्रिंग लंबाई 1,001 है, आप सटीक एक ही समस्या है, और मेरे तर्क से, मैं करूंगा अभी तो यह 2000 बना है, लेकिन आप में पता नहीं है यह होना चाहिए कि कितना बड़ा अग्रिम, और अभी तक, मैं अपने कार्यक्रम को संकलित करने की क्या ज़रूरत है लोगों का उपयोग देने से पहले और डाउनलोड यह। इसलिए इस बात का बिल्कुल प्रकार है सामान CS50 पुस्तकालय की कोशिश करता है कि साथ हमें मदद मिलेगी और हम केवल नज़र जाएगा करने के लिए अंतर्निहित कार्यान्वयन में से कुछ पर यहाँ है, लेकिन इस CS50 डॉट सी है CS50 आईडीई पर किया गया है कि फाइल है आप का उपयोग किया गया है कि इन सभी सप्ताह। यह पूर्व संकलित है और आप है स्वचालित रूप से यह प्रयोग किया गया होने के स्वभाव से बजना के साथ एल CS50 झंडा पानी का छींटा, लेकिन मैं सभी के माध्यम से नीचे स्क्रॉल यदि इन कार्यों, यहां GetString है, और सिर्फ आप एक देने के लिए क्या का स्वाद हो रहा है पर एक त्वरित देखो रिश्तेदार जटिलता। यह एक सुपर लंबे समय है समारोह, लेकिन हम नहीं सभी हार्ड के बारे में सोचने के लिए है कैसे तार हो रही है के बारे में जाना। तो यहाँ मेरी बफर और मैं जाहिरा तौर पर अशक्त करने के लिए इसे प्रारंभ। यह, ज़ाहिर है, चार स्टार के रूप में एक ही बात है, लेकिन मैं में यह निर्णय लिया CS50 पुस्तकालय को लागू हम करने जा रहे हैं कि पूरी तरह से गतिशील होना मैं एक के लिए कितना बड़ा अग्रिम में पता नहीं है स्ट्रिंग उपयोगकर्ताओं को प्राप्त करना चाहते करने जा रहे हैं। तो मैं शुरू करने के लिए जा रहा हूँ सिर्फ एक खाली स्ट्रिंग के साथ और मैं जितना निर्माण करने के लिए जा रहा हूँ स्मृति मैं उपयोगकर्ता स्ट्रिंग फिट करने की आवश्यकता के रूप में और मैं नहीं है तो बहुत हो गया, मैं पूछ रहा हूँ और अधिक स्मृति के लिए ऑपरेटिंग सिस्टम। मैं उनके स्ट्रिंग स्थानांतरित करने के लिए जा रहा हूँ स्मृति का एक बड़ा हिस्सा में और मैं रिहाई या नि: शुल्क करने के लिए जा रहा हूँ स्मृति की अपर्याप्त बड़ा हिस्सा और हम बस जा रहे हैं iteratively यह करने के लिए। तो एक नज़र, यहां सिर्फ एक चर है जिसके साथ मैं ट्रैक रखने के लिए जा रहा हूँ मेरी बफर की क्षमता का। मैं कितने बाइट्स फिट कर सकते हैं? यहाँ एक चर एन के साथ है मैं रखने के लिए जा रहा हूँ जो वास्तव में कितने बाइट्स का ट्रैक उपयोगकर्ता टाइप किया गया है या जो बफर। आप इस से पहले नहीं देखा है, तो आप निर्दिष्ट कर सकते हैं कि एक int की तरह एक चर नाम का सुझाव के रूप में है, जो अहस्ताक्षरित है इसका मतलब है कि यह गैर नकारात्मक है, और क्यों मैं कभी निर्दिष्ट चिंता करने की जरूरत एक पूर्णांक के सिर्फ एक पूर्णांक नहीं है कि, लेकिन यह एक अहस्ताक्षरित पूर्णांक है? यह एक गैर-ऋणात्मक पूर्णांक है। [अश्राव्य] क्या मतलब है? दर्शकों: यह एक राशि का वर्णन है स्मृति की [सुनाई] किया जा सकता है। डेविड मालन: हाँ। मैं अहस्ताक्षरित कहना है कि अगर ऐसा है, तो यह वास्तव में है आप अतिरिक्त स्मृति में से एक बिट दे रही है आप अगर यह मूर्ख की तरह लगता है, लेकिन , कि अतिरिक्त स्मृति में से एक सा है आप कई के रूप में दो बार इसका मतलब है आप का प्रतिनिधित्व कर सकते हैं मूल्यों, यह एक 0 या 1 हो सकता है। तो डिफ़ॉल्ट रूप से, एक पूर्णांक के लिए मोटे तौर पर किया जा सकता है नकारात्मक 2 अरब से सभी तरह सकारात्मक 2 अरब तक। उन बड़े पर्वतमाला हैं, लेकिन यह अभी भी एक तरह से बेकार है आप ही के बारे में परवाह है आकार, जो बस intuitively गैर नकारात्मक होना चाहिए या सकारात्मक या 0, तो ठीक है, क्यों आप 2 अरब बर्बाद कर रहे हैं ऋणात्मक संख्याओं के लिए संभावित मान आप कभी नहीं उन का उपयोग करने के लिए जा रहे हैं? ऐसा कर सकता है अहस्ताक्षरित, अब मेरी पूर्णांक कह कर 4 अरब 0 के बीच और मोटे तौर पर किया जाना है। तो यहाँ कारणों के लिए सिर्फ एक int सी हम बस के रूप में अब में नहीं मिलेगा यह बजाय एक पूर्णांक है क्यों करने के लिए एक चार की, लेकिन यहाँ है क्या हो रहा है का सार आप में से है, और कुछ पर उदाहरण के लिए, का उपयोग किया जा सकता है, यहां तक ​​कि pset चार में fgetc समारोह या उसके बाद, हम इसे देखेंगे फिर समस्या में पांच, सेट fgetc क्योंकि नाम के रूप में अच्छा है एक तरह से है, की तरह arcanely पता चलता है, यह एक समारोह है कि एक चरित्र हो जाता है और इसलिए क्या मौलिक रूप से अलग है हम GetString में क्या कर रहे हैं के बारे में हम प्रयोग नहीं कर रहे है एक ही रास्ते में scanf। हम सिर्फ कदम-दर-कदम पर साथ जीव हैं जो कुछ भी अधिक उपयोगकर्ता में लिखा है, हम हमेशा एक आवंटित कर सकते हैं क्योंकि चार, और इसलिए हम हमेशा सुरक्षित रूप से कर सकते हैं एक समय में एक चार को देखो, और जादू यहाँ होने शुरू होता है। मैं करने के लिए नीचे स्क्रॉल करने के लिए जा रहा हूँ इस समारोह के बीच बस संक्षेप में इस समारोह को पेश करने के लिए। ज्यादा एक जैसे वहाँ malloc समारोह नहीं है, एक realloc समारोह जहां realloc आप स्मृति का एक हिस्सा reallocate की सुविधा देता है और यह बड़ा या छोटा। तो लंबी कहानी को कम करने और साथ आज के लिए मेरे हाथ की एक लहर कि क्या GetString जानते क्या कर रही है यह की तरह है है के जादुई बढ़ रहा है या उपयोगकर्ता के रूप में बफर सिकुड़ने उसके या उसके स्ट्रिंग में प्रकार के। तो अगर उपयोगकर्ता प्रकार एक लघु स्ट्रिंग, इस कोड केवल पर्याप्त का आवंटन स्मृति स्ट्रिंग फिट करने के लिए। उपयोगकर्ता टाइपिंग रहता है मैं फिर से और फिर से ऐसा किया था के रूप में और फिर, ठीक है, यदि बफर के शुरू में इस बड़े और इस कार्यक्रम के लिए, पता चलता है एक मिनट रुको, मैं अंतरिक्ष से बाहर हूँ, यह दोगुना करने के लिए जा रहा है बफर का आकार और फिर बफर का आकार दोगुना और दोहरीकरण करता है कि कोड, हम यहाँ यह देखो, यह है सिर्फ इस चतुर एक लाइनर। आप इस वाक्य रचना को देखा है नहीं हो सकता है इससे पहले, लेकिन आप स्टार के बराबर होती है कहते हैं, इस एक ही चीज के रूप में है क्षमता गुना 2 कह रही है। तो यह सिर्फ दोहरीकरण रहता है बफर की क्षमता और फिर realloc कह रही देने के लिए खुद को बहुत अधिक है कि स्मृति। अब, के रूप में एक अलग रूप में, वहाँ यहाँ में अन्य कार्य कर रहे हैं हम किसी भी विस्तार में नहीं लगेगा कि GetInt में दिखाने के लिए अन्य की तुलना में, हम GetInt में GetString का उपयोग करें। हम यह नहीं है कि जाँच अशक्त, जो, याद है, विशेष मूल्य है कुछ गलत हो गया था इसका मतलब है। हम स्मृति से बाहर रहे हैं। बेहतर है कि के लिए जाँच करें। और हम एक प्रहरी मूल्य वापसी। लेकिन मैं करने के लिए के रूप में टिप्पणी के लिए स्थगित कर देंगे और फिर हम क्यों scanf के इस चचेरे भाई का उपयोग sscanf कहा जाता है और यह पता चला कि sscanf, या स्ट्रिंग scanf, आप लाइन पर एक नज़र लेने की सुविधा देता है कि उपयोगकर्ता में टाइप और तुम चलो गया है अनिवार्य रूप से यह विश्लेषण और मैं क्या कर रहा हूँ यहाँ क्या कर मैं sscanf बता रहा हूँ है, उपयोगकर्ता है, जो कुछ भी विश्लेषण में टाइप करें और सुनिश्चित करें% मैं बनाने के लिए, इसमें एक पूर्णांक है, और हम नहीं करेंगे वहाँ भी वैसा क्यों आज में मिलता है संक्षेप में एक% यहाँ ग, लेकिन लगता है कि अनुमति देता है उपयोगकर्ता टाइप किया गया है तो हमें यह पता लगाने के लिए संख्या के बाद फर्जी कुछ में। तो कारण यह है कि GetInt और GetString पुन: प्रयास करें, पुन: प्रयास करने के लिए आपको बता, पुन: प्रयास क्योंकि सभी का है हम लिखा है कि कोड, यह एक तरह से उपयोगकर्ता के इनपुट देख रही है सुनिश्चित करने में यह पूरी तरह से संख्यात्मक है या यह एक वास्तविक तैर रही है बिंदु मान या की तरह, क्या मूल्य के आधार पर आप उपयोग कर रहे कार्य करते हैं। वाह। ठीक। यही कारण है कि एक कौर था लेकिन बात यहाँ है कि हम था कारण उन प्रशिक्षण के पहियों पर क्योंकि, सबसे कम स्तर पर है अभी तो बहुत सी बातें है कि वहाँ हम चाहते थे कि गलत जा सकते हैं preemptively को संभालने के लिए में निश्चित रूप से उन चीजों को वर्ग की जल्द से जल्द सप्ताह, लेकिन अब pset चार और pset पाँच साथ और परे आप इसे पर्यत अधिक है कि वहाँ होगा आप पर भी आप अधिक सक्षम हैं की समस्याओं के उन प्रकार सुलझाने अपने आप को। GetString या GetInt पर कोई सवाल? हाँ? दर्शकों: तुम क्यों दोगुना होगा बफर की क्षमता बल्कि सिर्फ बढ़ाने से यह सही मात्रा से? डेविड मालन: अच्छा सवाल है। हम क्यों क्षमता दोगुना होगा बफर के विरोध के रूप में बस इसे बढ़ाने के लिए कुछ स्थिर मूल्य से? यह एक डिजाइन निर्णय था। हम सिर्फ यह करने के लिए जाता है, क्योंकि फैसला किया है कि समय के लिहाज से महंगा थोड़ा पूछने के लिए एक होना ऑपरेटिंग सिस्टम स्मृति के लिए, हम नहीं किया में हो रही अंत करना चाहते हैं बड़ा तार के लिए एक स्थिति हम पूछ रहे थे कि फिर से और फिर ओएस और फिर और फिर में स्मृति के लिए तेजी से उत्तराधिकार। तो हम बस कुछ हद तक, का फैसला किया मनमाने ढंग से लेकिन हम काफी आशा है, कि, तुम चलो पता है क्या खुद से आगे निकलने की कोशिश और सिर्फ इतना है कि यह दोहरीकरण रखना हम समय की मात्रा को कम हम malloc बुलाना है या realloc, लेकिन कुल निर्णय जानने के अभाव में फोन क्या उपयोगकर्ताओं में टाइप करने के लिए चाहते हो सकता है। दोनों तरीकों से विवाद हो सकता है। यकीनन अच्छा। तो चलो एक जोड़ी पर एक नजर डालते हैं स्मृति के अन्य दुष्प्रभाव की, गलत जा सकते हैं कि चीजों को और उपकरण है कि आप कर सकते हैं गलतियों के इन प्रकार को पकड़ने के लिए इस्तेमाल करते हैं। यह भले ही आप सभी को पता चला है check50, आप के रूप में ज्यादा नहीं बताया गया है छोटी गाड़ी लिख दिया गया है एक सप्ताह के बाद से कोड, यहां तक ​​कि सभी check50 परीक्षण कर रहे हैं पारित किया है, और यहां तक ​​कि यदि आप और आपके टीएफ कि सुपर विश्वास कर रहे हैं उद्देश्य के रूप में अपने कोड काम करता है। आपका कोड छोटी गाड़ी हो गया है या आप की है कि सभी में त्रुटिपूर्ण, CS50 पुस्तकालय का उपयोग करने में, स्मृति लीक कर दिया गया है। आप ऑपरेटिंग सिस्टम पूछ रहा है कार्यक्रमों के अधिकांश में स्मृति के लिए आपने लिखा है, लेकिन आप है वास्तव में इसे वापस कभी नहीं दिया। आप GetString बुलाया है और GetInt और GetFloat, लेकिन GetString साथ, आप है unGetString या दे कभी नहीं कहा जाता स्ट्रिंग वापस या की तरह है, लेकिन हमने देखा है GetString स्मृति आवंटित करता है कि malloc के रास्ते या इस से बस है जो समारोह realloc, भावना में बहुत समान, और फिर भी, हम किया गया है के लिए ऑपरेटिंग सिस्टम पूछ स्मृति और स्मृति को बार-बार लेकिन यह वापस दे कभी नहीं। अब, एक अलग रूप में, यह पता चला है कि एक कार्यक्रम है, स्मृति के सभी इस्तीफा जब स्वचालित रूप से मुक्त कर दिया गया है। तो यह एक बड़ा सौदा नहीं किया गया है। इसे तोड़ने के लिए नहीं जा रहा है आईडीई या धीमी गति से नीचे बातें, लेकिन जब कार्यक्रमों करना आम तौर पर स्मृति रिसाव और वे एक लंबे समय के लिए चला रहे हैं। यदि आप कभी भी बेवकूफ कम देखा गया है मैक ओएस या hourglass में समुद्र तट गेंद विंडोज पर यह एक तरह से है, जहां धीमा या सोच या सोच या सिर्फ सच में शुरू होता है एक क्रॉल को धीमा करने के लिए, यह बहुत संभव हो सकता है एक स्मृति रिसाव का नतीजा है। जो लिखा प्रोग्रामर आप उपयोग कर रहे सॉफ्टवेयर स्मृति के लिए ऑपरेटिंग सिस्टम पूछना हर कुछ मिनट, हर घंटे। लेकिन अगर आप चला रहे हैं यह भले ही सॉफ्टवेयर, आपके कंप्यूटर में कम से कम अंत पर घंटे या दिन के लिए, आप अधिक से अधिक के लिए पूछ रहे हो सकता स्मृति और कभी वास्तव में यह प्रयोग और तो अपने कोड हो सकता है, या हो सकता है कार्यक्रम, स्मृति लीक किया जा सकता है और आप स्मृति रिसाव शुरू, अन्य कार्यक्रमों के लिए कम स्मृति नहीं है, और प्रभाव के लिए है सब कुछ धीमा। अब, यह अब तक एक के द्वारा होता है सबसे नृशंस कार्यक्रमों आप अवसर होगा CS50 में चलाने के लिए जहां तक इसके उत्पादन की तुलना में और भी गूढ़ है के रूप में बजना या के बनाने के लिए या आदेश के किसी भी हम पहले भाग लिया लाइन कार्यक्रमों लेकिन शुक्र है, इसके उत्पादन में एम्बेडेड कुछ सुपर उपयोगी सुझाव है कि उपयोगी या तो pset चार के लिए किया जाएगा या निश्चित रूप से पांच pset। तो Valgrind एक उपकरण है कि देखने के लिए इस्तेमाल किया जा सकता अपने कार्यक्रम में स्मृति लीक के लिए। इसे चलाने के लिए अपेक्षाकृत आसान है। तुम भी, Valgrind और फिर से चलाने के यह एक छोटे से वाचाल है, हालांकि, पानी का छींटा पानी का छींटा रिसाव की जांच पूर्ण बराबर होती है, और फिर डॉट स्लेश और अपने कार्यक्रम का नाम है। तो Valgrind तो अपने कार्यक्रम चलाया जाएगा और अपने कार्यक्रम के अंत में इसे बराबर से पहले चल रहा है और , आप एक और शीघ्र देता है यह विश्लेषण करने के लिए जा रहा है अपने यह कार्यक्रम चल रहा है, जबकि और क्या आप लीक किया था बताओ बेहतर अभी तक कोई स्मृति और, आप स्मृति स्पर्श किया था कि आप का नहीं था? यह सब कुछ नहीं पकड़ सकते हैं, लेकिन यह है सबसे चीजों को पकड़ने में बहुत अच्छा है। तो यहाँ मेरी होने रन का एक उदाहरण है इस कार्यक्रम, रन Valgrind होने, एक कार्यक्रम में कहा पर स्मृति, और मैं जा रहा हूँ हैं कि लाइनों को उजागर करने के लिए अंतत: हमारे लिए ब्याज की। इसलिए भी अधिक distractions वहाँ मैं स्लाइड से नष्ट कर दिया है कि। लेकिन चलो बस क्या यह देखते हैं कार्यक्रम हमें बता करने में सक्षम है। यह हमें बातें कह के लिए सक्षम है आकार 4 की अवैध लिखने की तरह। दूसरे शब्दों में, आप स्मृति स्पर्श करते हैं, स्मृति की विशेष रूप से 4 बाइट्स आप को नहीं करना चाहिए कि, Valgrind आप बता सकते हैं कि। आकार 4 की अवैध लिखना। आप चार बाइट्स छुआ आप के लिए नहीं करना चाहिए। तुम कहाँ है कि क्या किया? यह सौंदर्य है। मेमोरी डॉट सी लाइन 21 तुम कहाँ है बँधा हुआ है और यह उपयोगी है कि क्यों। ज्यादा GDB की तरह, यह मदद कर सकता है वास्तविक त्रुटि पर आप बात। अब, यह एक छोटे से अधिक है वाचाल, भ्रामक नहीं है। 1 ब्लॉक में 40 बाइट्स निश्चित रूप से कर रहे हैं हार का रिकॉर्ड 1 का 1 में खो दिया है। इसका क्या मतलब है? खैर, यह सिर्फ आप के लिए कहा इसका मतलब 40 बाइट्स और आप इसे वापस नहीं दिया। आप malloc कहा जाता है या तुम्हें बुलाया GetString और ऑपरेटिंग सिस्टम आप 40 बाइट्स, लेकिन आप कभी नहीं दिया मुक्त कर दिया है या कि स्मृति जारी की है, और निष्पक्ष हो, हम बताते हैं कभी नहीं किया है आप कैसे याददाश्त वापस देने के लिए। एक सुपर वहाँ बाहर वर्षगांठ सादे समारोह मुक्त बुलाया। एक तर्क यह बात ले जाता है आप मुफ्त या वापस देना चाहता हूँ लेकिन 40 बाइट्स, जाहिर है, इस कार्यक्रम में लाइन में खो गया है स्मृति के 20 सी डॉट। तो चलो इस कार्यक्रम देखते हैं। यह सुपर बेकार है। यह केवल यह दर्शाता है इस विशेष त्रुटि। तो चलो एक नज़र रखना। यहाँ मुख्य और मुख्य, सूचना, कॉल है एक समारोह च और फिर रिटर्न कहा जाता है। इसलिए भी दिलचस्प नहीं। एफ क्या करता है? मैं एक प्रोटोटाइप के साथ परेशान नहीं किया नोटिस। मैं कोड रखना चाहता था संभव के रूप में कम से कम। तो मैं मुख्य ऊपर च रख दिया और कि, निश्चित रूप से, ठीक है इस तरह कम कार्यक्रमों के लिए। तो च कुछ भी लौट सकते हैं और नहीं करता कुछ भी नहीं लेते हैं, लेकिन यह ऐसा करता है। यह बहुत पसंद है, वाणी Binky उदाहरण में, कि एक्स नामक एक सूचक जा रहा है एक पूर्णांक के पते की दुकान है। तो यह है कि बाएं हाथ की ओर है। अंग्रेजी में, क्या है कर रही दाएँ हाथ की ओर? कोई है? यह हमारे लिए क्या कर रही है? हाँ? दर्शकों: [अश्राव्य] कई बार एक पूर्णांक के आकार है जो 10 बार है कि [अश्राव्य] डेविड मालन: अच्छा है और मुझे संक्षेप में प्रस्तुत करते हैं। तो 10 पूर्णांकों के लिए पर्याप्त जगह आवंटित या 10, एक int का आकार क्या है यह 4 चार बाइट्स, तो 10 गुना है 40, मैं कि कि दाएँ हाथ की ओर इसलिए प्रकाश डाला मुझे 40 बाइट्स देना है और पहली बाइट के पते की दुकान एक्स में। और अब अंत में, और यहाँ कहाँ है इस कार्यक्रम छोटी गाड़ी, क्या है रेखा 21 के साथ गलत है कि तर्क पर आधारित है? क्या लाइन 21 के साथ गलत क्या है? हाँ? दर्शकों: तुम नहीं कर सकते [अश्राव्य] एक्स में सूचकांक। डेविड मालन: हाँ। मैं उस तरह एक्स में सूचकांक नहीं करना चाहिए। तो वाक्य रचना, वह ठीक है। क्या अच्छा है आप बहुत पसंद है, एक सरणी के नाम पर इलाज कर सकते हैं के रूप में हालांकि यह इसी तरह, एक सूचक है यह है के रूप में हालांकि आप एक सूचक इलाज कर सकते हैं एक सरणी, और इसलिए मैं वाक्य रचना कर सकते हैं एक्स ब्रैकेट में कुछ कहना, एक्स ब्रैकेट मैं, लेकिन 10 समस्याग्रस्त है। क्यों? दर्शकों: इसके अंदर नहीं है क्योंकि। डेविड मालन: यह नहीं है स्मृति की है कि हिस्सा अंदर। सबसे बड़ा मूल्य क्या मैं चाहिए उन वर्ग कोष्ठक में डाल दिया? 9 के माध्यम से 9, 0। शून्य अनुक्रमण की वजह से। तो 9 के माध्यम से 0 ठीक हो जाएगा। ब्रैकेट 10 अच्छा नहीं है और लेकिन, हर बार हालांकि याद मैं CS50 आईडीई बनाने की कोशिश करने लगते हैं फर्जी मूल्यों में टाइप करके दुर्घटना, यह हमेशा सहयोग नहीं करता है और वास्तव में, आप अक्सर भाग्यशाली हो, सिर्फ इसलिए कि ऑपरेटिंग सिस्टम नहीं है सूचना है कि आप कभी तो थोड़ा स्मृति के कुछ हिस्सा गुजरती हैं, आप तकनीकी के भीतर रहे क्योंकि अपने सेगमेंट है, लेकिन उस पर और अधिक एक ऑपरेटिंग सिस्टम के वर्ग में, इस तरह है और इसलिए कुछ बहुत आसानी से नहीं चल पाता जा सकते हैं। आपका कार्यक्रम कभी नहीं दुर्घटना के लिए जा रहा है लगातार लेकिन हो सकता है एक बार थोड़ी देर में। और तो Valgrind की कोशिश करते हैं इस पर, और यहाँ है जहां हम अभिभूत मिलेगा क्षण भर के उत्पादन से। तो स्मृति Valgrind रिसाव की जांच कर पूर्ण डॉट स्लेश स्मृति के बराबर होती है। मैं वादा करता हूँ और यहाँ क्यों इस डूब जाएगा। यहाँ Valgrind, यहाँ क्या क्या है एक प्रोग्रामर, कुछ साल ago- यह एक अच्छा विचार होगा फैसला जैसे उत्पादन देखने के लिए। तो चलो इस बात का समझ कर करते हैं। बाएं हाथ पर इतना सब रास्ता कोई अच्छा कारण के पक्ष कार्यक्रम की प्रक्रिया आईडी है हम बस, अद्वितीय पहचानकर्ता चलाने कार्यक्रम के लिए हम सिर्फ भाग गया। हम से है कि हटाए गए स्लाइड, लेकिन वहाँ यहाँ में कुछ उपयोगी जानकारी है। बहुत ऊपर तक स्क्रॉल करते हैं। हम शुरू कर दिया जहां यहाँ है। तो यह सब इतना उत्पादन नहीं है। यहाँ है कि अवैध लिखें लाइन 21 पर आकार 4 की। खैर, लाइन 21 क्या था? लाइन 21 वास्तव में था इस और यह समझ में आता है मैं सप्रमाण में हूँ कि मैं कर रहा हूँ क्योंकि 4 बाइट्स लिख इस पूर्णांक डालने की कोशिश कर, जो कुछ भी हो सकता था यह सिर्फ होना होता है शून्य है, लेकिन मैं कोशिश कर रहा हूँ एक स्थान पर इसे लगाने के लिए कि मेरे लिए संबंधित नहीं है। एक में इसके अलावा, यहाँ नीचे, 40 बाइट्स ब्लॉकों निश्चित रूप से रिकॉर्ड 1 में खो जाते हैं। यही कारण है कि मैं malloc फोन क्योंकि जब है यहाँ, मैं वास्तव में स्मृति को मुक्त कभी नहीं। तो कैसे हम इसे ठीक कर सकते हैं? मुझे आगे चलते हैं और एक छोटे से सुरक्षित हो और वहाँ 9 करना है और यहां मुफ्त X मुझे जाने। यह आज के लिए नई कार्य है। मैं अब स्मृति डॉट स्लेश कर फिर से दौड़ना, तो , चलो फिर से उस पर Valgrind चलाते हैं मेरी खिड़की को अधिकतम और हिट दर्ज करें। अब यह अच्छा है। वे अच्छी खबर दफनाने इस उत्पादन के सभी में। सभी ढेर ब्लॉकों मुक्त थे। हम क्या ढेर करने के लिए वापस आ गया हूँ है, लेकिन कोई लीक संभव हो रहे हैं। तो यह सिर्फ एक और है अपने उपकरण किट के लिए उपकरण जिसके साथ आप शुरू कर सकते हैं अब लगता है कि जैसे त्रुटियों को खोजने के। लेकिन चलो देखते हैं क्या अधिक गलत यहां जा सकते हैं। अब तक के संक्रमण चलो वास्तव में एक समस्या को सुलझाने। एक अलग रूप में, यह एक राहत मिल जाएगी, तो भ्रम या तनाव का छोटा सा है, अब यह हास्यास्पद है। हाँ। वो काफ़ी अच्छा है। संकेत दिए गए हैं क्योंकि पते और पतों सम्मेलन द्वारा आम तौर पर कर रहे हैं हेक्साडेसिमल के साथ लिखा है। हा, हा, अब यह हास्यास्पद है। किसी भी तरह, तो अब चलो वास्तव में एक समस्या का समाधान। यह सुपर कर दिया गया है सुपर इस प्रकार अब तक कम स्तर, और हम वास्तव में उपयोगी कर सकते हैं इन निम्न स्तर के विवरण के साथ बातें। इसलिए हम कुछ सप्ताह की शुरुआत की पहले एक सरणी की धारणा। एक सरणी अच्छा था क्योंकि यह हमारे कोड को साफ करने के लिए मुश्किल है हम एक लिखना चाहता था, क्योंकि अगर कई छात्रों के साथ कार्यक्रम या एकाधिक नाम और घरों और dorms और कॉलेजों और कहा कि सभी को, हम सब कुछ अधिक स्टोर कर सकता सफाई से एक सरणी के अंदर। लेकिन एक नकारात्मक पक्ष का प्रस्ताव एक सरणी के इस प्रकार अब तक। आप इसे अपने आप सहा नहीं गया है, यहां तक ​​कि अगर एक कार्यक्रम में, बस सहज, एक बुरी बात क्या है एक सरणी के बारे में, शायद? मैं कुछ अफवाहें सुनते हैं। दर्शकों: यह मुश्किल है आकार बदलने के लिए। डेविड मालन: यह मुश्किल है आकार बदलने के लिए। आप आकार को बदल नहीं सकते एक सरणी की, वास्तव में, दर असल सी में आप एक और सरणी आवंटित कर सकते हैं, पुराने एक से सब कुछ कदम अब नया, और में कुछ अतिरिक्त जगह है, लेकिन यह एक तरह नहीं है जावा या अजगर की तरह भाषा या अन्य के किसी भी संख्या जिसके साथ भाषाओं आप में से कुछ परिचित हो सकता है, जहां आप सिर्फ चीजों को जोड़कर रख सकते हैं एक सरणी के अंत करने के लिए बारंबार। आप की एक सरणी है जब इसका आकार है कि आकार 6, और विचार पहले की तरह इतना एक निश्चित आकार के एक बफर होने, आप फाटक के बाहर लगता है क्या आकार आप इसे देखना चाहते हैं? आप बहुत बड़ा लगता है, तो आप अंतरिक्ष बर्बाद कर रहे हो। आप बहुत छोटा लगता है, तो आप कम से कम, कि डाटा स्टोर नहीं कर सकते एक बहुत अधिक काम के बिना। संकेत करने के लिए तो आज, धन्यवाद, हम कर सकते हैं एक साथ अपने स्वयं के कस्टम सिलाई शुरू डेटा संरचनाओं, और में तथ्य यह है, यहाँ कुछ है कि एक छोटे से अधिक लग रहा है पहली नज़र में गुप्त, लेकिन यह है कि हम किसी लिंक किए गए फोन करता हूँ क्या है सूची है, और का सार है की इसके नाम का प्रकार यह। यह में संख्या की एक सूची है, या इस मामले में, नंबरों की सूची, लेकिन यह कुछ भी की एक सूची है, लेकिन हो सकता है यह एक साथ तीर के माध्यम से जुड़ा हुआ है और सिर्फ एक अनुमान ले क्या तकनीक के साथ हम सक्षम होने के लिए जा रहे हैं एक साथ सिलाई के लिए, एक तरह से एक धागे के साथ पॉपकॉर्न की तरह, यहाँ सूचियों आयतों जुड़ा हुआ? इसकी संख्या? अंतर्निहित भाषा सुविधा क्या है? दर्शकों: एक सूचक। डेविड मालन: एक सूचक। इसलिए इन तीरों में से प्रत्येक के लिए यहां का प्रतिनिधित्व करता है एक सूचक है या सिर्फ एक पते। तो दूसरे शब्दों में, अगर मैं चाहता हूँ नंबरों की सूची स्टोर करने के लिए, मैं चाहता हूँ कि अगर मैं सिर्फ यह स्टोर नहीं कर सकते बढ़ने और हटना करने की क्षमता एक सरणी में अपने डेटा संरचना। तो मैं एक छोटे से करने की जरूरत है अधिक परिष्कार, लेकिन यह है कि नोटिस चित्र तरह का पता चलता है आप बस थोड़ा धागे मिल गया है कि सब कुछ एक साथ जोड़ने, शायद जगह बनाने के लिए मुश्किल नहीं है उन आयतों के बीच दो या उन नोड्स के दो, के रूप में हम शुरू करेंगे एक नए नोड में डाल दिया है, उन्हें बुला रही है, और फिर कुछ नया सूत्र के साथ, बस एक साथ तीन नोड्स खाई, पहले एक, पिछले एक है, और एक आप सिर्फ बीच में डाला है। और वास्तव में एक लिंक सूची, एक सरणी के विपरीत, गतिशील है। यह विकसित कर सकते हैं और यह कर सकते हैं छोटा और तुम नहीं करते पता है या अग्रिम में कैसे देखभाल करने के लिए है ज्यादा डेटा आप भंडारण करने जा रहे हैं, लेकिन यह हम एक छोटे से रहना होगा पता चला है यह कैसे लागू करने के बारे में सावधान। तो पहले हम को लागू करने के तरीके पर विचार करते हैं इन छोटे आयतों में से एक। यह एक पूर्णांक को लागू करने के लिए आसान है। आप अभी तो पूर्णांक n और कहना आप एक पूर्णांक के लिए 4 बाइट्स मिलता है, लेकिन मैं एक int कैसे मिलता है, एन इसे कहते हैं और फिर एक सूचक है, चलो अगले कहते हैं। हम इन कह सकते हैं बातें कुछ भी हम चाहते हैं लेकिन मैं एक कस्टम डेटा संरचना की जरूरत है। हाँ? दर्शकों: एम्परसेंड [सुनाई]। डेविड मालन: तो एम्परसेंड हम करने के लिए इस्तेमाल करेगा संभवतः एक नोड के पते मिलता है। लेकिन हम एक और की जरूरत है सी की सुविधा के लिए मुझे बनाने की क्षमता देने के लिए इस कस्टम आयत, इस कस्टम चर आप स्मृति में, होगा। दर्शकों: एक संरचना। डेविड मालन: एक संरचना। पिछले हफ्ते से याद है, हम शुरू की संरचना, यह अपेक्षाकृत सरल कीवर्ड कि हमें इस तरह से बातें कर देता है। सी एक डेटा के साथ नहीं आया था संरचना छात्र बुलाया। यह पूर्णांक और नाव और चार और के साथ आता है ऐसी है, लेकिन यह छात्र के साथ नहीं आता है, लेकिन हम एक छात्र डेटा प्रकार बना सकते हैं, इस वाक्य रचना के साथ एक छात्र संरचना, यहां। और अगर आप बार-बार यह देखेंगे। तो के बारे में चिंता मत करो कीवर्ड को याद रखना, लेकिन महत्वपूर्ण बात यह है कि कीवर्ड है हमने कहा है कि सिर्फ इस तथ्य संरचना और फिर हम इसे छात्र बुलाया और अंदर छात्र का एक नाम और एक घर था एक छात्रावास या की तरह या। और अब तो आज के इस प्रस्ताव करते हैं। मैं कुछ शब्द जोड़ा है, लेकिन अगर मैं चाहता हूँ की है है कि इस आयत को लागू करने के लिए एक int और एक दोनों मिला सूचक, आप, मैं क्या कर रहा हूँ नोड नामक एक संरचना घोषित करने जा रही है। मैं कहने जा रहा है, यह के अंदर भी कर रहा हूँ एक नोड, इस आयत एक पूर्णांक है कि और हम यह फोन करता हूँ और एन यह एक अगली सूचक है। और यह एक छोटे वाचाल है लेकिन आप इसके बारे में सोचते हैं, तो चित्र में थे कि तीर एक पल पहले क्या डेटा प्रकार के होते हैं? जहां उन तीर के प्रत्येक इशारा कर रहा है डेटा संरचना की किस प्रकार करने के लिए? यह बस से प्रति एक int की ओर इशारा नहीं कर रहा है। यह करने के लिए इशारा कर रहा है पूरे आयताकार बात और कहा कि आयताकार बात है, हम एक नोड कहा जाता है, ने कहा। और इसलिए हम एक तरह से करने के लिए है बारी बारी से इस तरह के परिभाषित एक नोड कि, हम कहें n नामक एक पूर्णांक में शामिल होंगे और एक सूचक अगले और कहा जाता है जो करने के लिए डेटा संरचना के प्रकार कि सूचक अंक जाहिरा तौर पर है संरचना नोड होने जा रहा। तो यह annoyingly वाचाल है और बस, पंडिताऊ होना कारण है कि हम नहीं कर सकते सिर्फ यह कहना है, जो स्पष्ट रूप से एक बहुत अधिक पठनीय लग रहा है स्मरण करो पढ़ सी कि क्योंकि है चीजों को ऊपर से नीचे, सही करने के लिए छोड़ दिया है। हम अर्धविराम मिलता है जब तक ऐसा नहीं है कीवर्ड नोड वास्तव में मौजूद है। हम इस तरह करना चाहते हैं तो आंकड़ों के अंदर चक्रीय संदर्भ संरचना है, हम यह करने के लिए है, जहां हम शीर्ष पर संरचना नोड का कहना है कि हमें इस का वर्णन करने का एक लंबा रास्ता देती है बात यह है कि, हम संरचना नोड का कहना है कि उसके अंदर, और फिर बहुत अंतिम पंक्ति पर हम कहते हैं, ठीक है, सी, जिस तरह से, सिर्फ इस पूरे लानत फोन बात यह है कि एक नोड और रोक कुल मिलाकर कीवर्ड संरचना का उपयोग कर। तो इस बस की तरह एक वाक्यात्मक है अंतत: हमें बना देता है कि चाल वास्तव में इस तरह लग रहा है कि कुछ और। हम अब मान अगर हम कर सकते हैं तो सी में इस बात को लागू करने, कैसे वास्तव में हम करते हैं इस गुजर शुरू कर दिया? ठीक है, वास्तव में, हम सभी के लिए है है सही करने के लिए और सिर्फ बाएं से पुनरावृति एक तरह से नोड्स डालने या नोड्स हटाना या हम चाहते हैं चीजों के लिए खोज, लेकिन ऐसा करने के लिए, आगे बढ़ते हैं और बनाते हैं एक छोटी चीजें और अधिक वास्तविक इस वजह से इस प्रकार अब तक से सबसे कम स्तर के लिए किया गया है। किसी को सचमुच पहले होना चाहेंगे? ठीक। आ जाओ। आपका नाम क्या है? डेविड: डेविड। डेविड मालन: डेविड। आपसे मिलना अच्छा रहा। मैं भी। ठीक है। और हम एक नंबर 9 की जरूरत है। के रूप में अच्छा नहीं है पहले के रूप में, शायद। ठीक है, संख्या 9। एक नंबर 17, कृपया। मुझे थोड़ा आगे पीछे चलते हैं। संख्या 22, कृपया, और कैसे आगे पीछे के बारे में मैं किसी भी हाथ देख सकते हैं सभी प्रकाश या कोई साथ। किसी ने सही वहाँ स्वेच्छा से किया जा रहा है। आप आने के लिए करना चाहते हैं? आपका प्रकोष्ठ जबरन ऊपर जा रहा है। 17 ठीक है। 22। 26 से नीचे आ रहा है। किसी और के लिए करना चाहेंगे forcefully-- ऊपर आओ। एक वास्तविक स्वयंसेवक। तो बहुत जल्दी, अगर तुम लोगों को व्यवस्था कर सकता है अपने आप को सिर्फ पसंद स्क्रीन पर नोड्स। धन्यवाद। और अगर आप 26 हो जाएगा। सभी सही और त्वरित परिचय। तो मैं दाऊद हूँ और आप भी कर रहे हैं? डेविड: डेविड। डेविड मालन: और आप कर रहे हैं? जेक: जेक। मुकदमा: मुकदमा। एलेक्स: एलेक्स। रफएल: राफेल। टेलर: टेलर। डेविड मालन: टेलर। बहुत बढ़िया। तो ये हमारे स्वयंसेवक हैं के लिए आज और आगे जाना है और, उस तरह से थोड़ा बदलाव और बस आगे बढ़ो और रख आप कर रहे हैं या अपने रूप में अपनी संख्या पकड़े पहला संकेत और अपने बाएँ हाथ का उपयोग कर, आगे जाना है और अभी लागू इन तीरों, बस अपने बाएँ हाथ सचमुच इतना है कि बात करनी चाहिए जो कुछ भी तरफ इशारा करते हुए और अपने आप को इतना है कि कुछ कमरा दे हम नेत्रहीन वास्तव में अपने हथियारों को देख सकते हैं ओर इशारा करते हुए, और तुम सिर्फ बात कर सकते हैं एक तरह से जमीन पर ठीक है। तो यहाँ हम, एक का एक लिंक सूची है दो, तीन, चार, पांच नोड्स शुरू में, और हम इस विशेष नोटिस जो शुरुआत में सूचक कुंजी हम ट्रैक रखने के लिए है, क्योंकि पूरी लंबाई की सूची में किसी भी तरह। वे छोड़ रहे हैं, भले ही ये लोग सही करने के लिए, वापस स्मृति में वापस करने के लिए, वे वास्तव में कहीं भी किया जा सकता है कंप्यूटर की स्मृति में। इसलिए इन लोगों को हो सकता है मंच पर कहीं भी खड़े और इतनी लंबी है कि वे कर रहे हैं, के रूप में ठीक है वास्तव में एक दूसरे के तरफ इशारा करते हुए, लेकिन चीजें रखने के लिए स्वच्छ और सरल, हम करेंगे बस उन्हें आकर्षित तरह सही करने के लिए छोड़ दिया इस, लेकिन बड़े पैमाने पर कमी रह गई हो सकता है उन नोड्स के बीच में। अब, मैं वास्तव में कुछ सम्मिलित करना चाहते हैं, तो नए मूल्य, चलो आगे जाना है और यह करते हैं। अब हम एक अवसर है अन्य नोड चुनने के लिए। 55 mallocing के साथ शुरू कहो। किसी malloc जा रहा है एतराज़ है? ठीक है, ऊपर पर आते हैं। आपका नाम क्या है? इंद्रधनुष: इंद्रधनुष। डेविड मालन: इंद्रधनुष? ठीक है। Malloc इंद्रधनुष। आ जाओ। तो अब हम अपने आप से पूछना है एल्गोरिदम हम 55 डाल सकते हैं। इसलिए हम सभी को पता है, जाहिर है, जहां वह शायद हम कोशिश कर रहे हैं अंतर्गत आता है इस हल को रखने के लिए और आप लोग एक ले सकता है वापस कदम तो हम गिर नहीं है मंच है, यह बहुत अच्छा होगा। तो वास्तव में, इंद्रधनुष, यहाँ मेरे साथ शुरू से अधिक, क्योंकि हम अब कर सकते हैं कंप्यूटर के रूप में एक बार में केवल एक चर देखते हैं। इस दिशा में पहला नोड है तो अगर। , वह एक नोड नहीं की नोटिस वह सिर्फ एक सूचक है वह होना करने के लिए तैयार है और यही वजह है कि एक सूचक का केवल आकार, नहीं उन पूर्ण आयतों में से एक। इसलिए हम प्रत्येक पर जाँच करने के लिए जा रहे हैं चलना 9 55 से कम है? नहीं। 17 से 55 कम है? नहीं। 22 से कम है? 26 से कम है? 34 से कम है? और अब तो, जाहिर है इंद्रधनुष के अंत में आता है। तो स्पष्ट हो जाएगा, और क्या करने के लिए अपना नाम, टेलर था? टेलर: टेलर। डेविड मालन: टेलर के बीच इतना बाएं हाथ और यहां इंद्रधनुष के हाथ, जिनके हाथ में क्या पर बात करने की जरूरत है इस सूची में 55 सम्मिलित करने का आदेश? हमें क्या करना होगा? हाँ? दर्शकों: टेलर के हाथ बाईं बात करने के लिए की जरूरत है। डेविड मालन: बिल्कुल। तो एक नोड डालने सूची के अंत में बहुत आसान है क्योंकि टेलर सिर्फ जमीन के बजाय, बात करने के लिए है या हम, अशक्त यह फोन करता हूँ अशक्त अनुपस्थिति की तरह है एक सूचक या एक विशेष की शून्य सूचक, आप कर रहे हैं अपने वाम दलों के साथ बात करने के लिए जा रहा हाथ इंद्रधनुष और उसके बाद इंद्रधनुष पर, जहां अपने बाएँ चाहिए हाथ शायद बिंदु? नीचे। उसके हाथ तरह है, तो यह अच्छी बात नहीं है यहाँ या तरह के किसी भी बंद इशारा करते हुए की किस ओर। यही कारण है कि विचार किया जाएगा एक कचरा मूल्य, लेकिन वह करने के लिए अंक यदि कुछ ज्ञात मूल्य, हम करेंगे शून्य या शून्य इसे कहते हैं, यह ठीक है हम इस में एक शब्द है, क्योंकि और हम सूची अब पूरा हो गया है। तो क्या एक और है अपेक्षाकृत सरल मामला? हम 5 malloc सकते हैं? आ जाओ। आपका नाम क्या है? टिफ़नी: टिफ़नी। डेविड मालन: मैं माफी चाहता हूँ? टिफ़नी: टिफ़नी। डेविड मालन: टिफ़नी। ठीक है। टिफ़नी malloced कर दिया गया है मूल्य 5 के साथ। आ जाओ। यह एक भी अपेक्षाकृत आसान है, लेकिन चलो अब कार्रवाई के आदेश पर विचार करते हैं। यह बहुत आसान था अंत में टेलर के साथ। संख्या 5, बेशक कम से कम 9 की है और इसलिए हम, हम टिफ़नी है, डेविड है और आपका नाम क्या था? जेक: जेक। डेविड मालन: जेक। टिफ़नी, जेक, और डेविड। किसका हाथ पहले अद्यतन किया जाना चाहिए? क्या तुम यहाँ क्या करना चाहते हैं? एक जोड़े संभव तरीके से नहीं है, लेकिन एक या एक से अधिक गलत तरीके भी नहीं है। दर्शकों: बाएँ तरफ से शुरू करें। डेविड मालन: बाएँ तरफ से शुरू करें। कौन तो यहाँ सबसे बाएँ है? दर्शकों: पहले। डेविड मालन: ठीक है। तो पहले से शुरू है और आप जहां करना दाऊद का हाथ होने का अद्यतन करना चाहते हैं? दर्शकों: 5 की ओर। डेविड मालन: ठीक है। पांच पर तब दाऊद, बिंदु या टिफ़नी यहाँ है, और अब? दर्शकों: टिफ़नी से 9 अंक? डेविड मालन: बिल्कुल सही, Binky के सिवाय सिर बस की तरह है, ठीक से गिर गया? साथ क्या गलत है क्योंकि सचमुच इस तस्वीर? दर्शकों: सिर्फ इशारा कर रहा है। डेविड मालन: कुछ भी नहीं है अब जेक की ओर इशारा करते। हम सचमुच 9 अनाथ कर दिया है और 17, और हम सचमुच है , इस स्मृति के सभी लीक से क्योंकि पहले दाऊद के हाथ को अद्यतन करने, वह है, इसे सही ढंग से है insofar के रूप में ठीक अब टिफ़नी तरफ इशारा करते हुए, लेकिन कोई नहीं था, अगर जेक पर बात करने के लिए दूरदर्शिता, फिर हम खो दिया है उस सूची की सम्पूर्णता। तो चलो पूर्ववत करते हैं। तो यह है कि एक अच्छी बात करने के लिए गया था, पर यात्रा लेकिन अब सही करते हैं। क्या हम पहले के बजाय क्या करना चाहिए? हाँ? दर्शकों: टिफ़नी 9 में बात करनी चाहिए? डेविड मालन: मैं नहीं कर सकता आपको लगता है कि बंद मिलता है। 9 में कौन बात करनी चाहिए? दर्शकों: टिफ़नी। डेविड मालन: ठीक है। तो टिफ़नी 9 में पहली बात करनी चाहिए। तो टिफ़नी लेना चाहिए एक समान मूल्य पर दाऊद के पास, जो लगता है एक पल के लिए बेमानी, लेकिन लगता है कि दूसरा, क्योंकि अब ठीक है कदम है, हम दाऊद के हाथ अद्यतन कर सकते हैं टिफ़नी पर, और फिर यदि बात करने के लिए हम बस की तरह चीजों को साफ अप इस वसंत की तरह की तरह है, मानो अब जब कि एक सही प्रविष्टि है। तो बहुत बढ़िया है। तो अब हम लगभग वहाँ रहे हैं। की एक अंतिम सम्मिलित करते हैं मूल्य 20 की तरह मूल्य। हम एक अंतिम स्वयंसेवक malloc सकता है? आ जाओ। तो यह एक छोटे से अधिक मुश्किल है। लेकिन वास्तव में, कोड हम कर रहे हैं लेखन, मौखिक रूप से ही सही, सिर्फ एक गुच्छा होने की तरह है की अब स्थिति, सही है? हम एक शर्त थी यह अंतर्गत आता है, तो जाँच अंत में, हो सकता है शुरुआत में। हम पाश किसी तरह का करने की जरूरत है बीच में जगह मिल। तो चलो आपके नाम क्या है के साथ ऐसा करते? एरिक: एरिक। डेविड मालन: एरिक? एरिक। आपसे मिलना अच्छा रहा। इसलिए हम 20 है। पांच से कम है? नहीं। नौ से कम है? नहीं। 17 से कम है? नहीं। ठीक। उन्होंने कहा कि यहां अंतर्गत आता है और अपना नाम फिर से कर रहे हैं? मुकदमा: मुकदमा। डेविड मालन: मुकदमा। एलेक्स: एलेक्स। डेविड मालन: मुकदमा, एलेक्स, और? एरिक: एरिक। डेविड मालन: एरिक। जिनके हाथों में पहली अद्यतन करने की जरूरत है? दर्शकों: एरिक। ठीक। तो एरिक है जहां पर बात करनी चाहिए? 22 पर। अच्छा। और अब आगे क्या है? मुकदमा तो एरिक पर बात कर सकते हैं और अब, अगर तुम लोग सिर्फ ठीक है, जो कुछ जगह बनाने नेत्रहीन, अब हम सम्मिलन किया है। तो चलो अब एक सवाल पर विचार करते हैं, लेकिन हमारे स्वयंसेवकों के लिए बहुत बहुत धन्यवाद। बहुत अच्छा किया। अगर आप की तरह आप उन रख सकते हैं। और हम एक सुंदर बिदाई उपहार यदि है आप प्रत्येक एक तनाव गेंद लेने के लिए चाहते हैं। मुझे सिर्फ यह नीचे से गुजरती हैं। तो यह की उपलब्धि क्या है? यह अद्भुत प्रतीत हो रहा है अब हम insofar के रूप में एक के लिए एक विकल्प पेश किया इतने तक ही सीमित नहीं है कि सरणी कुछ निश्चित आकार की एक सरणी के लिए। वे गतिशील विकसित कर सकते हैं। लेकिन हम जैसे बहुत हफ्तों में देखा है अतीत में, हम, मुक्त करने के लिए कुछ भी कभी नहीं मिलता की तरह निश्चित रूप से यहाँ एक व्यापार बंद है। एक लिंक्ड की तेजी के साथ तो सूची, यह गतिशीलता है? इस क्षमता, स्पष्ट रूप से विकसित करने के लिए हम डिलीट किया जा सकता है जरूरत के रूप में है और हम सिकुड़ सकता है। हम क्या कीमत चुका रहे हैं? दो बार सब से पहले ज्यादा जगह के रूप में। आप चित्र को देखो, अब और नहीं हूँ मैं पूर्णांकों की एक सूची भंडारण। मैं की एक सूची संग्रहीत कर रहा हूँ पूर्णांकों प्लस संकेत दिए। इसलिए मैं अंतरिक्ष की राशि को दोगुना कर रहा हूँ। अब, हो सकता है कि इस तरह की नहीं है एक बड़ा सौदा 4 बाइट्स, 8 बाइट्स, लेकिन यह निश्चित रूप से जोड़ सकता है बड़े डेटा सेट के लिए ऊपर। एक अन्य पहलू यह क्या है? हाँ? दर्शकों: हम करने के लिए है उन्हें एक-एक करके पार। डेविड मालन: हाँ। हम उन्हें एक-एक करके पार करने के लिए है। आप हम इस सुपर छोड़ दिया पता है क्या, वर्ग कोष्ठक की सुविधाजनक सुविधा संकेतन, अधिक ठीक रैंडम एक्सेस के रूप में जाना जाता है, हम सिर्फ कूद कर सकते हैं जहां एक व्यक्ति के तत्व को लेकिन अब मैं अभी भी था कि अगर यहाँ अपने स्वयंसेवकों, मैं खोज करना चाहता था, तो 22 नंबर, मैं अभी नहीं कर सकता ब्रैकेट कुछ कुछ करने के लिए कूद। मैं बहुत, सूची पर देखने के लिए है रैखिक हमारे खोज उदाहरण की तरह है, 22 नंबर खोजने के लिए। इसलिए हम वहाँ एक कीमत चुकानी पड़ी है लगता है। लेकिन हम फिर भी कर सकते हैं अन्य समस्याओं का समाधान। वास्तव में, मुझे परिचय दृश्यों का सिर्फ एक जोड़े। आप नीचे करने के लिए किया गया है तो मैथर के डायनिंग हॉल हाल ही में, आपको लगता है कि याद करेंगे उनके इस तरह की ट्रे के ढेर, हम से इन उधार कक्षा से पहले Annenberg। तो ट्रे के इस ढेर, हालांकि, प्रतिनिधि वास्तव में है एक कंप्यूटर विज्ञान डेटा संरचना की। एक आंकड़ा संरचना है कंप्यूटर विज्ञान में एक ढेर के रूप में जाना जाता है, जो बहुत अच्छी तरह से वास्तव में इस दृश्य को उधार देता है। इन ट्रे में से प्रत्येक के एक नहीं है तो अगर ट्रे लेकिन एक नंबर की तरह है और मैं चाहता था नंबर स्टोर करने के लिए, मैं यहां एक नीचे डाल सकता है, और मुझे लगता है, यहाँ एक और नीचे डाल सकता है और संख्या स्टैकिंग जारी रखने के लिए एक-दूसरे को, और क्या है के शीर्ष पर इस बारे में संभावित मददगार क्या निहितार्थ है कि है इस डेटा संरचना की? मैं बाहर खींच सकते हैं जो संख्या पहले सबसे सुविधाजनक? वहाँ पर सबसे हाल ही में एक डाल दिया। तो यह है कि हम में क्या कहेंगे है कंप्यूटर विज्ञान एक LIFO डेटा संरचना। अंतिम अंदर प्रथम बाहर। और हम लंबे समय क्यों पहले देखेंगे कि, अब उपयोगी है, लेकिन के लिए हो सकता है सिर्फ संपत्ति पर विचार करें। अगर आपको लगता है और यह एक तरह से बेवकूफ है डायनिंग हॉल यह कैसे करता है के बारे में। हर बार जब वे स्वच्छ और ट्रे शीर्ष पर ताज़ी लोगों को डाल दिया, आप एक पहले से साफ हो सकता था लेकिन अंत में बहुत ही गंदा और धूल भरी बहुत नीचे ट्रे अगर आप वास्तव में कभी नहीं कि की तह तक जाना ढेर, क्योंकि आप सिर्फ नई डाल रखने और यह की चोटी पर साफ वाले। एक ही बात हो सकता है एक सुपरमार्केट में भी। आप एक प्रदर्शन मामला है दूध और हर बार सीवीएस की या अधिक दूध हो जाता है कि जो कोई भी, तुम सिर्फ दूध भगाओ आप पहले से ही वापस करने के लिए है और आप सामने नए डाल आप कुछ बहुत बुरा होगा जा रहे हैं डेटा संरचना के अंत में दूध, यह नीचे में हमेशा है, क्योंकि या यों यह पीठ में हमेशा है। लेकिन के बारे में सोचने के लिए एक और रास्ता नहीं है डेटा और उदाहरण के लिए, यह ऊपर की परत। आप उन लोगों में से एक रहे हैं कौन पसंद करता है एप्पल स्टोर के बाहर अप लाइन के लिए जब एक नया उत्पाद आता है बाहर है, तो आप शायद रहे हैं एक ढेर डेटा का उपयोग नहीं संरचना आप क्योंकि बाकी सब कौन है कट जाएगा ऊपर की परत को कुछ नया खिलौना खरीदने के लिए। बल्कि, आप शायद का उपयोग कर रहे हैं डेटा संरचना किस तरह का सिस्टम की या किस तरह असली दुनिया में? उम्मीद है कि यह एक लाइन है, या अधिक ठीक है या अधिक ब्रिटिश की तरह, एक कतार। और यह एक कतार भी एक है पता चला है कंप्यूटर विज्ञान के क्षेत्र में डेटा संरचना, लेकिन एक कतार एक बहुत है विभिन्न संपत्ति। यह LIFO नहीं है। अंतिम अंदर प्रथम बाहर। भगवान न करे। यह बजाय फीफो है। पहला अंदर पहला बाहर। और वह एक अच्छी बात है निष्पक्षता के कारण निश्चित रूप से जब आप अस्तर रहे हैं सुबह में सुपर जल्दी। आप, आप पहली बार वहाँ मिलता है पहले के रूप में अच्छी तरह से बाहर निकलना चाहते हैं। और तो इन आंकड़ों के सभी संरचनाओं, कतार और ढेर और दूसरों के गुच्छों, आप पता चला है इस रूप में सिर्फ एक सरणी के बारे में सोच सकते हैं। यह हो सकता है, एक सरणी है एक निश्चित आकार 4, लेकिन यह चाहते हैं हम सिर्फ ढेर कर सकता है अगर एक तरह से अच्छा होगा ट्रे लगभग असीम लंबा अगर हम कि कई ट्रे या संख्या है। इसलिए हो सकता है कि हम करना चाहते हैं यहां एक लिंक सूची का उपयोग करें, लेकिन व्यापार बंद होने जा रहा है संभवतः हम और अधिक स्मृति की जरूरत है कि, एक छोटे से अधिक समय लगता है, लेकिन हम ढेर की ऊंचाई की सीमा नहीं है, ज्यादा मैथर के प्रदर्शन के मामले की तरह ढेर के आकार को सीमित कर सकता है, और इसलिए इन डिजाइन निर्णय या कर रहे हैं अंतत: हमारे पास उपलब्ध विकल्प। इन आंकड़ों के साथ तो संरचनाओं, हम शुरू कर दिया है संभावित नए ऊपरी सीमा को देखकर क्या पर पहले से सुपर फास्ट था और हम छोड़ देंगे जहां आज बंद है और जहां हम करने के लिए प्राप्त करने की आशा करता हूँ बुधवार को है, हम करेंगे एक डेटा को देखने के लिए शुरू हमें खोज करने देता है कि संरचना लॉग अंत समय में डेटा के माध्यम से फिर से। और हम सप्ताह शून्य में याद करते हैं, देखा कि द्विआधारी खोज या डिवाइड के साथ और एक और जीत। यह अभी तक वापस और बेहतर आ रहा है इस बुधवार के लिए होली ग्रेल साथ आने के लिए किया जाएगा सही मायने में चलाता है कि डेटा संरचना या सैद्धांतिक रूप में लगातार समय, जिससे यह कितने फर्क नहीं पड़ता लाखों या चीजों के अरबों हम डेटा संरचना में है, यह होगा हमें निरंतर समय लगेगा, शायद एक कदम या दो कदम या 10 कदम, लेकिन कदम की लगातार संख्या कि डेटा संरचना के माध्यम से खोज करने के लिए। यही कारण है कि वास्तव में होली ग्रेल होगी लेकिन बुधवार को उस पर और अधिक। तो फिर मिलेंगे। [संगीत बजाना]