[संगीत खेल] डेविड जे मालन: सब ठीक है. [हंसी] वापस स्वागत है. इस CS50 है. और इस सप्ताह पांच के अंत. और अब तक, हम बहुत ज्यादा है प्रदान के लिए ले जा रहा है कि वहां आप कर चुके हैं, इस संकलक, बजना मौजूद इस के माध्यम से लागू किया गया कहा जाता है अन्य उपकरण बनाने कि किसी भी तरह जादुई अपने स्रोत कोड धर्मान्तरित वस्तु कोड में, शून्य और लोगों कि आपके कंप्यूटर सीपीयू, केंद्रीय प्रोसेसिंग यूनिट, वास्तव में समझता है. लेकिन यह है कि एक नंबर है पता चला है में हुड के नीचे चल रहा इनपुट और आउटपुट के बीच. और मुझे लगता है हम मांस कि प्रस्ताव करने के लिए करना चाहते हैं थोड़ा और विस्तार में में है कि बाहर इन चार चरणों, कुछ कहा जाता है पूर्व प्रसंस्करण, कुछ हमने देखा है, जो संकलन बुलाया कोडांतरण बुलाया कुछ और लिंक में कुछ कहा. तो अब तक, हमारे में से कुछ में कार्यक्रम, हम तेज शामिल पड़ा है. हाल ही में हम कुछ तेज लिया है स्थिरांक के लिए परिभाषित करता है. तो यह पता चला है कि उन चीजों है कि हैश प्रतीक या लगी होती हैं पाउंड प्रतीक पूर्व प्रोसेसर हैं निर्देशों. बस यही बात है कहने का सिर्फ एक अच्छा तरीका है वास्तव में है कि कोड की एक पंक्ति पहले कुछ और ही में परिवर्तित कंप्यूटर भी बदलने की कोशिश अपने शून्य और लोगों में कार्यक्रम. उदाहरण के लिए, तेज मानक शामिल मैं / हे. घंटे, बहुत ज्यादा सिर्फ जाने का मतलब आगे, फ़ाइलों की सामग्री हड़पने stdio.h और उन्हें वहीं पेस्ट करें. तो शून्य और लोगों नहीं अभी तक उस बिंदु पर. यह वास्तव में सिर्फ एक प्रतिस्थापन है. और कहा कि तथाकथित दौरान किया है पूर्व प्रसंस्करण मंच, जब आप वास्तव में विशेष रूप से बजना चलाने या ज्यादातर मामलों में बनाओ. तो यह सब क्या हो रहा है पहला स्वचालित रूप से इस प्रकार अब तक. तब संकलन कदम आता है. लेकिन हम oversimplified किया गया है संकलन. एक कार्यक्रम संकलन सच का मतलब सी की तरह कुछ से ले स्रोत कोड हम नीचे, लिख रहा हूँ कुछ करने के लिए विधानसभा का आह्वान किया. विधानसभा भाषा एक कम स्तर है भाषा कि, शुक्र है, हम नहीं करेंगे करने के लिए बहुत अवसर है इस सेमेस्टर में लिखें. लेकिन यह सबसे कम स्तर पर है आप सचमुच लेखन शुरू कि भावना जोड़ना और घटाना और गुणा और लोड , स्मृति से और स्मृति को बचाने बहुत बुनियादी निर्देश है कि एक कंप्यूटर, हुड के नीचे, वास्तव में समझता है. अन्त में, संयोजन है कि भाषा लेता है हम किया गया है कि शून्य और लोगों को इस प्रकार अब तक का वर्णन. और सही मायने में अन्त में, तथाकथित वहाँ जोड़ने चरण, जो हम करेंगे बस एक पल में देखते हैं, जो जोड़ती है अपने शून्य और शून्य के साथ लोगों और लोगों को अन्य लोगों से पहले आपने बनाया है. तो यह सुपर सरल कार्यक्रम पर विचार करें. यह सप्ताह 1 से था. यह सिर्फ नमस्ते विश्व, ने कहा, स्क्रीन पर. हम बजना के माध्यम से इस भाग गया. या हम बनाने के माध्यम से भाग गया जो बजना भाग गया. और समय पर outputted जहां कुछ शून्य और लोगों. लेकिन यह वहाँ है पता चला है एक मध्यवर्ती कदम. मैं यहाँ पर जाना है - ओह, नहीं किया अभी तक उसे देखना चाहते हैं. मैं अपने उपकरण के लिए यहाँ जाओ और मैं यहाँ, hello.c ऊपर खुला कि एक ही कार्यक्रम है. और क्या मैं अपने टर्मिनल में क्या करने जा रहा हूँ यहां खिड़की मैं जा रहा हूँ , बजना चलाने के बजाय जो करना के सभी चार automates हमारे लिए उन कदमों. और मैं बजना एस क्या करने जा रहा हूँ फिर hello.c और तब दर्ज करें. और मैं एक निमिष शीघ्र मिल फिर, जो अच्छा है. और अब एक थोड़ा बड़ा खिड़की में, मैं यहां जीएडिट को खोलने के लिए जा रहा हूँ. और मुझे लगता है, कि एक फ़ाइल को खोलने के लिए जा रहा हूँ पता चला है, इस hello.s कहा जाता है कि विधानसभा भाषा है जैसा कि मैंने पहले भेजा. और इस विधानसभा कहा जाता है क्या है भाषा, काफी कम स्तर निर्देश है कि अपने इंटेल सीपीयू या यह कि अंदर जो कुछ भी है समझता है. और MOV कदम के लिए है. कॉल के लिए है एक बहुत ही निम्न स्तर समारोह बुला. उप घटाना के लिए है. तो आप के अंदर एक विशेष सीपीयू है जब आपके कंप्यूटर की, क्या यह बनाता है पर अलग, बनाम अन्य CPUs बाजार है, जो निर्देश यह समझता है और अक्सर कैसे कुशल यह यह कुछ क्रियान्वित करने में है, कितनी तेजी से है उन निर्देशों का. अब इस पर और अधिक के लिए, आप ले सकते हैं कॉलेज में अगले गिरावट CS61. लेकिन यहाँ हम हैं, उदाहरण के लिए, कुछ परिचित लग सकता है कि पहचानकर्ता. hello.c कार्यक्रम का नाम है. . पाठ - ब्याज की बहुत वहाँ नहीं है बस अब, याद है कि पाठ खंड, सोमवार के रूप में, जहां में है स्मृति अपने कार्यक्रम वास्तव में समाप्त होता है. तो यह है कि कम से कम थोड़ा है वहाँ परिचित. इधर, ज़ाहिर है, एक उल्लेख है हमारा मुख्य समारोह का. नीचे स्क्रॉल, इन बातों का उल्लेख कर कहा जाता रजिस्टरों का बहुत छोटा सा हिस्सा अपने वास्तविक CPU के अंदर स्मृति. और मैं नीचे स्क्रॉल यदि भी इसके अलावा, मैं किसी प्रकार देखते हैं ASCII का अप्रत्यक्ष उल्लेख. और वहाँ है, वास्तव में, कि स्ट्रिंग है, हैलो, अल्पविराम, दुनिया. तो लंबी कहानी को कम, यह कर दिया गया है आप के लिए हो रहा है, स्वचालित रूप से, हुड इस समय के सभी नीचे. और क्या हो रहा है वास्तव में एक बार होता है आप बजना, या जिस तरह के द्वारा भाग लिया , आप पहली बार हो रही है, बनाएं स्रोत कोड से, विधानसभा भाषा तथाकथित. फिर बजना इस विधानसभा में परिवर्तित होता है शून्य और लोगों को नीचे भाषा. और यह हम शुरू कर दिया है कि स्लाइड है पर वीक 0 में हमारी चर्चा - और फिर सप्ताह 1 पर. और फिर अंत में, उन शून्य और लोगों शून्य और लोगों के साथ संयुक्त कर रहे हैं उन पुस्तकालयों से हम ले जा रहा हूँ मानक मैं / हे या पसंद के लिए दी यहां तक ​​कि स्ट्रिंग पुस्तकालय या CS50 पुस्तकालय. इसलिए अधिक इस तस्वीर रंग नेत्रहीन, हम hello.c है. और यह, ज़ाहिर है, printf का उपयोग करता है दुनिया हैलो कहने के लिए कार्य करते हैं. संकलन कदम के लिए इसे नीचे ले जाता है उस फ़ाइल हम अभी भी, hello.s देखा कि आम तौर पर नष्ट कर दिया है, हालांकि स्वचालित रूप से आप के लिए. लेकिन यह है कि विधानसभा कोड है मध्य चरण में. और फिर हम विधानसभा इकट्ठा जब जब आप इतनी बात करने के लिए भाषा,, कि उन शून्य और लोगों को मिलता है. इसलिए हम पर आज प्रभावी रूप में तेजी से बढ़ी दिया है हम के लिए दी ले जा रहा हूँ, जा स्रोत कोड का मतलब कोड आपत्ति की. लेकिन अंत में, अब है कि एक ही चित्र - के लिए इस पर धक्का देना बाएं हाथ की ओर. और वहाँ शीर्ष में ध्यान दें कि मैं stdio.h उल्लेख किया है. यही कारण है कि हम शामिल कर दी है कि एक फ़ाइल है के लगभग सभी में हम लिखा है कार्यक्रम. और कहा कि जिनकी सामग्री फ़ाइल है प्रतिलिपि चिपकाया मिलता, प्रभावी ढंग से अपने कोड के ऊपर. लेकिन यह पता चला है कि एक कंप्यूटर पर सिस्टम कहीं, शायद वहाँ एक किसी साल लिखा था कि stdio.c फ़ाइल पहले उस के सभी लागू घोषित किया गया है कि कार्य करता है stdio.h में. अब हकीकत में उस पर शायद नहीं है अपने मैक या अपने पीसी या भी में CS50 उपकरण एक कच्ची सी कोड है. किसी ने पहले से ही यह संकलित और शामिल वस्तु कोड के लिए. ओ फ़ाइल या. एक एक साझा पुस्तकालय को संदर्भित करता है जो फ़ाइल, कि पहले से स्थापित किया गया है आप के लिए पूर्व संकलित. लेकिन वास्तव में वहां मौजूद लगता है कि समानांतर में हमारे कंप्यूटर stdio.c पर बजना के साथ. अपने कोड की संकलित किया जा रहा है और इकट्ठे. stdio.c के कोड संकलित किया जा रहा है इकट्ठे, इतना है कि यह बहुत पिछले यहाँ नीचे, कदम, हम किसी भी तरह के लिए है अपने शून्य और लोगों, इतनी बात करने के लिए लिंक एक में अपने या अपने शून्य और लोगों के साथ अंततः है कि साधारण प्रोग्राम नमस्ते बस बुलाया. तो है कि वह जादू के सभी है इस प्रकार अब तक हो गया. और इन लेने के लिए जारी रहेगा दी, लेकिन एहसास के लिए प्रक्रियाओं रसदार विवरण का एक बहुत कुछ है नीचे वहाँ पर जा रहा है. और यह क्या करता है आपके अंदर इंटेल के साथ कंप्यूटर विशेष रूप से अलग. तो उस पर ध्यान दें, यदि आप करना चाहते हैं इस शुक्रवार दोपहर के भोजन के लिए हमारे साथ, जाते हो हमेशा की जगह cs50.net/rsvp को, 13:15 इस शुक्रवार. और अब कुछ घोषणाओं. इसलिए हम कुछ अच्छी खबर है. और हम कुछ बुरी खबर है. यहाँ कुछ अच्छी खबर के साथ शुरू. [कराहना] ठीक है. खैर, यह तकनीकी रूप से एक छुट्टी है, इसलिए यह इतना हम से एक उपहार नहीं है. लेकिन तब निश्चित रूप से बुरी खबर. [कराहना] मैं समय की एक बहुत खर्च इन एनिमेशन पर. [हंसी] एक समीक्षा सत्र होगा इस सोमवार आ रहा है. यह 5:30 पर होने जा रहा है. हम इन सभी विवरण की याद दिलाएगा पाठ्यक्रम के बारे में ईमेल के माध्यम से दिन के समय के एक जोड़े में एक वेबसाइट. इसे फिल्माया और उपलब्ध कराया जाएगा उसके बाद शीघ्र ही. आप नहीं कर सकते तो अगर है कि सोमवार रात स्लॉट, चिंता मत करो. धारा यह आने वाले सप्ताह भी प्रश्नोत्तरी के लिए समीक्षा पर ध्यान केंद्रित. अपने अनुभाग है जो सोमवार, पर है वास्तव में विश्वविद्यालय छुट्टी, हम करेंगे अभी अनुभाग में मिलेंगे. आप बस कि नहीं कर सकते अनुभाग आप जा रहे हैं, क्योंकि दूर, वह ठीक है. एक रविवार या मंगलवार खंड या भाग लें धुन में है जो जेसन अनुभाग, करने के लिए उपलब्ध ऑनलाइन. तो, अधिक बुरी खबर है. तो सिलेबस के अनुसार, हम अगले शुक्रवार व्याख्यान है. लेकिन अच्छी खबर यह है - स्पष्ट रूप से, मैं इस पर बहुत अधिक समय बिताया. [हंसी] हम अगले शुक्रवार के व्याख्यान को रद्द कर देंगे. तो यह हमारे लिए एक उपहार हो, तो करेंगे आप वास्तव में एक अच्छा राहत हो सकता है इस सप्ताह और इसलिए दो सप्ताह के बीच. तो कोई व्याख्यान अगले सप्ताह, सिर्फ एक छोटे से आप होना चाहिए जिसके लिए थोड़ा प्रश्नोत्तरी, तेजी से उत्तेजित हो रही. तो चलो अब हमारे ध्यान में बारी वास्तव में ज्यादा दृश्य है कि कुछ और अधिक रोमांचक और मंच तैयार के लिए क्या क्षितिज पर होने जा रहा है सप्ताह का समय के सिर्फ एक जोड़ी में. पहली प्रश्नोत्तरी के बाद, हम बदल देंगे हमारी समस्या का ध्यान केंद्रित एक और सेट डोमेन विशिष्ट समस्या यह है कि के फोरेंसिक या सुरक्षा अधिक आम तौर पर. वास्तव में, इस समस्या के साथ परंपरा सेट मेरे लिए में से एक है भर में चलने के लिए शिक्षण साथी या सीए की कुछ तस्वीरें लेने परिसर पहचान योग्य लेकिन गैर स्पष्ट लोग, स्थानों, या चीजें, तो हर साल मैं किसी भी तरह गलती से नष्ट करने के लिए प्रबंधित या भ्रष्ट डिजिटल मीडिया कार्ड कि हमारे कैमरे के अंदर है. लेकिन कोई बड़ी बात नहीं. मुझे आगे जाना है और प्लग कर सकते हैं कि मेरे कंप्यूटर में. मैं इसके बारे में एक फोरेंसिक छवि बना है, तो कर सकते हैं शून्य को कॉपी करके, बोलने और करने के लिए कि स्मृति कार्ड के बंद लोगों को, चाहे इसकी एक एसडी कार्ड या कॉम्पैक्ट फ़्लैश कार्ड या आप से परिचित हो जो भी हो. और फिर हम कि बाहर हाथ कर सकते हैं. और तो अन्य के बीच आगे चुनौती बातें आप के लिए, लिखने के लिए किया जाएगा एक पूरी गुच्छा के ठीक हो जाए कि सी कोड मुझे और पता चला के लिए jpegs हो जाएगा उन लोगों, स्थानों, या बातें. और हम भी इस समस्या में, बात करेंगे के बारे में, सेट और दिन में आने के लिए अधिक आम तौर पर ग्राफिक्स. हम एक कोर्स उन का उपयोग किया है, के लिए बाहर तोड़. लेकिन आप की तरह प्रदान के लिए लिया गया है इन उच्च स्तर धारणाओं वहां मौजूद आयतों और अंडाकार की. लेकिन हुड के नीचे पिक्सल कर रहे हैं. और तुम शुरू करना पड़ा है उन के बारे में सोच रही है. या फिर आप पी सेट 4 सोचना होगा के लिए अपने ईंटों के बीच खाई के बारे में कैसे जल्दी आप गेंद पर चल रहा है कर रहे हैं बाहर तोड़ने के लिए स्क्रीन. तो इस धारणा है कि अपनी स्क्रीन पर डॉट्स है पहले से ही खेलने में आते हैं. अब आप क्या देखते हैं, हालांकि, है क्या आप एक कंप्यूटर स्क्रीन पर मिलता है. क्या तुमने कभी कुछ अच्छा या देख चुके है बुरा टीवी, बाधाओं वे बहुत ज्यादा हैं technophobes की तरह दर्शकों का इलाज जो वास्तव में नहीं है कंप्यूटिंग के बारे में ज्यादा पता है. और तो यह पुलिस के लिए बहुत आसान है कहने के लिए जासूसी, आप कर सकते हैं कि मेरे लिए साफ? या सही, बढ़ाने? बढ़ाएँ चर्चा शब्द में तरह है सबसे अधिक किसी भी अपराध से संबंधित शो. आप एक बहुत ले और अगर वास्तविकता है कर एक संदिग्ध की धुँधली तस्वीर कुछ बुरा, तुम नहीं कर सकते बस यह वृद्धि. तुम असीम में ज़ूम नहीं कर सकते हैं. आप किसी की की चमक में नहीं देख सकते हैं कि प्रतिबद्ध है जो आंख बावजूद विशेष अपराध, टीवी पर इस का प्रसार. और तो उस के साथ है कि प्रेरित करते हैं पर एक झलक के साथ सेट आगामी समस्या कुछ पता चलता है जो आप के साथ परिचित हो सकता है. [वीडियो प्लेबैक] ठीक है. अब, आप में एक अच्छे लग जाओ. यह पकड़ो. कि पीछे. एक मिनट रुको. सही जाओ. वहाँ. कि रुक. पूर्ण स्क्रीन. ठीक है. कि रुक. फिर, उस पर देंगे कसो? उस आदमी पर वेक्टर में वापस पहिया द्वारा. यहीं इस मौके पर में ज़ूम. साथ सही उपकरण, imaged बढ़े और बढ़ाई जा सकती है. क्या है? यह एक वृद्धि कार्यक्रम है. कर सकते हैं आप स्पष्ट है कि किसी भी ऊपर? मैं नहीं जानता. चलो यह बढ़ाने चलो. खंड ए 6 बढ़ाएँ. मैं विस्तार बढ़ाया और - मैं बढ़ाने के लिए पर्याप्त लगता है कि वहाँ. अपनी स्क्रीन के लिए जारी. उसकी आंख में प्रतिबिंब-बढ़ाएँ. के माध्यम से इस रन दो. वीडियो वृद्धि. -एडगर, आप इस वृद्धि कर सकते हैं? रुको पर. -'Ve इस प्रतिबिंब पर काम कर रहा. -किसी का प्रतिबिंब. प्रतिबिंब. वहाँ एक प्रतिबिंब है आदमी के चेहरे की. प्रतिबिंब. वहाँ एक प्रतिबिंब है. दर्पण पर में ज़ूम. तुम एक प्रतिबिंब देख सकते हैं. कर सकते हैं आप यहाँ से छवि को बढ़ाने? कर सकते हैं आप यहीं उसे बढ़ाने? कर सकते हैं आप इसे बढ़ाने? कर सकते हैं आप इसे बढ़ाने? -क्या हम इस में वृद्धि? कर सकते हैं आप इसे बढ़ाने? पकड़ो एक दूसरे पर, मैं बढ़ाने करेंगे. दरवाजे पर में ज़ूम. -X10. ज़ूम. [हंसी] अंदर ले जाएँ बंद करो, रुको. बंद करो. यह ठहराव. चारों ओर एक 75 डिग्री घुमाने खड़ी करें. [हंसी] बंद करो, और वापस भाग को फिर दरवाजे के बारे में. एक छवि बढ़ाने मिला कि बिटमैप कर सकते हैं? शायद हम प्रदीप सेन का उपयोग कर सकते हैं खिड़कियों में देखने के लिए विधि. -यह सॉफ्टवेयर कला का राज्य है. आइकन मूल्य बंद है. सही संयोजन के साथ एल्गोरिदम की. -वह करने के लिए रोशनी एल्गोरिदम ले लिया है अगले स्तर और मैं उन्हें इस्तेमाल कर सकते हैं इस तस्वीर में वृद्धि. पर ताला और z-अक्ष बढ़ाना. -बढ़ाएँ. -बढ़ाएँ. -बढ़ाएँ. रुक और बढ़ाने के लिए. [अंत वीडियो प्लेबैक] डेविड जे मालन: तो समस्या सेट 5 वहाँ क्या आगे झूठ है. तो हम जल्द ही एक बेहतर समझ मिल जाएगा की कब और क्यों आप कर सकते हैं और हमारे रास्ते में है कि वृद्धि नहीं कर सकते हैं. लेकिन पहले, चलो हमारे ध्यान में वापसी हम हूँ इमारत ब्लॉकों में से कुछ को उस कहानी को बताने में सक्षम होने की जरूरत है. तो हम पर इस तस्वीर को आकर्षित किया है कि याद सोमवार और एक छोटा सा पिछले सप्ताह. और यह चीजों के लेआउट का वर्णन आपके कंप्यूटर की मेमोरी में जब कुछ प्रोग्राम चल रहा है. तकनीक खंड ऊपर शीर्ष, याद है, संदर्भित करता है वास्तविक शून्य और लोगों को कि अपने कार्यक्रम की रचना करते हैं. वहाँ, कि नीचे, चलो कुछ initialized या uninitialized डेटा, जो आम तौर पर स्थिरांक की तरह बातें करने के लिए संदर्भित करता है या तार या है कि वैश्विक चर अग्रिम में घोषित किया गया. वहाँ ढेर है, लेकिन हम आऊँगा एक बिट में है कि करने के लिए वापस. और फिर ढेर नहीं है. में ट्रे का एक ढेर की तरह ज्यादा स्मृति हो जाता है, जहां कैफेटेरिया, यह है बहुस्तरीय और जब भी स्तरित आप एक कार्यक्रम में क्या करते हैं? के लिए ढेर उपयोग क्या है? हाँ? समारोह के लिए बुलाया गया. आप एक समारोह कॉल किसी भी समय, यह है के लिए स्मृति का मुट्ठी भर लोगों को दी अपनी स्थानीय चर या उसके मापदंडों. और सचित्र रूप से, हम एक साथ देखते हैं कि कहा जाता लगातार समारोह, जब एक कॉल बी वे, सी डी कॉल कॉल ढेर पर स्तरित मिलता है. और उन लोगों के स्लाइस से प्रत्येक के भीतर स्मृति अनिवार्य रूप से एक अद्वितीय गुंजाइश है उस समारोह के लिए, जो, ज़ाहिर है, आप हाथ करने के लिए चाहते हैं समस्याग्रस्त है एक समारोह से एक और एक टुकड़े के लिए आप यह चाहते हैं कि डेटा की रूप बदलना या बदलने के लिए. तो सक्रिय करने के लिए हमारे समाधान क्या था एक ढेर के प्रतिनिधित्व वाले एक समारोह अंदर स्मृति को बदलने के लिए फ्रेम एक और ढेर फ्रेम का? कैसे एक दूसरे से उन दो बात करते हैं? तो संकेत या पतों के माध्यम से, जो, फिर से, बस, जहां से वर्णन स्मृति, एक विशिष्ट के माध्यम से संख्या, विशेष रूप से काटने मूल्य पाया जा सकता है. इसलिए हम जारी रखा भी पिछली बार याद कहानी और एक को देखा काफी छोटी गाड़ी कार्यक्रम. और इस कार्यक्रम के कुछ के लिए छोटी गाड़ी है कारणों, लेकिन सबसे ज्यादा चिंता की बात है यह क्या जाँच करने में विफल रहता है? हाँ, यह निवेश की जांच करने में विफल रहता है. क्षमा करें? यह 12 से अधिक वर्ण है तो. तो बहुत चालाकी, memcopy बुला जब, जो, नाम का सुझाव है, बस इसकी दूसरा तर्क से प्रतियां स्मृति अपनी पहली बहस में. तीसरा तर्क, बहुत चालाकी है आप नहीं कर सुनिश्चित कर लें कि जाँच इस मामले में, लंबाई से अधिक को कॉपी बार की, वर्णों की संख्या, गंतव्य में, जो यह है सरणी सी. लेकिन समस्या यह है कि क्या सी ही पर्याप्त बड़ा नहीं है तो कि संभाल करने के लिए? आप की संख्या को कॉपी करने के लिए जा रहे हैं आपको दिया गया है जो बाइट्स. लेकिन आप वास्तव में क्या है और अधिक आप के लिए कमरा है से बाइट्स? खैर, इस कार्यक्रम बहुत मूर्खता बस आँख बंद करके यह जो कुछ भी लेने के लिए आय दी, नमस्कार बैकस्लैश 0 है महान स्ट्रिंग कम है पांच घर का काम की तरह, बस. लेकिन यह वास्तव में 12 अक्षर या अगर 1,200 वर्ण, हम आखिरी बार देखा था आप अभी पूरी तरह से करने के लिए जा रहे हैं कि स्मृति अधिलेखित कि आप का नहीं है. और सबसे खराब मामला है, आप लिखना चाहते हैं कि हम कहा जाता है कि वहाँ लाल भाग पता वापस - इस कंप्यूटर बस कहाँ है स्वचालित रूप से, आप के लिए, पीछे दृश्य, एक 32 बिट मूल्य दूर tucks कि यह चाहिए पता क्या करने के लिए यह याद दिलाता है वापस आने पर Foo, यह अन्य समारोह, को क्रियान्वित किया जाता है. यह एक तरह की रोटी टुकड़ा है जो यह देता है. आप उस पर लिखना चाहते हैं, संभावित, आप बुरा आदमी हो, तो जा सकते हैं संभावित पर लेने के किसी कंप्यूटर है. और तुम सबसे निश्चित रूप से होगा ज्यादातर मामलों में यह दुर्घटना. अब यह समस्या केवल exacerbated किया गया था हम स्मृति के बारे में बात करना शुरू कर के रूप में अधिक आम तौर पर प्रबंधन. और malloc, स्मृति आवंटन के लिए, एक है हम आवंटित करने के लिए उपयोग कर सकते हैं कि समारोह हम पहले से नहीं जानते कि स्मृति जब हम कुछ की जरूरत हो सकती है. तो, उदाहरण के लिए, मैं जाना अगर वापस यहां के उपकरण के लिए. और मैं पिछली बार hello2.c से ऊपर खुला, देखा, जो यहां इस कार्यक्रम याद इस तरह एक छोटे से कुछ, सिर्फ तीन लाइनें - अपने नाम राज्य, तो स्ट्रिंग नाम, बाईं तरफ, getstring के बराबर होती है. और फिर हम इसे बाहर प्रिंट उपयोगकर्ता का नाम. तो यह एक सुपर सरल कार्यक्रम था. स्पष्ट है, मुझे आगे चलते हैं और नमस्ते -2 बनाने. मैं डॉट स्लेश नमस्कार -2 में क्या करने जा रहा हूँ. आपका नाम राज्य - डेविड. दर्ज करें. नमस्ते डेविड. यह ठीक काम करने लगता है. लेकिन क्या वास्तव में हो रहा है यहाँ हुड के नीचे? पहले की कुछ परतों वापस छील करते हैं. स्ट्रिंग हम है सिर्फ एक पर्याय है क्या के लिए एहसास हुआ? चार सितारा. तो चलो इसे एक छोटे से अधिक रहस्यमय बना दे लेकिन अधिक तकनीकी रूप से सही है कि इस जिसका मतलब है कि एक चार सितारा है, नाम, हाँ, एक चर रहा है. लेकिन क्या नाम भंडार का पता है थोड़ा अजीब लगता है, जो एक चार, मैं एक स्ट्रिंग वापस हो रही है. मैं कई वापस हो रही है घर का काम नहीं एक चार. लेकिन ज़ाहिर है, आप केवल पहली आवश्यकता याद करने के लिए चार के पते जहां यही कारण है क्योंकि पूरे स्ट्रिंग है? आप जहां अंत का पता लगाने कैसे करते हैं स्ट्रिंग शुरुआत जानने है? बैकस्लैश शून्य. आपको यह पता लगाने की उन दो सुराग के साथ तो शुरुआत और अंत के पहले किसी भी स्ट्रिंग जब तक वे कर रहे हैं, कर रहे हैं ठीक है कि अशक्त के साथ बनाई टर्मिनेटर, कि बैकस्लैश शून्य. लेकिन इस getstring बुला रहा है. और यह कि getstring पता चला है यह सब समय की तरह कर दिया गया है हमारे लिए धोखा दे. यह सुनिश्चित किया जाना है, इस परिश्रम कर रहा है, उपयोगकर्ता से एक तार हो रही. लेकिन जहां कि स्मृति है से आ गया? हम यहाँ वापस तस्वीर के लिए जाना है और अगर सिर्फ एक से परिभाषा लागू पल पहले, जहां ढेर है कि कार्यों कहा जाता है जब स्मृति चला जाता है, कि तर्क से, आप getstring कॉल करते हैं, और फिर मैं में टाइप करें डी ए वी आई डी, लिखें जहां डी ए वी आई डी है बैकस्लैश शून्य पर आधारित, संग्रहीत कहानी हम अब तक हमें बता दिया है? इसमें शामिल होना प्रतीत होता है ढेर, सही? आपको मिल स्ट्रिंग कॉल जब आप एक मिल ढेर पर स्मृति का छोटा टुकड़ा. तो यह है कि डी ए वी आई डी कारण खड़ा है बैकस्लैश शून्य संग्रहीत किया जाता है वहाँ ढेर में. लेकिन रिटर्न getstring, एक मिनट रुको इतनी बात करने के लिए कि स्ट्रिंग, जो साधन यह कैफेटेरिया से ट्रे है ढेर हटा लिया है. और हम हैं कि जैसे ही एक के रूप में पिछली बार कहा फ़ंक्शन देता है, और आपको लगता है कि ले इसलिए, ढेर बंद, क्या बात है, ट्रे आप के अवशेष के बारे में कल्पना कर सकते हैं कि स्मृति? मैं एक तरह से प्रश्न चिह्न के रूप में उन्हें redrew वे प्रभावी बन क्योंकि अज्ञात मूल्यों. वे पुन: उपयोग किया जा सकता है जब कुछ अगले समारोह कहा जाता है. दूसरे शब्दों में, हम भी हो अगर भंडारण हो करने के लिए - मैं एक त्वरित तस्वीर आकर्षित करेंगे यहां ढेर की. हम नीचे ड्राइंग कर रहे हैं तो मेरी स्मृति खंड की, और हम कह देंगे इस स्मृति की जगह है कि मुख्य और शायद ARG सी और के कब्जे में ARG वी और कार्यक्रम में कुछ और, getstring जब कहा जाता है, संभवतः हो जाता getstring यहां स्मृति का एक हिस्सा. और फिर डी ए वी आई डी किसी भी तरह इस समारोह में समाप्त होता है. और मैं oversimplify करने जा रहा हूँ. लेकिन चलो मान लेते हैं कि अपने डी ए वी आई डी शून्य बैकस्लैश. तो यह कई बाइट्स में उपयोग किया जाता है getstring के लिए फ्रेम. लेकिन जैसे ही रिटर्न getstring के रूप में, हम पिछली बार कहा कि पर इस स्मृति यहाँ सब हो जाता है - woops! - सभी प्रभावी रूप से मिट जाता है. और हम सवाल के रूप में अब यह सोच सकते हैं कौन जानता है, क्योंकि निशान क्या है कि स्मृति की बनने जा रही है. दरअसल, मैं बहुत अक्सर कार्य कॉल getstring के अलावा अन्य. और जैसे ही मैं कुछ अन्य फोन शायद नहीं में, getstring से समारोह हम सिर्फ देखा है कि इस विशेष कार्यक्रम लेकिन कुछ अन्य, निश्चित रूप से कुछ अन्य समारोह में दिया जा रहा खत्म हो सकता है ढेर में यह अगले जगह. तो यह है कि getstring भंडार नहीं किया जा सकता ढेर पर डी ए वी आई डी मैं करूंगा क्योंकि तुरंत उस तक पहुँच खो देते हैं. लेकिन हम वे getstring पता केवल क्या देता है? यह करने के लिए वापस नहीं है मुझे छह अक्षर. यह वास्तव में किया क्या लौट रहा है हम पिछली बार निष्कर्ष है? पहले से पता. इसलिए किसी भी तरह, आप getstring जब कहा जाता है, इसके लिए स्मृति का एक हिस्सा आवंटन है उपयोगकर्ताओं को लिखें और कि स्ट्रिंग तो इसके बारे में पता लौटने. और यह पता चला है कि जब आप चाहते हैं इस में स्मृति आवंटित करने के लिए समारोह रास्ते और कहा जाता है, जो व्यक्ति के लिए वापसी उस समारोह का पता स्मृति की है कि हिस्सा है, तुम बिल्कुल पर ढेर में नहीं डाल सकते हैं नीचे, कार्यात्मक यह सिर्फ इसलिए है क्योंकि तुम्हारा नहीं बन करने जा बहुत जल्दी है, तो आप शायद अनुमान लगा सकते हैं जहां हम शायद यह टॉस करने के लिए जा रहे हैं इसके बजाय, ढेर तथाकथित. तो अपनी स्मृति के नीचे के बीच लेआउट और अपनी याददाश्त के ऊपर लेआउट क्षेत्रों की एक पूरी गुच्छा रहे हैं. एक ढेर है, और सही यह ऊपर ढेर है. और ढेर सिर्फ एक अलग हिस्सा की है कार्यों के लिए इस्तेमाल नहीं कर रहा है कि स्मृति वे कहते हैं जब. यह अब तक याद है, के लिए प्रयोग किया जाता है जब आप एक समारोह कुछ ले लो चाहते हैं स्मृति और यह है पर लटका करने में सक्षम हो इस पर नियंत्रण खोने के बिना. अब आप शायद तुरंत सका यह नहीं है कि देखना जरूरी नहीं कि एक सही डिजाइन. अपने कार्यक्रम पर स्मृति आवंटित रूप आप अधिक से कॉल स्टैक, या के रूप में आप आवंटित अधिक काम करता है, या के रूप में malloc बंद के रूप में साथ ढेर पर स्मृति getstring कर रही है, क्या स्पष्ट रूप से है अपरिहार्य समस्या लगती है? ठीक है. इस तथ्य की तरह है कि इन तीरों एक दूसरे को इशारा कर रहे हैं शुभ नहीं है. और वास्तव में, हम बहुत जल्दी से दुर्घटना सकता किसी भी तरीके की संख्या में एक कार्यक्रम. वास्तव में, मुझे लगता है हम हो सकता है गलती से एक बार यह किया. या नहीं तो, चलो यह करते हैं जानबूझ अब. मुझे आगे जाना है और सुपर जल्दी लिखने दो. dontdothis.c एक कार्यक्रम बुलाया. और अब मैं यहाँ में जाने के लिए और करेंगे तेज stdio.h शामिल है. समारोह foo लेता घोषित करते हैं तर्क नहीं, जो है शून्य से के रूप में अच्छी तरह से चिह्नित. और फू क्या करने जा रहा है केवल एक चीज है शायद नहीं है, जो foo कॉल चतुर विचार है, लेकिन ऐसा ही होगा. मुख्य शून्य ईएनटी. अब केवल मुख्य बात यह जा रहा है ऐसा करने के लिए के रूप में अच्छी तरह से कॉल foo है. और बस kicks के लिए, मैं जा रहा हूँ आगे यहाँ और से printf "नमस्ते कहना foo. " ठीक है. मैं किसी भी गलती नहीं मिला तो अगर, Dontdothis डॉट स्लेश बनाओ. और हम एक बड़ी खिड़की में यह करते हैं - डॉट, dontdothis स्लेश. चलो. उह ओह. जाहिर है, आप ऐसा कर सकते हैं. लानत है. ठीक है. रुको. द्वारा खड़े हो जाओ. हम किया था - हम बनाने के साथ इसका इस्तेमाल किया था. [आह] मुझे पता है, लेकिन मुझे लगता है कि हम सिर्फ इतना है कि नष्ट कर दिया. उह, हाँ. लानत है. इस रोब समाधान. क्या? यह बहुत सरल है. हाँ, हम अनुकूलन बंद कर दिया. ठीक है, अलविदा खड़े हो जाओ. अब मैं बेहतर महसूस करते हैं. ठीक है. ठीक है. तो चलो इस recompile जाने - आप dontdothis बनाओ. आप को यह नाम बदलने के लिए हो सकता है बस एक पल में dothis.c. हम वहाँ जाते हैं. धन्यवाद. ठीक है. मैं मुद्रण था ताकि तथ्य कुछ बाहर सिर्फ वास्तव में था प्रक्रिया धीमा है जिसके द्वारा हम उस बिंदु पर पहुंच गया होता. ठीक है. ओफ़्फ़! तो क्या वास्तव में हो रहा है? वहाँ कारण, एक तरफ बस के रूप में एक है, इनपुट के मामले में कुछ भी कर रही है और उत्पादन में धीमी हो जाता है क्योंकि आप करने के लिए वर्ण लिखने के लिए है स्क्रीन, यह स्क्रॉल करने के लिए है. कहानी को कम इतने लंबे समय, मैं वास्तव में था इतना अधीर हुआ, हम होगा साथ ही यह अंतिम परिणाम देखा. मैं प्रिंट अप की सवारी मिल गया, अब जब कि हम अभी यह देखना. तो ऐसा क्यों हो रहा है. ठीक है, बिल्कुल सरल व्याख्या,, है कि foo शायद नहीं करना चाहिए खुद को बुला रहे हो. अब सामान्य शब्दों में, इस प्रत्यावर्तन है. और हम एक दो सप्ताह में सोचा पहले पुनरावर्ती अच्छा है. Recursion इस जादुई तरीका का है सुपर संक्षेप में अपने आप को व्यक्त. और यह सिर्फ काम करता है. लेकिन सभी की एक प्रमुख विशेषता है हम बात कर ली है पुनरावर्ती कार्यक्रमों के बारे में और इस प्रकार अब तक देखा, जो वे क्या किया था? कुछ हार्ड कोडित किया गया एक आधार के मामले, कुछ स्थितियों में कहा कि मामला स्पष्ट रूप से है, जो foo फोन नहीं है यहाँ नहीं मामले. तो क्या वास्तव में हो रहा है इस तस्वीर के मामले में? खैर, मुख्य कॉल foo है, यह स्मृति का एक टुकड़ा हो जाता है. Foo foo कहता है, यह हो जाता है स्मृति का एक टुकड़ा. Foo foo कहता है, यह एक टुकड़ा हो जाता है. यह एक टुकड़ा हो जाता है. यह एक टुकड़ा हो जाता है. Foo लौट कभी नहीं रहा है. हम उन में से एक को मिटा कभी नहीं रहे ढेर से तख्ते. तो हम ढेर के माध्यम से नहीं उड़ा रहे क्या किसी और कौन जानता है उल्लेख है, और करने के लिए हम हमारे की सीमा के अतिक्रमण कर रहे हैं स्मृति के खंड तथाकथित. त्रुटि जायें विभाजन झूठे. तो समाधान है स्पष्ट रूप से यह मत करो. लेकिन बड़ा निहितार्थ, हाँ, यह है बिल्कुल कुछ सीमा नहीं है यह अच्छी तरह से करने के लिए, परिभाषित नहीं है, भले ही कैसे तुम एक में फोन कर सकते हैं कई कार्य कार्यक्रम, कितनी बार एक समारोह खुद को कॉल कर सकते हैं. हम उपदेश प्रत्यावर्तन किया तो फिर भी इस संभावित जादुई बात एक के रूप में सिग्मा के लिए सप्ताह पहले की जोड़ी समारोह, और हम डेटा प्राप्त जब संरचनाओं और CS50, आप अन्य देखेंगे इसके लिए आवेदन, यह नहीं है जरूरी सबसे अच्छी बात. एक समारोह में खुद को कहता है क्योंकि अगर, एक आधार नहीं है, भले ही कॉल मामला है, आप उस आधार मामले को मारा नहीं है अगर 1,000 कॉल या 10,000 कॉल, द्वारा लिए आप कमरे से बाहर चला गया हो सकता है कि समय अपनी तथाकथित ढेर और हिट पर स्मृति के कुछ अन्य क्षेत्रों. तो यह भी एक डिजाइन व्यापार बंद है लालित्य के बीच और के बीच अपने विशेष की मजबूती कार्यान्वयन. तो एक और नकारात्मक पक्ष या वहाँ हम है क्या करने के लिए एक और पकड़ लिया इस प्रकार अब तक कर दिया गया. मैं getstring कहा जाता है - मुझे नमस्कार -2 में वापस चलते हैं. , मैं getstring बुला रहा हूँ कि नोटिस एक पते लौट रहा है. और हम आज दावा है कि पता ढेर से है. और अब मैं बाहर मुद्रण कर रहा हूँ उस पते पर स्ट्रिंग. लेकिन हम कभी नहीं बुलाया गया है getstring के विपरीत. हम जैसे एक समारोह CALLL के लिए कभी नहीं किया है ungetstring, आप वापस हाथ जहां कि स्मृति. लेकिन स्पष्ट है कि हम शायद होना चाहिए था. क्योंकि हम कंप्यूटर पूछते रहते अगर स्मृति के लिए, की तरह किसी के माध्यम से निश्चित रूप से, getstring लेकिन कभी इसे वापस दे वह भी करने के लिए नेतृत्व करने के लिए बाध्य है समस्याओं जिससे हम स्मृति से बाहर चला. और वास्तव में, हम इन के लिए देख सकते हैं जिसका उपयोग नए उपकरण के साथ समस्याओं टाइप करने के लिए एक छोटे से गुप्त है. लेकिन मुझे आगे जाना है और यह ऊपर छप जाने बस एक पल में स्क्रीन पर. मुझे आगे जाना है और वेलग्रिंड चलाने के लिए जा रहा हूँ जिसका पहला आदेश पैरामीटर के साथ लाइन तर्क का नाम है उस कार्यक्रम का नमस्कार-2. और दुर्भाग्य से यह है उत्पादन atrociously है कोई अच्छा कारण के लिए जटिल. इसलिए हम सब गड़बड़ है कि देखते हैं. डेविड मेरा नाम राज्य है. तो उस प्रोग्राम की वास्तव में चल रहा है. और अब हम इस उत्पादन मिलता है. तो वेलग्रिंड समान है GDB को आत्मा में. यह एक डिबगर से प्रति नहीं है. लेकिन यह एक स्मृति चेकर है. यह चलेगा कि एक कार्यक्रम है आपकी कार्यक्रम और आप एक से पूछा यदि आप बताओ कंप्यूटर स्मृति के लिए और हाथ कभी नहीं पीठ, जिससे आप जिसका अर्थ है कि एक स्मृति रिसाव. और स्मृति लीक खराब हो जाते हैं. और अगर आप कंप्यूटर के उपयोगकर्ताओं है शायद तुम हो, चाहे यह महसूस किया एक मैक या पीसी. आप कभी भी अपने कंप्यूटर के लिए इस्तेमाल किया है और कई में rebooted नहीं है, जबकि दिन, या आप बस का एक बहुत कुछ मिल गया है कार्यक्रमों चल रहा है, और लानत बात एक पीस को रोकने के लिए धीमा कर देती है, या कम से कम यह उपयोग करने के लिए सुपर कष्टप्रद है क्योंकि सब कुछ सिर्फ सुपर धीमी गति से मिला. अब जब कि कारणों से किसी भी संख्या हो सकती है. यह एक अनंत लूप में एक बग हो सकता है किसी का कोड, या, अधिक बस, यह आप अधिक उपयोग कर रहे हैं मतलब हो सकता है से स्मृति, या करने की कोशिश कर, अपने कंप्यूटर वास्तव में है. और शायद एक बग कुछ कार्यक्रम में नहीं है कि स्मृति के लिए पूछते रहते हैं. साल के लिए ब्राउज़र के लिए कुख्यात थे यह अधिक से अधिक स्मृति के लिए पूछ लेकिन यह वापस सौंपने कभी नहीं. निश्चित रूप से, आप केवल एक सीमित है अगर स्मृति की राशि, आप पूछ सकते हैं ' असीम रूप से कई बार के लिए कि स्मृति के कुछ. और इसलिए तुम यहाँ क्या देख, भले ही फिर वेलग्रिंड का उत्पादन है पर नज़र अनावश्यक रूप से जटिल पहला, यह दिलचस्प हिस्सा है. ढेर - बाहर निकलने पर उपयोग में. यहाँ तो बहुत स्मृति कैसे था पर ढेर में उपयोग में मेरे प्रोग्राम से बाहर निकल गया समय - एक ब्लॉक में जाहिरा तौर पर छह बाइट्स. इसलिए मैं अपने हाथ की लहर के लिए जा रहा हूँ क्या में एक ब्लॉक है. इससे लगता है कि सिर्फ एक हिस्सा है, एक अधिक हिस्सा के लिए तकनीकी शब्द. लेकिन छह बैट - कि छह बाइट्स क्या हैं अभी भी प्रयोग में थे? बिल्कुल सही. डी ए वी आई डी बैकस्लैश शून्य, पाँच पत्र अशक्त टर्मिनेटर प्लस नाम है. इसलिए इस कार्यक्रम वेलग्रिंड देखा कि मैं जाहिर है, से, छह बाइट्स के लिए कहा getstring का रास्ता है, लेकिन कभी नहीं उन्हें वापस दे दी. और वास्तव में, यह तो हो नहीं सकता स्पष्ट अपने कार्यक्रम तीन नहीं है अगर लाइनों, लेकिन यह 300 लाइनों है. इसलिए हम वास्तव में एक और आदेश दे सकते हैं लाइन तर्क को वेलग्रिंड के लिए यह अधिक वाचाल बना. यह याद करने के लिए एक छोटे से परेशान है. लेकिन अगर मैं ऐसा - चलो देखते हैं. लीक - यह रिसाव था - यहां तक ​​कि मुझे याद नहीं है यह हाथ से दूर है क्या. - रिसाव की जांच पूरी होती है. हाँ, धन्यवाद. - रिसाव की जांच पूरी होती है. दर्ज करें. एक ही कार्यक्रम चल रहा है. फिर दाऊद में टाइप करें. अब मैं थोड़ा और विस्तार से देखते हैं. लेकिन ढेर सार नीचे, जो चार के समान है - आह, इस तरह की अच्छी है. अब वेलग्रिंड वास्तव में देख रहा है थोड़ा कठिन मेरे कोड में. और यह जाहिर है, कि कह रहा है लाइन पर malloc - हम बाहर ज़ूम. लाइन पर - हम यह क्या है लाइन नहीं दिख रहा है. लेकिन malloc पहले अपराधी है. Malloc में एक ब्लॉग है. सब ठीक है? ठीक है, नहीं. है ना? मैं getstring कहा जाता है. getstring जाहिरा तौर पर malloc कॉल. तो कोड की क्या लाइन जाहिरा तौर पर है होने के लिए दोषी इस स्मृति आवंटित? की जो कोई भी malloc लिखा मान लेते हैं कि काफी देर तक यह है कि आसपास किया गया है उनकी गलती नहीं. तो यह शायद मेरा है. cs50.c में getstring - इसलिए कि एक है कहीं कंप्यूटर पर फाइल - लाइन 286 में दोषी हो रहा है. अब जब कि CS50 किया गया है की कल्पना करते हैं चारों ओर सभ्य समय की राशि है, तो के लिए हम भी अचूक हैं. और इसलिए यह getstring में शायद नहीं है बग निहित है, बल्कि में कि नमस्ते 2.c लाइन 18. तो चलो पर एक नज़र रखना क्या है कि लाइन 18 थी. ओह. किसी तरह से इस लाइन जरूरी नहीं है छोटी गाड़ी, दर असल, लेकिन यह कारण है कि स्मृति रिसाव के पीछे. तो सुपर बस, क्या intuitively होगा यहाँ समाधान हो सकता है? हम स्मृति के लिए पूछ रहे हैं, तो कभी नहीं थे यह वापस दे रही है और कहा कि एक हो रहा है समस्या है क्योंकि समय के साथ मेरा कंप्यूटर स्मृति से बाहर चला सकता है, धीमी गति से हो सकता है नीचे, बुरी बातें हो सकता है, अच्छी तरह से, सरल सहज ज्ञान युक्त समाधान क्या है? बस इसे वापस दे. आप कैसे है कि स्मृति को मुक्त करते हैं? खैर, शुक्र है यह काफी आसान है सिर्फ मुफ्त के नाम कहने के लिए. और हम इस से पहले कभी नहीं किया है. लेकिन आप अनिवार्य रूप से के बारे में सोच सकते हैं malloc के विपरीत के रूप में मुफ्त. मुफ्त के विपरीत है आवंटन स्मृति. तो अब मुझे इस recompile करते हैं. हैलो -2 बनाओ. मुझे फिर से इसे चलाते हैं. हैलो -2 डेविड. तो इसमें काम करने लगता है ठीक उसी तरह. लेकिन मैं वापस वेलग्रिंड के लिए जाना और फिर से चलाने अगर मेरे नव पर है कि एक ही आदेश संकलित कार्यक्रम, टाइपिंग मेरे नाम से पहले के रूप में - अच्छा. ढेर सार - बाहर निकलने पर उपयोग में - शून्य ब्लॉकों में शून्य बाइट्स. और यह सब, सुपर अच्छा है ढेर ब्लॉकों मुक्त कर दिया गया. कोई लीक संभव हो रहे हैं. तो आ रहा है, नहीं समस्या सेट 4 के साथ, लेकिन समस्या सेट 5, फोरेंसिक साथ और आगे, यह भी एक बन जाएगा की शुद्धता के उपाय आपके तुम्हारे पास क्या है या नहीं कार्यक्रम, या स्मृति लीक नहीं है. लेकिन शुक्र है, न केवल आप कारण कर सकते हैं उन के माध्यम से intuitively, जो छोटे कार्यक्रमों के लिए आसान है, यकीनन, है लेकिन बड़े कार्यक्रमों के लिए कठिन है, वेलग्रिंड, उन बड़े कार्यक्रमों के लिए, आप की पहचान में मदद कर सकते हैं विशेष समस्या नहीं है. लेकिन एक अन्य समस्या है कि पैदा हो सकता है. मुझे है, जो यहां इस फाइल को खोलते हैं, फिर, कुछ हद तक एक सरल उदाहरण. लेकिन क्या पर ध्यान केंद्रित करते हैं इस कार्यक्रम करता है. इस memory.c कहा जाता है. हम में आज बाद में इस पोस्ट करेंगे आज के स्रोत कोड की ज़िप. और मैं एक समारोह है कि नोटिस तर्क और कोई लेता है कि च कुछ भी नहीं देता है. 20 लाइन में, मैं जाहिरा तौर पर एक घोषणा कर रहा हूँ एक पूर्णांक के लिए सूचक और यह फोन एक्स. मैं निर्दिष्ट कर रहा हूँ वापसी है malloc के लिए मूल्य. और बस स्पष्ट होना करने के लिए, कितने बाइट्स हूँ मैं शायद malloc से वापस हो रही है इस स्थिति में? शायद 40. आपको लगता है कि कहां से मिलता है? ठीक है, तुम एक पूर्णांक अक्सर याद है कि अगर 4 बाइट्स, कम से कम उस में है उपकरण, 10 से 4 बार स्पष्ट रूप से 40 है. तो malloc एक पते के लौट रहा है एक स्मृति का हिस्सा और भंडारण कि एक्स में अंततः पता. तो स्पष्ट हो, क्या तो क्या हो रहा है? खैर, मुझे वापस स्विच हमारे यहाँ तस्वीर है. मुझे बस के नीचे आकर्षित नहीं करते हैं मेरे कंप्यूटर की मेमोरी, मुझे आगे चलते हैं और पूरी आयत आकर्षित कि मेरे राम के सभी का प्रतिनिधित्व करता है. हम कह देंगे कि ढेर तल पर है. और एक पाठ खंड में वहाँ गई डेटा. लेकिन मैं सिर्फ अमूर्त उन लोगों के लिए जा रहा हूँ डॉट, दूरसंचार विभाग डॉट के रूप में अन्य बातों दूर. मैं सिर्फ यह उल्लेख करने के लिए जा रहा हूँ शीर्ष पर ढेर के रूप में. और फिर इस तस्वीर के नीचे, मुख्य प्रतिनिधित्व करने के लिए, मैं जा रहा हूँ यह एक स्लाइस स्मृति देने के लिए ढेर पर. एफ के लिए, मैं इसे एक टुकड़ा देने जा रहा हूँ ढेर पर स्मृति की. अब, मैं परामर्श करने के लिए मेरे पास स्रोत कोड फिर से. मुख्य के लिए स्थानीय चर क्या हैं? जाहिरा तौर पर कुछ भी नहीं है, इसलिए कि टुकड़ा है के रूप में भी बड़े प्रभावी ढंग से खाली है या नहीं मैं इसे तैयार किया है. लेकिन च में, मैं एक स्थानीय चर है, एक्स कहा जाता है. तो मैं आगे जाना है और च देने जा रहा हूँ यह फोन स्मृति का एक हिस्सा, एक्स. और अब 10 गुना 4 की malloc, तो malloc 40, कि जहां स्मृति से आ रहा है? हम एक तस्वीर तैयार नहीं किया है इस तरह से पहले. लेकिन यह प्रभावी रूप से है कि मान लें यहाँ से आ रही है, तो एक, दो, तीन, चार, पांच. और अब मैं इनमें से 40 की जरूरत है. तो मैं बस डॉट करता हूँ, डॉट, सुझाव देने के लिए डॉट और भी याद है कि वहाँ वापस ढेर से आ रही. अब पता क्या है? चलो अपनी मनमानी चुनने दें हमेशा की तरह पता है - यह शायद जा रहा है, भले ही Ox123, पूरी तरह से कुछ अलग हो. उस में पहली बाइट का पता है मैं के लिए malloc पूछ रहा हूँ कि स्मृति. तो संक्षेप में, एक बार लाइन 20 कार्यान्वित, सचमुच क्या है यहां एक्स के अंदर संग्रहित? Ox123. Ox123. और बैल रसहीन है. यह बस है यहाँ का मतलब है एक हेक्साडेसिमल संख्या. लेकिन क्या महत्वपूर्ण है है कि क्या मैं दुकान एक्स, एक स्थानीय चर, जो है. लेकिन इसकी डेटा प्रकार, फिर, एक पूर्णांक की एक पता है. खैर, मैं Ox123 स्टोर करने के लिए जा रहा हूँ. लेकिन फिर, कि एक छोटी सी भी अगर मैं स्क्रॉल, तो अनावश्यक रूप से जटिल वापस, हम सार यह दूर काफी कर सकते हैं यथोचित और सिर्फ एक्स का कहना है कि एक स्मृति की है कि हिस्सा करने के लिए सूचक. ठीक है. हाथ में अब सवाल निम्नलिखित है - 21 लाइन, यह पता चला है, छोटी गाड़ी है. क्यों? क्षमा करें? यह जरूरी नहीं है - एक बार फिर कहना है कि. खैर, यह मुक्त नहीं करता है. इसलिए कि दूसरी है लेकिन. तो विशेष रूप से वहाँ अन्य एक है लेकिन 21 लाइन पर. बिल्कुल सही. कोड के इस सरल रेखा है सिर्फ एक बफर अतिप्रवाह, एक बफर उग आया. एक बफर सिर्फ स्मृति का एक हिस्सा मतलब है. लेकिन स्मृति के उस हिस्सा आकार का है जिसका मतलब है कि 10, 10 पूर्णांकों, अगर हम वाक्यात्मक चीनी का उपयोग कर इसे में सूचकांक सरणी संकेतन की, वर्ग कोष्ठक, आप के लिए उपयोग किया एक्स ब्रैकेट 0 एक्स ब्रैकेट 1 एक्स, ब्रैकेट डॉट, दूरसंचार विभाग, दूरसंचार विभाग. एक्स ब्रैकेट 9 सबसे बड़ी है. मैं एक्स ब्रैकेट 10 करते हैं, जहां तो मैं वास्तव में स्मृति में जा रहा हूँ? खैर, मैं 10 INT है - वास्तव में सभी आकर्षित यहाँ बाहर इन की. तो यह है कि पहले पांच था. यहाँ अन्य पांच ints है. तो एक्स ब्रैकेट 0 यहाँ है. एक्स ब्रैकेट 1 है यहाँ. एक्स ब्रैकेट 9 यहाँ है. एक्स ब्रैकेट 10 मैं कह रहा हूँ, जिसका मतलब है यहाँ है, 21 लाइन में, कंप्यूटर डाल करने के लिए नंबर कहां? संख्या 0 कहां? खैर, यह हाँ, 0 है. लेकिन सिर्फ इस तथ्य है कि अपने 0 एक संयोग की तरह है. यह नंबर हो सकता है 50, सभी के लिए हम परवाह. लेकिन हम एक्स ब्रैकेट में डालने की कोशिश कर रहे हैं जहां यह है जो 10, प्रश्न चिह्न, तैयार की है जो एक अच्छी बात नहीं है. इस कार्यक्रम बहुत अच्छी तरह से हो सकता है नतीजतन दुर्घटना. अब, चलो आगे चलते हैं और देखते हैं कि यह अगर , वास्तव में, क्या होता है. फ़ाइल के बाद, स्मृति बनाओ memory.c कहा जाता है. आगे जाने के लिए और चलाते हैं कार्यक्रम स्मृति. इसलिए हम वास्तव में, यह भाग्यशाली लगता मिला. हम भाग्यशाली है. लेकिन हम अब वेलग्रिंड चलाते हैं तो चलो देखते हैं. पहली नज़र में, मेरे कार्यक्रम हो सकता है पूरी तरह से सही होने लगते हैं. लेकिन मेरे साथ वेलग्रिंड चलाते हैं - रिसाव की जांच स्मृति पर पूर्ण बराबर होती है. और अब मैं इस चलाते समय - दिलचस्प. आकार 4 से अमान्य लिखने पर memory.c की रेखा 21. Memory.c की लाइन 21 कौन सा है? ओह, दिलचस्प. लेकिन रुकिए. साइज 4, क्या की बात कर रहा है? मैं केवल एक ही लिखा था, लेकिन यह आकार 4 की है. क्यों यह 4 है? यह एक पूर्णांक है, क्योंकि यह है जो है, फिर से, चार बाइट्स. तो वेलग्रिंड, कि मैं एक बग मिला मेरे कोड पर glancing, नहीं किया था. और शायद अपने TF या नहीं होगा. लेकिन क्या वेलग्रिंड सुनिश्चित करने के लिए कि पाया हम भी, वहाँ एक गलती की है हम कंप्यूटर भाग्यशाली है, और यद्यपि फैसला किया है, हां, मैं दुर्घटना के लिए नहीं जा रहा हूँ आप एक बाइट, एक छुआ सिर्फ इसलिए तुम नहीं किया है कि स्मृति की INT की कीमत वास्तव में ही. वैसे, यहाँ छोटी गाड़ी और क्या है. पता - यह एक पागल देख पता है हेक्साडेसिमल में. वह सिर्फ है कहीं ढेर में इसका मतलब है शून्य बाइट आकार 40 के एक ब्लॉक के बाद आवंटित किया गया है. मुझे यहाँ से बाहर ज़ूम और अगर देखना इस एक छोटे से अधिक उपयोगी है. दिलचस्प है. 40 बाइट्स निश्चित रूप से खो रहे हैं 1 की हानि रिकॉर्ड 1 में. फिर से, अधिक से अधिक शब्दों को यहाँ उपयोगी है. लेकिन, पर प्रकाश डाला तर्ज पर आधारित जहां मैं शायद ध्यान केंद्रित करना चाहिए मेरी एक और बग के लिए ध्यान? Memory.c की एक लाइन 20 की तरह लग रहा है. हम वापस पंक्ति 20 के पास जाओ तो, अगर वह है एक तुम पहले की पहचान की है. और यह जरूरी छोटी गाड़ी नहीं है. लेकिन हम यह इसके प्रभाव को उलट दिया है. तो कैसे मैं सही है कम से कम उन गलतियों में से एक? मैं रेखा 21 के बाद क्या कर सकता है? मैं इतना है, एक्स से मुक्त कर सकता है कि स्मृति वापस देने के लिए. और मैं इस बग कैसे तय करते हैं? मैं निश्चित रूप से जाना चाहिए कोई आगे 0 से. इसलिए मुझे कोशिश करते हैं और इस को फिर से चलाने. क्षमा करें, निश्चित रूप से जाना कोई आगे 9 से. स्मृति बनाओ. मुझे वेलग्रिंड फिर से दौड़ना दो. एक बड़ी खिड़की में. और अब देखो. नाइस. सभी ढेर ब्लॉक मुक्त कर दिया गया. कोई लीक संभव हो रहे हैं. और यहाँ ऊपर, कोई जिक्र नहीं है अवैध अधिकार के किसी भी अधिक. सिर्फ लालची हो, और चलो करने के लिए देखते हैं अगर एक और प्रदर्शन उद्देश्य के रूप में जाना नहीं है - मैं एक पल पहले भाग्यशाली मिला. और इस 0 तथ्य यह है कि शायद है अनावश्यक रूप से भ्रामक. चलो बस एक कुछ मनमाना, 50 करने दो. संख्या, स्मृति डॉट स्लेश स्मृति बनाने के लिए - अभी भी भाग्यशाली हो. कुछ भी नहीं दुर्घटनाग्रस्त है. मैं सिर्फ सच में कुछ करना मान लीजिए मूर्ख, और मैं 100 से करते हैं. मुझे स्मृति रीमेक चलो, डॉट स्मृति स्लैश - फिर भाग्यशाली है. कैसे 1000 के बारे में? ints से परे है, मोटे तौर पर, मैं जहां होना चाहिए? स्मृति बनाओ - अरे. [हंसी] ठीक है. अब और नहीं गंदगी के चारों ओर चलो. फिर से दौड़ना स्मृति. हम वहाँ जाते हैं. ठीक है. तो जाहिर है आप सूचकांक 100,000 ints जहां परे आप में होना चाहिए था स्मृति, बुरी बातें होती हैं. तो यह स्पष्ट रूप से नहीं है एक कठिन, नियम. मैं एक तरह से परीक्षण का उपयोग कर रहा था और त्रुटि वहाँ पाने के लिए. लेकिन यह है, लंबी कहानी को कम, क्योंकि आपके कंप्यूटर की मेमोरी भी विभाजित है इन बातों में खंडों बुलाया. और कभी कभी, कंप्यूटर वास्तव में यदि आप एक छोटे से अधिक स्मृति दिया गया है आप के लिए पूछने से. लेकिन क्षमता के लिए, यह सिर्फ आसान है अधिक स्मृति हो, लेकिन केवल आपको बता आप इसे का एक हिस्सा हो रही है. और तुम कभी कभी भाग्यशाली हो, इसलिए, आप को छूने के लिए सक्षम हो सकता है आप का नहीं है कि स्मृति. आप कोई गारंटी नहीं है कि क्या मूल्य यदि आप वहाँ रहना होगा वहाँ डाल दिया है क्योंकि कंप्यूटर अभी भी यह नहीं सोचता है कि तुम्हारा है, लेकिन यह जरूरी नहीं जा रहा है में स्मृति का एक और खंड हिट करने के लिए कंप्यूटर और की तरह एक गलती के लिए प्रेरित यहाँ यह एक. ठीक है. स्मृति पर तो कोई सवाल? ठीक है. के पर, फिर, यहाँ एक नज़र रखना हम के लिए ले जा रहा हूँ कुछ काफी कुछ समय के लिए दी गई है, जो इस फाइल में cs50.h. कहा जाता है तो यह एक फ़ाइल है. ये सिर्फ एक पूरी गुच्छा रहे हैं के शीर्ष टिप्पणियाँ ऊपर. और आप इस पर ध्यान दिया है कि अगर आप उपकरण पर आसपास poked. लेकिन यह पता चला है कि हर समय, हम एक के रूप में स्ट्रिंग का इस्तेमाल करते थे हम घोषणा की है जिसके द्वारा पर्याय, साधन उस पर्याय इस के साथ था प्रकार परिभाषा के लिए कीवर्ड typedef,. और हम अनिवार्य रूप से बनाने, कह रहे हैं स्ट्रिंग चार स्टार के लिए एक पर्याय. जिसका मतलब है कि द्वारा ढेर के रूप में जाना जाता है इन प्रशिक्षण पहियों बनाया स्ट्रिंग. अब यहां सिर्फ एक प्रोटोटाइप है getchar के लिए. हम पहले यह देखा हो सकता है, लेकिन है कि यह करता है वास्तव में क्या. getchar , कोई तर्क लेता है एक चार देता है. getdouble तर्क में कोई लेता है, एक डबल देता है. getfloat कोई बहस नहीं, रिटर्न लेता है एक नाव, और बहुत आगे है. getint यहां है. getlonglong यहां है. और getstring यहां है. और यह बात है. इस बैंगनी रेखा एक और पूर्वप्रक्रमक है क्योंकि निर्देशक यह की शुरुआत में हैशटैग. ठीक है. तो अब मुझे cs50.c. में जाने और हम इस पर भी लंबे समय से बात नहीं करेंगे. लेकिन तुम क्या है की एक झलक देने के लिए यह सब चल रहा समय, मेरे लिए चलते हैं - के getchar करते हैं. तो getchar ज्यादातर टिप्पणियां है. लेकिन यह इस तरह दिखता है. तो यह वास्तविक समारोह है हम किया गया है कि getchar के लिए दी लेने से मौजूद है. और हम यह एक का उपयोग नहीं किया है फिर भी अगर कभी कि अक्सर, यह कम से कम है अपेक्षाकृत सरल. तो यह लेने लायक है एक यहां पर त्वरित देखो. तो getchar, एक अनंत लूप है जान - बूझकर तो जाहिरा तौर पर. यह तो कहता है - और यह एक की तरह है कोड का अच्छा पुन: उपयोग खुद लिखा है हम. यह getstring कहता है. यह क्या करता है क्योंकि एक चार पाने के लिए क्या मतलब है? खैर, आप के रूप में अच्छी तरह से प्राप्त करने के लिए कोशिश कर सकते हैं एक पूरे उपयोगकर्ता से पाठ की लाइन और तो सिर्फ एक को देखो उन पात्रों की. लाइन 60 में, यहाँ एक छोटी है एक मानसिक स्वास्थ्य की जांच के सा. Getstring अशक्त लौटे, तो के आगे नहीं करते हैं. कुछ गलत हो गया. अब यह कुछ हद तक कष्टप्रद है, लेकिन है सी. चार मैक्स में पारंपरिक शायद क्या प्रतिनिधित्व करता है बस अपने नाम के आधार पर? यह एक निरंतर है. यह के संख्यात्मक मान की तरह है आप के साथ प्रतिनिधित्व कर सकते हैं सबसे बड़ा चार शायद संख्या है जो एक काटने, सबसे बड़ी संख्या आप जो 255, आठ बिट्स का प्रतिनिधित्व करते हैं, शून्य से शुरू. तो मैं इस समारोह में, इस का उपयोग किया है जब इस कोड लिखने, केवल क्योंकि कुछ getchar में गलत हो जाता है, लेकिन अगर जीवन में अपने उद्देश्य को वापस जाने के लिए है एक चार, आप किसी भी तरह सक्षम होने की जरूरत उपयोगकर्ता को संकेत देने के लिए कि कुछ गलत हो गया. हम अशक्त नहीं लौट सकते. यह शून्य एक सूचक है कि पता चला है. और फिर, getchar है एक चार लौटने के लिए. इसलिए सम्मेलन, कुछ हो जाता है अगर गलत, तुम, प्रोग्रामर, या में है इस मामले में, मुझे पुस्तकालय के साथ, मैं था एक बस, तो मनमाने ढंग से तय कुछ गलत हो जाता है, मैं जा रहा हूँ सही मायने में है जो संख्या 255, लौटने हम, उपयोगकर्ता टाइप नहीं कर सकते हैं नहीं कर सकते हैं इसका मतलब द्वारा प्रतिनिधित्व चरित्र हम था संख्या 255 है क्योंकि एक यह चोरी करने के लिए एक तथाकथित प्रहरी मूल्य के रूप में एक समस्या का प्रतिनिधित्व करते हैं. अब यह चरित्र है कि 255 पता चला है आप पर टाइप कर सकते हैं कुछ नहीं है अपने कीबोर्ड, तो यह कोई बड़ी बात नहीं है. उपयोगकर्ता की सूचना नहीं है कि मैं इस चरित्र चुरा लिया है. लेकिन क्या आपने कभी एक पर मैन पेज में देखते हैं एक करने के लिए कंप्यूटर प्रणाली कुछ संदर्भ सब कहते हैं कि इस तरह लगातार टोपियां, त्रुटि के मामलों में लगातार हो सकता है में लौटा दी, कि सब कुछ मानव किया है साल पहले मनमाने ढंग से करने का निर्णय लिया गया था इस विशेष मूल्य और वापसी मामले में एक निरंतर यह कहते हैं कुछ गलत हो जाता. अब जादू यहाँ नीचे होता है. सबसे पहले, मैं लाइन 67 में घोषणा कर रहा हूँ दो वर्ण, सी 1 और सी 2. और फिर लाइन 68 में, वास्तव में नहीं है की याद ताजा करती है कि कोड की एक पंक्ति दिए हमारे दोस्त printf, कि यह उद्धरण में प्रतिशत सीएस करता है. लेकिन यहाँ क्या हो रहा है नोटिस. sscanf स्ट्रिंग स्कैन का अर्थ है - इसका मतलब है एक स्वरूपित स्कैन स्ट्रिंग, फलस्वरूप sscanf. इसका क्या मतलब है? इसे आप एक स्ट्रिंग sscanf को पारित मतलब है. और रेखा जो कुछ है उपयोगकर्ता प्रकार के अंदर आप की तरह एक प्रारूप स्ट्रिंग sscanf को पारित इस कर रहे हैं कि क्या scanf बताता है आप उपयोगकर्ता अंदर टाइप किया गया है उम्मीद कर रहा तुम तो पास में दो के पते इस मामले में स्मृति का हिस्सा है,, मैं दो प्लेसहोल्डर है क्योंकि. इसलिए मैं यह पता देने जा रहा हूँ सी 1 और सी 2 के पते की. और अगर आप एक समारोह दे कि याद कुछ चर का पता, क्या है निहितार्थ यह है? उस समारोह एक परिणाम के रूप में क्या कर सकते हैं यह एक का पता देने के करने का विरोध चर, के रूप में चर ही? यह सही है, यह बदल सकते हैं? आप किसी एक शारीरिक के लिए एक नक्शा था पता है, वे वहां जाने के लिए और क्या कर सकते हैं वे उस पते पर जो भी चाहते हैं. यहां एक ही विचार है. हम sscanf को पारित करते हैं, दो के पते स्मृति का हिस्सा है, यहां तक ​​कि इन छोटे स्मृति, सी 1 और सी 2, लेकिन का थोड़ा हिस्सा हम यह उनमें से पता बताओ, sscanf इसे बदल सकते हैं. हम पढ़ तो, अगर जीवन में के उद्देश्य sscanf आदमी पृष्ठ, पढ़ने के लिए है क्या उपयोगकर्ता में टाइप होने उपयोगकर्ता के लिए आशा एक चरित्र में और शायद टाइप किया एक और चरित्र, और जो कुछ उपयोगकर्ता टाइप, पहली चरित्र चला जाता है यहाँ, दूसरा चरित्र यहाँ जाता है. अब, एक अलग रूप में, यह है, और तुम होगा केवल दस्तावेज़ से यह पता है, मैं वहाँ एक रिक्त स्थान डाल तथ्य यह है कि बस मुझे परवाह नहीं है इसका मतलब है कि अगर उपयोगकर्ता स्पेस बार कुछ हिट वह या वह एक लेता बार पहले चरित्र, मैं अनदेखा करने के लिए जा रहा हूँ किसी भी सफेद स्थान. तो यह है कि, मैं से पता प्रलेखन. एक दूसरे% सी है कि वहाँ तथ्य सफेद अंतरिक्ष के बाद वास्तव में है जानबूझकर. मैं पता लगाने में सक्षम होना चाहता हूँ, अगर उपयोगकर्ता बँधा हुआ या सहयोग नहीं किया. इसलिए मैं उपयोगकर्ता केवल टाइप की उम्मीद कर रहा हूँ एक चरित्र में है, इसलिए मैं उम्मीद कर रहा हूँ कि sscanf ही वापस जाने के लिए जा रहा है मान 1, क्योंकि फिर, मैंने पढ़ा अगर प्रलेखन, में sscanf का उद्देश्य जीवन की संख्या पर लौटने के लिए है भर गया है कि चर उपयोगकर्ता इनपुट के साथ. मैं दो चर में पारित पते, सी 1 और सी 2. मैं, हालांकि, उम्मीद कर रहा हूँ कि केवल एक का उन्हें मार दिया जाता है क्योंकि अगर sscanf रिटर्न 2, संभवतः क्या है तार्किक निहितार्थ? उपयोगकर्ता बस मुझे एक नहीं दिया चरित्र की तरह मैं उसे या उसे बताया. वे शायद पर टाइप किया कम से कम दो अक्षर. मैं बजाय दूसरा नहीं था तो अगर % ग, मैं सिर्फ एक था, जो स्पष्ट रूप से अधिक सहज ज्ञान युक्त होगा दृष्टिकोण, मैं एक पहली नज़र में लगता है, आप पता लगाने के लिए सक्षम होने के लिए नहीं जा रहे हैं उपयोगकर्ता आप अधिक दे दिया गया है आप वास्तव में चाहते थे की तुलना में इनपुट. तो यह एक अंतर्निहित रूप है त्रुटि की जाँच. लेकिन मैं यहाँ क्या कर नोटिस. मैं उपयोगकर्ता मुझे एक दे दिया है कि यकीन है कि एक बार चरित्र, मैं कर, नया मुफ्त getstring के विपरीत, जो बारी में malloc का उपयोग करता है, और फिर मैं वापस सी 1, मैं आशा व्यक्त की कि चरित्र उपयोगकर्ता प्रदान की है और केवल प्रदान की. तो एक त्वरित केवल झलक, लेकिन getchar पर कोई सवाल? हम वापस दूसरों से कुछ के लिए आया हूँ. खैर, मुझे आगे जाना है और यह करते हैं - सिर्फ प्रेरित करने के लिए, अब लगता है हमारी एक सप्ताह से अधिक समय में चर्चा, इस structs.h एक फ़ाइल कहा जाता है. और फिर, यह सिर्फ एक स्वाद है आगे झूठ है कि कुछ की. लेकिन सूचना है कि एक बहुत इस टिप्पणी के है. इसलिए मुझे प्रकाश डाला ही अब के लिए दिलचस्प हिस्सा. typedef - कि एक ही कीवर्ड फिर से नहीं है. typedef हम स्ट्रिंग घोषित करने के लिए उपयोग एक विशेष डेटा प्रकार के रूप में. आप नए ब्रांड बनाने के लिए typedef का उपयोग कर सकते हैं अस्तित्व नहीं था कि डेटा प्रकार जब सी आविष्कार किया गया था. उदाहरण के लिए, INT सी. चार के साथ आता है सी. डबल सी के साथ आता है, लेकिन साथ आता है एक छात्र की कोई धारणा नहीं है. और फिर भी यह होना बहुत उपयोगी होगी एक प्रोग्राम लिखने के लिए सक्षम है कि भंडार एक चर में, एक छात्र की आईडी नंबर, उनके नाम, और उनके घर. दूसरे शब्दों में, तीन टुकड़ों में एक पूर्णांक और एक तरह डेटा, की स्ट्रिंग और एक अन्य स्ट्रिंग. Typedef के साथ, बहुत शक्तिशाली क्या है इस के लिए कीवर्ड sturct के बारे में संरचना, आप 2013 में प्रोग्रामर, वास्तव में अपने ही परिभाषित कर सकते हैं साल अस्तित्व में नहीं था कि डेटा प्रकार पहले लेकिन है कि सूट अपने उद्देश्यों. और तो यहाँ, लाइनों 13 19 के माध्यम से में, हम जैसे, एक नया डेटा प्रकार घोषणा कर रहे हैं एक पूर्णांक, लेकिन छात्र बुला. और के अंदर यह चर जा रहा है एक पूर्णांक, एक स्ट्रिंग, - तीन बातें हो और एक स्ट्रिंग. तो आप वास्तव में क्या है के बारे में सोच सकते हैं यह वह जगह है, भले ही यहां हुआ एक आज के लिए एक सरलीकरण का सा, एक छात्र अनिवार्य रूप से हो रहा है इस तरह देखने के लिए. इसका का एक हिस्सा होने जा रहा एक आईडी, एक नाम के साथ स्मृति क्षेत्र, और एक घर क्षेत्र. और हम उन लोगों के हिस्सा उपयोग करने में सक्षम हो जाएगा स्मृति और के रूप में उन तक पहुँचने. मैं struct0.c में जाओ, यहाँ है एक अपेक्षाकृत लंबा है, लेकिन अगले एक कोड के पैटर्न, कि इस नई चाल का उपयोग करता है. तो सबसे पहले, मुझे आपका ध्यान आकर्षित करते हैं शीर्ष ऊपर दिलचस्प भागों के लिए. तीव्र छात्रों 3 को परिभाषित करता है, एक वाणी लगातार बुलाया छात्रों और प्रदान यह मनमाने ढंग से नंबर 3, बस इसलिए मैं का उपयोग कर तीन छात्रों की है अब के लिए इस कार्यक्रम. यहाँ मुख्य आता है. और नोटिस, कैसे मैं घोषणा करता है छात्रों की एक सरणी? खैर, मैं सिर्फ एक ही वाक्य रचना का उपयोग करें. शब्द छात्र जाहिर है, नया है. लेकिन छात्र, वर्ग, वर्ग के छात्रों के. तो दुर्भाग्य से एक बहुत कुछ है यहाँ पदों की पुन: उपयोग की. यह सिर्फ एक संख्या है. तो यह तीन कह की तरह है. कक्षा मैं चाहता हूँ बस क्या है चर कॉल करने के लिए. मैं छात्रों को यह कह सकते हैं. लेकिन वर्ग, यह एक में एक वर्ग नहीं है जिस तरह से वस्तु उन्मुख जावा तरह. यह छात्रों के सिर्फ एक वर्ग है. और हर तत्व का डेटा प्रकार उस सरणी में छात्र है. तो यह एक छोटे से अलग है और कुछ कहने से इस तरह, यह सिर्फ है - मैं मुझे तीन छात्रों को देने कह रहा हूँ और उस सरणी वर्ग कहते हैं. ठीक है. अब यहाँ एक चार पाश है. इस आदमी के परिचित - पुनरावृति तीन तक पर शून्य से. और यहाँ वाक्यविन्यास का नया टुकड़ा है. कार्यक्रम मुझे संकेत जा रहा है, मानव, यह एक छात्र देने के लिए एक पूर्णांक है जो आईडी,. और यहाँ आप कर सकते हैं जो साथ वाक्यविन्यास है पर आईडी क्षेत्र में कुछ की दुकान स्थान वर्ग ब्रैकेट मैं तो इस वाक्य रचना कोई नई बात नहीं है. यह सिर्फ मेरे आठवें देने का मतलब कक्षा में छात्र. लेकिन इस प्रतीक नया है. अब तक, हम डॉट इस्तेमाल नहीं कर सकता है, इस तरह कोड में कम से कम. इस रूप में जाना जाता संरचना के लिए जाने का मतलब एक छात्र और वहाँ कुछ डाल दिया. इसी तरह, यह अगली पंक्ति में, 31 जाने आगे और जो कुछ भी उपयोगकर्ता प्रकार डाल एक यहां नाम और क्या वे एक के लिए कर के लिए घर, एक ही बात है, आगे बढ़ो और . घर में रख दिया. इसलिए इस कार्यक्रम क्या करता है अंततः क्या है? आप वहां एक छोटी सी टीज़र देख सकते हैं. मुझे आगे चलते हैं और structs 0 कैसे कर सकता हूँ डॉट, संरचना 0, छात्र की पहचान 1 स्लेश डेविड माथर, छात्र आईडी 2 कहना. रोब किर्कलैंड, छात्र आईडी 3. लॉरेन Leverit - और केवल बात यह कार्यक्रम किया था, अभी पूरी तरह से मनमाना है, जो है मैं इस डेटा के साथ कुछ करना चाहता था मैं हम कैसे करने के लिए सिखाया गया है कि अब structs का उपयोग, मैं सिर्फ पड़ा है यहाँ यह अतिरिक्त पाश. मैं छात्रों की सरणी से पुनरावृति. मैं हमारे, शायद अब परिचित मित्र का इस्तेमाल किया, स्ट्रिंग stircomp के लिए, की तुलना चेक 8 वीं की छात्रा का घर है मैथर के बराबर? और अगर ऐसा है, बस कुछ प्रिंट मनमाने ढंग से की तरह, हाँ, यह है. लेकिन फिर, बस मुझे अवसर देने का उपयोग करें और पुन: उपयोग करने के लिए इस नई डॉट संकेतन पुन: उपयोग. तो कौन सही, कौन परवाह करता है? एक छात्र कार्यक्रम के साथ आ रहा है कुछ मनमाना है, लेकिन यह पता चला है हम साथ उपयोगी बातें कर सकते हैं इस उदाहरण के लिए इस प्रकार है. यह एक अधिक जटिल संरचना है सी. में यह एक दर्जन या अधिक क्षेत्रों मिल गया है कुछ हद तक cryptically नाम दिया है. लेकिन क्या आपने कभी एक ग्राफिक्स के बारे में सुना है अगर फ़ाइल स्वरूप कहा जाता बिटमैप, बीएमपी, यह पता चला है कि बिटमैप फ़ाइल स्वरूप कि इस तरह बहुत ज्यादा लग रहा है. यह एक मूर्ख थोड़ा मुस्कुराता चेहरा है. यह मैं में तेजी से बढ़ी है कि एक छोटी सी छवि है मैं प्रत्येक देख सकता था कि इतनी सुंदर बड़ा पर व्यक्तिगत डॉट्स या पिक्सल की. अब, यह हम एक का प्रतिनिधित्व कर सकते पता चला है संख्या 0, कहते हैं, के साथ काले रंग की बिंदी. और नंबर 1 के साथ एक सफेद डॉट. दूसरे शब्दों में, तो आप आकर्षित करना चाहते हैं तो एक स्माइली एक में है कि छवि का सामना करने और बचाने के कंप्यूटर, यह शून्य स्टोर करने के लिए suffices और इस तरह लग रहे है कि लोगों को, जहां, फिर, लोगों को सफेद कर रहे हैं और शून्य काले होते हैं. और एक साथ, आप प्रभावी है अगर लोगों को और शून्य का एक सशक्त करना, आप एक है पिक्सल के ग्रिड, और आप रखना अगर उन्हें बाहर, आप एक प्यारा है थोड़ा मुस्कुराता चेहरा. अब, बिटमैप फ़ाइल स्वरूप, बीएमपी, है प्रभावी ढंग से, हुड के नीचे है कि लेकिन अधिक पिक्सल पियक्कड़ साथ कि आप वास्तव में रंगों का प्रतिनिधित्व कर सकते हैं. लेकिन यदि आप और अधिक परिष्कृत है जब बीएमपी और JPEG और GIF तरह फ़ाइल स्वरूप यदि आप उन परिचित हो सकता है जिसके साथ डिस्क पर फ़ाइलों को आम तौर पर न केवल पिक्सल के लिए शून्य और लोगों को है, लेकिन वे भी कुछ मेटाडेटा है - सच नहीं है कि भावना में मेटा डेटा लेकिन यह है के लिए उपयोगी है. यहाँ तो इन क्षेत्रों जिसका अर्थ है, और कर रहे हैं हम पी सेट में और अधिक विस्तार में इस देखेंगे 5, उससे पहले शून्य और लोगों कि एक छवि में पिक्सल का प्रतिनिधित्व करते हैं, जैसे मेटाडेटा का एक गुच्छा है छवि का आकार और छवि की चौड़ाई. और मैं कुछ दूर तोड़ रहा हूँ नोटिस यहाँ मनमाना बातें - चौड़ाई और ऊंचाई. बिट गिनती और कुछ अन्य बातें. तो एक फ़ाइल में कुछ मेटाडेटा नहीं है. लेकिन फाइलें रखी हैं कैसे समझने के द्वारा इस तरह से बाहर, तुम वास्तव में कर सकते हैं तब छवियों में हेरफेर, छवियों को ठीक डिस्क से छवियों का आकार. लेकिन तुम जरूरी नहीं कर सकते उन्हें बढ़ाने. मैं एक तस्वीर की जरूरत है. तो मैं आपको जो देखा, यहाँ वापस आरजे के पास गया काफी कुछ समय पहले स्क्रीन पर. मैं यहाँ मुख्य वक्ता के ऊपर खुला और, अगर यह है क्या आप में ज़ूम करने के लिए प्रयास करते हैं तो क्या होता है और आरजे वृद्धि. उन्होंने कहा कि किसी भी बेहतर वास्तव में नहीं मिल रहा है. अब प्रमुख वक्ता की तरह यह एक धुंधला है बस पर व्याख्या करने के लिए थोड़ा सा, आरजे विशेष रूप से नहीं मिलता है कि तथ्य आप में ज़ूम जब बढ़ाया और इसे इस तरह करते हैं, चौकों देखते हैं? हाँ, आप निश्चित रूप से देख सकते हैं एक प्रोजेक्टर पर चौकों. यही कारण है कि आप को बढ़ाने जब तुम क्या हो. लेकिन यह कैसे हमारे आरजे या समझने में स्माइली चेहरा हमें सूचित करेंगे कार्यान्वित किया जाता है वास्तव में कोड लिखने कि manipulates इन बातों को. और मैं मैं के साथ, इस नोट पर खत्म लगा 55 एक कि है बढ़ाने के सेकंड, मैं हिम्मत, बल्कि भ्रामक कहना. [वीडियो प्लेबैक] -वह झूठ बोल रहा है. क्या बारे में, मैं नहीं जानता. तो हम क्या जानते हो? -कि 9:15 रे Santoya पर एटीएम पर था. तो सवाल यह है कि क्या वह 9:16 पर कर रहा था? नौ मिलीमीटर शूटिंग कुछ पर. शायद वह निशानची देखा. या उसके साथ काम कर रहा था. -रुको. एक वापस जाओ. क्या आप देखते हैं? उसके चेहरे, पूर्ण स्क्रीन लाओ. उनकी चश्मा. वहाँ एक प्रतिबिंब है. -कि Neuvitas बेसबॉल टीम है. यही कारण है कि उनके लोगो है. और वह है जो कोई भी बात कर रहा है उस जैकेट पहने. [अंत वीडियो प्लेबैक] डेविड जे मालन: इस वसीयत समस्या सेट 5 हो. हम अगले सप्ताह में आप देखेंगे. मर्द अध्यक्ष: अगले CS50 पर. [क्रिकेट चहकती] [संगीत खेल]