[संगीत खेल] डेविड जे मालन: सब ठीक है इस CS50 है और इस हफ्ते पांच साल की शुरुआत है. आज तो, अपनी सीट तकिये के नीचे, तुम कुछ भी नहीं मिलेगा. लेकिन ऊपर, आप इन, एक मिल जाना चाहिए के लिए हमारी प्रशंसा के छोटे टोकन तुम डाल कि काम के सभी पंद्रह वर्ष की खेल के रूप में. बस पर थोड़ा चक्र को दूर के लिए खेल शुरू करने के लिए नीचे वर्ग के शेष. तो याद है कि, या सेट कि समस्या का पता इस सप्ताह के अंत में बाहर चला गया जो चार, अन्य खेल लिखने शामिल है. लेकिन इस बार यह एक का उपयोग शामिल है वास्तविक ग्राफिकल यूजर इंटरफेस, नहीं एक जैसे शाब्दिक इंटरफ़ेस पंद्रह वर्ष की खेल था. और आप के आगे झूठ है कि खेल, आप अभी तक, अगले यह नहीं देखा है अगर इस तरह एक छोटे से कुछ लग रहा है. मैं अपने टर्मिनल में जाने के लिए जा रहा हूँ यहाँ GDB में खिड़की. और मुझे आगे जाना है और चलाने के लिए जा रहा हूँ आप उपयोग कर सकते हैं जो स्टाफ समाधान, हमेशा की तरह अद्यतन 50 चलने के बाद. लेकिन मैं एक छोटी सी में रखा जा रहा हूँ गुप्त मोड, एक छोटे ईस्टर अंडे, भगवान मोड, द्वारा तथाकथित argv1 में भगवान डाल. और मैं अपने ही निर्देशों का पालन करने के लिए है, मेरे अपने में यह चल रहा है समस्या निर्देशिका सेट. तो अब आप एक पूरा संस्करण देखना ब्रेकआउट के खेल की. वास्तव में, यह कोई हाथ मोड है. तो यह वास्तव में है - आप हो सकता है, हालांकि wowed - में भगवान मोड को लागू करने के लिए बहुत तुच्छ पंद्रह वर्ष की खेल के विपरीत ब्रेकआउट,, आप में से कुछ को घेरने की कोशिश हो सकता है जो हैकर संस्करण के लिए. ब्रेकआउट में यह भगवान में suffices बस क्या करना है मोड, intuitively चप्पू के साथ? अभी जो कुछ भी करने के लिए इसे बराबर करना क्षैतिज स्थिति गेंद का है. और जब तक आप lockstep में इस करते हैं गेंद इस खेल के साथ आगे बढ़ जाएगा कभी नहीं, कभी, कभी गेंद याद आती है और तुम हर बार जीत लेंगे. लेकिन इस सप्ताह के हैकर संस्करण में सिर्फ भगवान मोड से अधिक है. अन्य सुविधाओं के एक नंबर है. उनमें से, लेज़रों. इतनी है कि आप वास्तव में आप अधीर हो अगर ईंटों नीचे शूटिंग शुरू कर सकते हैं और कुछ अन्य. और आप उन लोगों के लिए जो करना चाहते हैं हैकर बनाम मानक जांचना संस्करण, मैं देख सकते हैं कि इस सप्ताह के हैकर संस्करण जानबूझकर एक है थोड़ा अधिक संभव है, कहते हैं, भगवान से मोड पंद्रह के खेल के साथ था. आप एक खंड के लिए देख रहे हैं और अगर ऐसा है आप कुछ अतिरिक्त मनोरंजन के लिए देख रहे हैं ब्याज की अगर सुविधाओं में गोता है. अब और अधिक व्यावहारिक रूप से, मुझसे बात करते हैं एक बात बाहर के रूप में अच्छी तरह से. आप में से कुछ अभी तक नहीं हो सकता है जो GDB, जो ठीक है, व्यक्तिगत रूप से छुआ. लेकिन अब वास्तव में इस्तेमाल किया पाने के लिए समय है इस और इस उपकरण के साथ सहज करने के लिए यह आपके जीवन कर देगा क्योंकि बहुत आसान है, वास्तव में. GDB पर प्रति रोब व्याख्यान एक जोड़ी सप्ताह के पहले की, याद GDB एक डिबगर है कि. यह आप को चलाने की सुविधा देता है कि एक उपकरण है आपकी कार्यक्रम, लेकिन यह कदम, लाइन से कदम चलाने रेखा ने, तुम चारों ओर से प्रहार कर सकें, आप चीजों को तो, हो रहा से देखते हैं आप प्रिंट कर सकते हैं कि चर के मूल्यों. संक्षेप में, यह आपको इतना अधिक देता है printDef करता है शक्ति. अब बेशक, इंटरफेस बहुत रहस्यमय है. काले और सफेद शाब्दिक इंटरफ़ेस अधिकांश भाग के लिए. आदेशों कुछ हद तक कठिन हैं पहली बार में याद करने के लिए. लेकिन यह आप आधा ले सकता है, भले ही कि अग्रिम डाल करने के लिए एक घंटे, एक घंटे, इसे में समय का निवेश, मेरा विश्वास करो. निश्चित रूप से सेमेस्टर के अंत तक इसे बचाने के लिए होगा आप अधिक परिमाण के एक आदेश उस से भी समय. तो जल्दी अंदर सप्ताह गोता में और breakout के संदर्भ में, जानते हैं आप कि इतने लंबे समय के रूप में आपके पास ऐसा कर सकते हैं वितरण कोड या अपने खुद के कोड अपने Pst4 निर्देशिका में प्रगति में. आप gdb. / ब्रेकआउट चला सकते हैं पता है. यह खोलने के लिए जा रहा है इस तरह से एक खिड़की. मुझे और अपने आप को दे दो. एक टर्मिनल विंडो की. और फिर मैं आगे जाने के लिए जा रहा हूँ और, यह सिर्फ यह नहीं चल रहा है. मैं पहली बार एक ब्रेक अंक निर्धारित करने के लिए जा रहा हूँ आप को थामने के लिए अनुमति देता है जो याद, एक खास जगह पर निष्पादन. बस मैं जा रहा हूँ चीजों को सरल रखने के लिए बस लिखकर लाइन एक पर तोड़ने के लिए नंबर एक. मुझे वास्तव में फिर से खोलने के लिए इस विंडो दो. यह एक हो रही है क्योंकि वहाँ थोड़ा छोटा है. तो क्या मैं अब यहां क्या करने जा रहा हूँ मैं अपने टर्मिनल विंडो खोल अगर. आओ, हम वहाँ जाते हैं. तो अब मैं Pst4, वापस ड्रॉपबॉक्स पर जाना है और रन GDB. / ब्रेकआउट, नोटिस दर्ज मैं एक स्थापित करने के लिए तोड़ने के लिए जा रहा हूँ लाइन एक पर एक ब्रेक अंक. और अब मैं जा रहा हूँ आगे और प्रकार रन. और जब मैं, कुछ भी नहीं नोटिस होने लगता है. कोई पॉप अप है. कोई चित्रमय नहीं है यूजर इंटरफेस अभी तक. मैं हूँ बल्कि इसलिए कि समझ में आता है सचमुच मेरे कार्यक्रम में लाइन एक पर. और, मैं तेजी से अग्रेषित कर दिया है कि नोटिस विशेष रूप से अब 62 तक, सभी क्योंकि इस फाइल के शीर्ष पर सामान है टिप्पणियाँ और स्थिरांक की तरह बातें और अब के लिए शुष्क सामान. तो अब मैं, मुख्य के अंदर हूँ यह लाइन 62 पर, लगता है. और यह सिर्फ वितरण है कोड, याद आता है. मैं जा रहा से इस को खोलते हैं, इसी तरह, Pst4 में मेरी ड्रॉप बॉक्स निर्देशिका में, breakout.c में. और मैं नीचे और नीचे नीचे स्क्रॉल और अगर, और मुझे आगे जाना है और पर बारी मेरी लाइन नंबर. मैं करने के लिए नीचे स्क्रॉल अगर मैं, क्या देखेंगे लाइन 62, बिल्कुल लाइन है कि हम पर रोक दिया. तो यहाँ इस लाइन, 62, है हम हो रहे हैं के बारे जहां. तो अब GDB में, मुझे आगे जाना है और लिखते हैं अब अगले, यह जा रहा है दर्ज उस पंक्ति पर अमल. और देखा, हम हैं जी खिड़की तथाकथित. तो क्या एक GWindow साथ अपरिचित चिंता करने की नहीं है. कल्पना के रूप में, यह करने के लिए आप का परिचय देंगे अच्छी तरह से walkthrough वीडियो की एक संख्या के रूप में कल्पना में एम्बेडेड. लेकिन अब यह एक बनाते हैं थोड़ा और अधिक दिलचस्प. मुझ पर इस विंडो को ले चलो किनारे एक छोटा सा. मुझे खिड़की एक छोटे से बनाते हैं बड़ा तो मैं और अधिक देख सकते हैं. और अब मुझे आगे चलते हैं और फिर आगे क्या. और मेरे ईंटों रहे हैं. मैं फिर से अगले प्रकार हैं अब मैं गेंद देख. और मैं फिर से अगले प्रकार अगर अब मैं चप्पू देखें. और सौभाग्य से इस जीएडिट नहीं है वास्तव में मुझे दिखाकर सहयोग मैं चाहता हूँ कि सब कुछ. लेकिन अब मैं अगले फिर से करते हैं, अगले फिर से, मैं अभी कर रहा हूँ कुछ चर की घोषणा. और मैं किसी भी एक मुद्रित कर सकते हैं बाहर इन लोगों की. छापा ईंटों, प्रिंट जीवन. और अब मैं ऐसा करना जारी अगर अगले, मैं हो जाएगा कि नोटिस उस लूप के अंदर. लेकिन कोड लागू करने जा रहा है वास्तव में मैं उम्मीद के रूप में. मैं इस समारोह में जब मारा तो, रुको क्लिक के लिए, यह क्या हो रहा है यह सचमुच कि. इसलिए मैं नियंत्रण खो दिया है प्रतीत होता है कार्यक्रम खत्म. GDB मुझे एक और शीघ्र नहीं दे रहा है. लेकिन चिंता नहीं. मेरे खेल में जाओ, कहीं क्लिक करें. और देखा, अब यह 86 लाइन के लिए आय. तो फिर, यह है, अंत में, अमूल्य है डिबगिंग समस्याओं के लिए. आप सचमुच के माध्यम से कदम कर सकते हैं क्योंकि अपने कोड, प्रिंट बाहर बातें और ज्यादा, अधिक, ज्यादा. लेकिन अब के लिए, अकेले उन उपकरणों बहुत दूर आप मिलना चाहिए. तो हम एक बार देख ले रही है, ज़ाहिर है, कर रहे हैं अचानक ग्राफिक्स पर अब, सब. और अब हमारी दुनिया एक छोटे से हो जाता है अधिक दिलचस्प. और आप में से कुछ से, शायद, पता हम इन वीडियो है कि ऑनलाइन आप देख रहा है कि शॉर्ट्स समस्या सेट के भाग के रूप में. और वे जान - बूझकर, गोली लगी है, एक सफेद पृष्ठभूमि में. और उनमें से कुछ शिक्षण है पर कुछ पाठ ड्राइंग अध्येताओं मढ़ा है कि स्क्रीन उनमें से पक्ष पर. लेकिन जाहिर है, यह सब नहीं है कि असली दुनिया में दिलचस्प. यह एक साथ सिर्फ एक व्याख्यान कक्ष है बड़ी सफेद स्क्रीन और एक पृष्ठभूमि. और हमारे अद्भुत उत्पादन टीम क्रमबद्ध करें सब कुछ सुंदर लग रही हो बाहर फसल से इस तथ्य के बाद या कुछ भी overlaying हम करते हैं या नहीं करना चाहती. अब बस इस सप्ताह के लिए प्रेरित करने के लिए वास्तव में, जहां आप जा सकते है, अंत में, कंप्यूटर विज्ञान के साथ. बस समस्या के बाद चार सेट नहीं. लेकिन एक और पाठ्यक्रम या एक पूरे के बाद पाठ्यक्रम यह आश्चर्यजनक है कि क्या आप कर सकते हैं पदों की में इन दिनों कर विशेष रूप से ग्राफिक्स. आप में से कुछ देखा है हो सकता है ऑनलाइन के आसपास बह रही है. लेकिन मैं मैं के लिए, आपको दिखाने लगा सिर्फ एक मिनट की जोड़ी, क्या की एक झलक कंप्यूटर प्रौद्योगिकी और क्या cgi, कंप्यूटर ग्राफिक्स इन दिनों क्या कर सकते हैं एक परिचित गीत के साथ और शायद फिल्म. [संगीत - लाना डेल रे, "युवा और सुंदर] स्पीकर 1: यह सिर्फ एक छोटा सा है अद्भुत, शायद, बस कैसे सर्वव्यापी - [वाहवाही] स्पीकर 1: मैं बस इसे डाउनलोड किया. लेकिन यह सिर्फ मुझे लगता है, वास्तव में आश्चर्यजनक है कैसे सर्वव्यापी सॉफ्टवेयर और कोड और इस औजार की तरह वास्तव में कर रहे हैं. तो उस दिशा का एक स्वाद है जिसमें आप जा सकते हैं. ओह, कोई और अधिक उपकरण आज. वैसे, यह वास्तव में दुखद समय है बिंदु को देखते मैं सिर्फ बनाने की कोशिश की. ठीक है, तो चलो लांच फ्यूजन फिर से. मुझे बाद में याद दिलाना. सब ठीक है, और आप एक मिल गया है चाहिए आप कैसे मिला अगर एक अलग रूप में ईमेल उस तरह के नोटिस. ठीक है, तो लगता है कि पिछले सप्ताह याद हम इस पर वापस छील करने के लिए शुरू कर दिया बाद में स्ट्रिंग के रूप में जाना जाता है. स्ट्रिंग है कि एक डेटा प्रकार याद करते हैं CS50 पुस्तकालय में घोषित कर दिया. और यह प्रशिक्षण पहिये का हिस्सा है कि अब बंद रखने के लिए शुरू हो जाएगा. यह जल्दी पर एक उपयोगी अवधारणा थी. लेकिन अब यह अधिक हो रहा है दिलचस्प और अधिक शक्तिशाली वास्तव में, हुड के नीचे देखते हैं कि एक स्ट्रिंग, हम अभी क्या कहा था है? हाँ, तो यह * एक तथाकथित चार है. और * कि वहाँ वहाँ अर्थ शामिल पते को किसी तरह का. आप चार जब कहते हैं और इसलिए * आप सिर्फ मतलब जिसका डेटा प्रकार एक चर एक है अब सूचक. सितारा वहाँ वहाँ तथ्य यह है कि बस आप घोषणा कर रहे हैं इसका मतलब है कि एक सूचक तथाकथित. और कि सूचक जाहिरा तौर पर करने जा रहा है के, के पते की दुकान बेशक, एक चार. अब क्यों यह समझ पड़ता है? खैर, एक स्ट्रिंग क्या है हुड के नीचे? खैर, कुछ समय के लिए हम कह रहा हूँ हुड के नीचे एक स्ट्रिंग है कि उदाहरण के लिए सिर्फ एच ई एल एल ओ,. लेकिन हम इस बारे में बात की है किया जा रहा है, अनिवार्य रूप से, एक सरणी. और एक सरणी तो एक छोटी सी लग रही होगी इनमें से प्रत्येक के साथ, इस तरह से अधिक एक टुकड़ा उठा रहा है. और फिर हम वहाँ कहा है कि वापस यहां कुछ खास, बैकस्लैश 0, या अशक्त टर्मिनेटर. तो यह सब समय, इस यहाँ एक स्ट्रिंग किया गया है. लेकिन वास्तव में, एक स्ट्रिंग है वास्तव में एक पते. और पते, हम देखेंगे, अक्सर हैं सम्मेलन द्वारा 0x की शुरुआत में लगाए. 0x क्या निरूपित करता है? किसी को पता है? तो यह सिर्फ हेक्साडेसिमल मतलब है. तो आप पीएसटी से, वास्तव में, याद हो सकता है 1, मेरा मानना ​​है कि वार्म अप में से एक वास्तव में के बारे में पूछे जाने वाले प्रश्नों इसके अलावा में हेक्साडेसिमल नोटेशन द्विआधारी और दशमलव. और यहाँ प्रेरणा है हेक्साडेसिमल साथ आप 16 अपने निपटान में अंक. 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, पीछा ए, बी, सी, डी, ई, एफ द्वारा. और आप उन सभी तक गिनती, तो आप 16 के कुल मिलता है. तो इस के साथ इसके विपरीत में है दशमलव, हम 10 है, जहां अंक, 0 नौ के माध्यम से. यह द्विआधारी के साथ इसके विपरीत में है हम बस 0 और 1 है जहां. लेकिन तुम सिर्फ कर सकते हैं दिन के अंत में एक ही नंबर का प्रतिनिधित्व करते हैं, लेकिन कुछ अलग ढंग से. और हेक्साडेसिमल आम है क्योंकि यह पता चला है - और हम यह देख लेंगे बाद में पाठ्यक्रम - हम मिल भी जब के संदर्भ में वेब प्रोग्रामिंग करने के लिए एचटीएमएल और रंग कोड, हेक्साडेसिमल अच्छा है. प्रत्येक अंक, पता चला है, क्योंकि चार बिट्स पूरी तरह से प्रतिनिधित्व करता है. तो यह सिर्फ तरह लाइनों के ऊपर अच्छी तरह से हम अंत में देख लेंगे. तो इस Ox123 या कुछ और हो सकता है कि, denoting पते 123 की तरह कहीं के अंदर मेरे कंप्यूटर की मेमोरी. लेकिन हां, कुछ समस्याएं उत्पन्न होती हैं क्योंकि यह अंतर्निहित की कार्यान्वयन. और मैं एक वार में ले लिया है कि याद इस तरह एक समारोह को लागू - पिछले हफ्ते पानी का छींटा 0 डॉट ग तुलना, कि यह था यह लग रहा था जैसे कि भले ही ठीक है, यह बस की तुलना नहीं की थी दो तार सही ढंग से. मैं मुख्य दूर फेंक दिया है, और मैं फेंक दिया दूर टिप्पणियां बस में पर ध्यान केंद्रित करने के लिए यहाँ ब्याज की है कि कोड. यह छोटी गाड़ी है और क्योंकि यह लाल रंग में है. किस कारण से? खैर, वहाँ शीर्ष पर मैं जब घोषित एक स्ट्रिंग, क्या वास्तव में चल रहा था हुड के नीचे? खैर, मेरे लिए खत्म हो जाने दो यहाँ स्क्रीन और उस आकर्षित. तो मैं फिर से, घोषित स्ट्रिंग है GetString. इसलिए मैं अब आगे जाने के लिए जा रहा हूँ क्या यह सच है के लिए आकर्षित. यह यहाँ एक वर्ग होने जा रहा है. और मैं दावे के लिए जा रहा हूँ कि 32 बिट है कि. कम से कम यह आमतौर पर है CS50 पर कम से कम कंप्यूटर के एक बहुत में उपकरण. मैं यह कॉल करने के लिए जा रहा हूँ. लेकिन अब याद है कि हम GetString कहा जाता है. तो रिटर्न GetString, बेशक, एक स्ट्रिंग. एच ई एल एल ओ में उपयोगकर्ता प्रकार दर्ज करते हैं स्ट्रिंग नमस्कार लौट जाता है. और कि स्ट्रिंग, हम सिर्फ इतना कहा, के रूप में समाप्त होता है अपने कंप्यूटर की स्मृति में कहीं न कहीं ऊपर अंत में एक बैकस्लैश 0 के साथ. मैं सरणी की तरह इस आकर्षित करेंगे - या पात्रों के सन्निहित ब्लॉक - यह वास्तव में है कि. और अब, क्या GetString है वास्तव में लौटने? GetString क्या लौट कर दिया गया है इस बार सब के सब? खैर, हम पिछले सप्ताह में कहते हैं, यह एक तार आए. लेकिन अधिक तकनीकी रूप से, क्या करता है जाहिरा तौर पर लौटने GetString? दर्शक: एक पता. स्पीकर 1: एक पते. विशेष रूप से यह रिटर्न पता जो भी है बहुत पहली काटने,. मैं सिर्फ एक, दो, तीन का उपयोग कर रखना यह सुविधाजनक है क्योंकि. यह पहले से पता देता है स्ट्रिंग में चरित्र. और हम पिछले सप्ताह कहा था कि कि पर्याप्त है. जहां हम हमेशा से समझ सकते हैं क्योंकि स्ट्रिंग के अंत बस से एक के लिए के साथ, हो सकता है, इस पर पुनरावृति पाश या एक जबकि पाश या की तरह कुछ कि, बस "बैकस्लैश 0" की तलाश में, विशेष प्रहरी चरित्र. और फिर हम जानते हैं कि स्ट्रिंग लंबाई का होना होता है - इस मामले में - पाँच. तो तकनीकी GetString क्या करता है यह इस मामले में Ox123 रिटर्न है. और तकनीकी रूप से तो क्या होता हम, एस के अंदर, Ox123 कि दुकान. दिन के अंत में, भले ही इस , संकेत, वे नई अवधारणा हो जाता है बस चर. लेकिन वे बिट्स की दुकान के लिए होता है कि सामूहिक रूप से एक पते का प्रतिनिधित्व करते हैं. तो तकनीकी तौर पर सब वे हो जाता है s में भंडारित Ox123 है. लेकिन मनुष्य के रूप में हम - आगे आज सहित - वास्तव में परवाह नहीं जा रहे हैं, आम तौर पर, क्या वास्तविक पता है स्मृति का कुछ हिस्सा की. यह सिर्फ विस्तार का स्तर कम करने के लिए है बौद्धिक रूप से दिलचस्प होगा. इसलिए मैं इस पूर्ववत करने के लिए जा रहा हूँ. और इसके बजाय, उच्च स्तर, बस कहना कि हम संकेत के बारे में बात कर रहे हैं जब मैं अभी और अधिक आकर्षित करने के लिए जा रहा हूँ बता देते हैं कि उपयोगकर्ता के अनुकूल तीर एक ही विचार और सार दूर क्या वास्तविक के ब्यौरे अंतर्निहित पता है. अब हम वापस कोड के लिए जाना है, तो क्या पिछले सप्ताह हुआ हम स्ट्रिंग टी है अगर GetString के बराबर होती है? खैर, मैं फिर से, हैलो में टाइप मैं पाने के लिए जा रहा हूँ इस समय स्मृति का एक और हिस्सा. एच ई एल एल ओ बैकस्लैश 0. लेकिन मैं GetString कहा जाता है क्योंकि एक दूसरी बार - और मैं देख रहा से यह पता GetString के लिए स्रोत कोड - भी यह हैलो था कि संयोग है यद्यपि दो बार में टाइप किया, GetString नहीं है अनुकूलन करने की कोशिश करने जा रहा और चालाक हो. यह सिर्फ एक हिस्सा का हो रहा है है जो कंप्यूटर से स्मृति एक और पते पर होने जा रहा. के मनमाने ढंग से सिर्फ 456 कहते हैं. और फिर क्या यह वापस करने के लिए जा रहा है? यह 456 वापस जाने के लिए जा रहा है और टी में स्टोर. तो क्या वास्तव में पर चल रहा है, बाएं हाथ की ओर मैं एक और हिस्सा है है स्मृति के 32 बिट आम ​​तौर पर. और वहाँ में Ox456 जाना जा रहा है. लेकिन फिर से, मैं इन में कोई दिलचस्पी नहीं हूँ अब और विशेष संख्या. मैं सिर्फ सिद्धांत के लिए जा रहा हूँ एक तीर के रूप में इसे खींचना. तो यह अब एक नई व्याख्या है. लेकिन यह है कि एक ही सटीक विचार है यह सब समय हो गया. और तो कारण तो, कि यह पहले तुलना के संस्करण छोटी गाड़ी था यही कारण है कि पिछले सप्ताह है? एस के बराबर होती है यदि आप ऐसा करते हैं टी आप वास्तव में क्या कर रहे हैं हुड की तुलना के नीचे? आप पते तुलना कर रहे हैं. और बस intuitively, स्पष्ट रूप से, Ox123 Ox456 बराबर करने के लिए नहीं जा रहा है. उन लोगों की संख्या, उन बिट्स सिर्फ अलग हैं. और इसलिए लगातार पिछले एक सप्ताह यह कहा यदि आप अलग अलग बातें लिखें भले ही शब्द वही शब्दशः गया. इसलिए हम इसे ठीक. आम आदमी की दृष्टि में, तय क्या था? दर्शक: एक समारोह का प्रयोग करें. स्पीकर 1: एक समारोह का प्रयोग करें. या सितारों निश्चित रूप से शामिल रहे हैं, लेकिन क्या ऐसा करने के लिए एक समारोह का उपयोग करें? दर्शक: तार की तुलना करने के लिए. स्पीकर 1: तार की तुलना करने के लिए. तो यहाँ मूलभूत समस्या थी मैं अभी विचार कर रहा था कि द्वारा परिभाषित किया जा करने के लिए तार की गुणवत्ता उनके पतों की तुलना. और जाहिर है कि अब एक बार सिर्फ गूंगा है आप पर क्या हो रहा है समझ में हुड के नीचे. वास्तव में देखने के लिए तार की तुलना करने के लिए अगर वे रास्ते में बराबर कर रहे हैं कि एक मानव बराबर होने दो तार पर विचार करेगा हम उनके चरित्र की तुलना करने की जरूरत है चरित्र के लिए चरित्र. अब मैं कर सकता था यह बहुत tediously. लेकिन परिचित, हम कर रहे हैं पाश के लिए एक का उपयोग कर. और बस के ब्रैकेट तुलना मैं टी ब्रैकेट मैं के खिलाफ. एस ब्रैकेट मैं प्लस 1 टी ब्रैकेट के खिलाफ मैं प्लस 1, और बहुत आगे है, अंदर पाश किसी तरह का. और मुझे लगता है कि किसी भी दो अक्षर हाजिर अगर मैं उह, एस एहसास है कि अगर अलग है, या टी की तुलना में कम या टी से अधिक समय मैं तुरंत, झूठा कह सकता वे एक ही नहीं कर रहे हैं. लेकिन मैं एस और टी के माध्यम से मिलता है और कहते हैं कि अगर एक ही, एक ही, एक ही, एक ही, एक ही, अंत की दोनों तार, मैं कह सकता हूँ यह सच है कि वे बराबर हैं. खैर, शुक्र है, साल पहले किसी ने हमारे लिए उस कोड लिखा था. और वे यह कहा जाता है StrComp स्ट्रिंग के लिए की तुलना करें. और यह एक छोटे काउंटर भले ही सहज ज्ञान युक्त, StrComp 0 देता उन अगर दो तार, एस और टी वही कर रहे हैं. लेकिन यह नकारात्मक मान देता है अगर है वर्णानुक्रम टी या पहले आना चाहिए यह आना चाहिए अगर सकारात्मक मूल्य वर्णानुक्रम टी के बाद. क्या तुमने कभी कुछ सॉर्ट करना चाहते हैं तो, यह StrComp उपयोगी है निकली. यह बस नहीं कहना है क्योंकि हाँ या ना के बराबर या नहीं. यह आप आदेश देने की भावना देता है एक शब्दकोश सकता है. तो StrComp, एस अल्पविराम टी बराबरी 0 के बराबर होती है इसका मतलब है कि तार सही मायने में समान हैं. इस समारोह में लिखा था कि जो कोई भी क्योंकि साल पहले संभवतः पाश के लिए एक प्रयोग एक समय पाश या ऐसा कुछ या फिर वर्ण से अधिक एकीकृत करने के लिए और फिर और फिर. लेकिन समस्या यह है कि दो यहाँ पड़ी. इस copy0.c था. और लाल रंग में दो है यह त्रुटिपूर्ण है क्योंकि. और हम यहाँ क्या किया? खैर, सबसे पहले मैं GetString कहा जाता है. और मैं में वापसी मान संग्रहीत. तो यह है कि बहुत ज्यादा के रूप में ही है तस्वीर की इस शीर्ष भाग. लेकिन उसके बाद क्या आता है? खैर, मुझे आगे जाना है और छुटकारा मिलता है इस की एक पूरी गुच्छा की. हम जहां हम अभी तक समय में उल्टा करेंगे अब के साथ संगत है, जो एस रेखा से ऊपर वहाँ एक. मैं देखता. एस के बराबर है 0 के बराबर होती है. अब, एक त्वरित तरफ ध्यान दें, जब GetString 0 वापसी हो सकती है? पर्याप्त स्मृति नहीं है. है ना? यह ऐसा होने जा रहा है कि दुर्लभ है, निश्चित रूप से एक कंप्यूटर पर है कि मिला megs के सैकड़ों या राम की भी है GIGS. लेकिन यह हो सकता है, सिद्धांत रूप में, वापसी 0, खासकर अगर उपयोगकर्ता सहयोग नहीं करता है. आप नहीं है की तरह नाटक करने के लिए तरीके है inputted कुछ और चाल लौटने में GetString प्रभावी रूप से 0. तो यह है कि के लिए जाँच करने के लिए जा रहा है. क्योंकि तुम में से किसी भी शुरू कर दिया है अगर पहले से ही, दोष विभाजन मिलता है - शायद एक स्रोत रहा है जो कुछ हताशा की - उन लगभग हमेशा परिणाम हैं स्मृति से संबंधित त्रुटि की. किसी भी तरह आप एक के संबंध में गड़बड़ आपको पता ही नहीं चला भले ही सूचक, एक सूचक नहीं था. तो अगर आप प्रेरित हो सकता है विभाजन के रूप में जल्दी सप्ताह एक के रूप में उपयोग कर गलतियाँ पाश या थोड़ी देर के लिए एक तरह से कुछ पाश और बहुत दूर जा रहा द्वारा एक सरणी कुछ सरणी की सीमाओं अतीत कि आप में सप्ताह दो में, घोषित विशेष. तुम भी समस्या में यह किया होगा ब्रेकआउट के साथ चार सेट. आप शायद नहीं देखा है हालांकि के लिए वितरण कोड में किसी भी सितारे ब्रेकआउट, यह पता चला है कि उन GRect और GOval और अन्य ऐसी बातें, जो लोग वास्तव में संकेत दिए गए हैं हुड के नीचे. लेकिन हमारे जैसे स्टैनफोर्ड,, की तरह छुपाती कम से कम पुस्तकालयों के लिए कि विस्तार उद्देश्यों, बहुत जैसे हम करते हैं स्ट्रिंग और चार * के लिए. लेकिन GRect और GOval और उन के सब बातें तुम लोग कर रहे हैं या का उपयोग किया जाएगा इस सप्ताह अंततः हैं स्मृति पते. तुम बस यह पता नहीं है. तो यह शायद, तो आश्चर्य की बात नहीं है आप कुछ पर यात्रा कर सकते हैं कि विभाजन दोष. लेकिन क्या, अब यहां दिलचस्प है हम 0 हम क्या के लिए जाँच के बाद अगर स्ट्रिंग टी एस हो जाता है. खैर, मुझे टी की घोषणा करते हैं. मैं एक वर्ग के रूप में आकर्षित करने के लिए जा रहा हूँ, 32 बिट, टी कहते हैं. और फिर मैं क्या करने जा रहा हूँ एस हो जाता है. खैर, इसका क्या मतलब है? खैर, यह सोचने के लिए थोड़ा मुश्किल है इसके बारे में बुद्धिमान तस्वीर. लेकिन है के बारे में सोचते हैं क्या एक्स के अंदर है? इस चर के अंदर सचमुच क्या है? मूल्य Ox123. जब मैं कहता हूँ तो स्ट्रिंग टी, एस हो जाता है कि बस सचमुच नंबर लेने का मतलब एस में, Ox123 है और Ox123 यह डाल जो. या सचित्र रूप से, अगर मैं एक तरह से अमूर्त दूर है कि विस्तार से यह है सचमुच ऐसा करने का प्रभाव इस रूप में अच्छी तरह से. तो अब, वापस पिछले हफ्ते जब लगता है हम पूंजीवादी टी. मैं करने के लिए रवाना टी ब्रैकेट 0 किया. खैर, टी ब्रैकेट 0, भले ही यह एक है हालांकि के रूप में सूचक, आप इसे इलाज कर सकते हैं यह एक वर्ग के साथ, एक सरणी है ब्रैकेट अंकन. इसलिए जहां टी ब्रैकेट 0 है? खैर, यह ज है. और इसलिए हम, कोड की है कि लाइन का उपयोग करते समय दो कि सी type.h में है, जो ऊपरी हेडर फाइल, कि जहां है यह घोषित है. लेकिन आप इस एच. capitalizing रहे हैं बेशक, यह है कि एक ही सटीक घंटे है एस के अंदर, तो बात करो. और इसलिए अब आप बदल गया है या है मूल और दोनों पूंजीकृत तथाकथित प्रतिलिपि. आप में एक प्रतिलिपि नहीं बना था क्योंकि एक मानव इसे देखना चाहते हैं जिस तरह से कि. यहाँ तो तय क्या था, पिछले सप्ताह copy1.c में? कार्य, इसलिए हम वास्तव में कर सकता है स्ट्रिंग कॉपी. और मौलिक, क्या हम क्या ज़रूरत है स्ट्रिंग कॉपी करने के क्रम में करते हैं? वैसे, यहाँ यह हरी संस्करण में मैं हूँ यह काफी कम स्तर क्या करने जा रहा. कार्य वास्तव में कर रहे हैं वे इस के साथ मदद कर सकता है. लेकिन सबसे बुनियादी एक है, और सबसे परिचित एक, कम से कम, जल्दी ही हो जाएगा हमें परिचित, निम्नलिखित है - इसलिए पहली पंक्ति पर एक अब हरे रंग में कोड की. मैं सिर्फ * चार के रूप में दुबारा लिखा. कोई कार्य नहीं है वहाँ अंतर. मैं सिर्फ CS50 पुस्तकालय दूर फेंक दिया और मैं * यह एक चार है क्या यह बुला रहा हूँ. वहाँ थे क्योंकि अब, डॉट डॉट डॉट नहीं है कि कुछ त्रुटि जाँच फिर से इस बारे में बात करने के लिए दिलचस्प. तो अब टी घोषित किया जाता है. यह भी * एक चार है. तो मैं पर एक छोटे से वर्ग को आकर्षित किया पहले की तरह स्क्रीन. लेकिन दाएँ हाथ की ओर पर, malloc, हम है स्मृति आवंटित कहा. तो स्मृति की कुछ हिस्सा आवंटित. और कितने बाइट्स हम वास्तव में है आवंटित करना चाहते हैं, यह प्रतीत होता है? खैर, एस की स्ट्रिंग लंबाई. यह नमस्कार है तो वह है पाँच होने जा रहा. हम एच ई एल एल ओ कहूँगा. तो पांच बाइट्स. लेकिन तब प्लस 1, क्यों 1? 0 चरित्र. हम इस आदमी के लिए हम कमरे में छोड़ नहीं करते हैं गलती से एक की स्थिति पैदा हो सकती है स्ट्रिंग एच ई एल एल ओ है. और फिर अगली बार GetString है कहा जाता है, और मैं उदाहरण के लिए, में लिखें दाऊद, डी ए वी मैं डी, कंप्यूटर जा रहा है बात ये है कि लगता है कि वास्तव में है वहाँ एच ई एल-L-O-D-A-V-I-D क्योंकि कोई उन शब्दों के बीच में टूट गया. इसलिए हम चाहते हैं कि ब्रेक की जरूरत है. तो हम पांच नहीं करना चाहती. हम छह बाइट्स चाहते हैं. और बाइट्स मैं कहता हूँ. लेकिन यह वास्तव में चार की समय आकार है. तकनीकी तौर पर चार लगभग है हमेशा एक बाइट. लेकिन सिर्फ हमारे कोड पोर्टेबल बनाने के लिए उस पर काम करता है तो तो बात है, विभिन्न कंप्यूटरों भी वे सकता है अगर नीचे कुछ अलग हो हुड, मैं सामान्य रूप से करने के लिए जा रहा हूँ चार का कहना आकार इतना है कि मेरे कोड हमेशा काम करते हैं. और मैं सिर्फ यह फिर कंपाइल करने की जरूरत नहीं है मैं अपने कंप्यूटर को उन्नत या उपयोग क्योंकि कुछ अलग मंच. इसलिए मैं 6 बार आकार के लिए मिल गया है 1 होना होता है जो एक चार,. इसलिए कि malloc सकता है इसका मतलब मुझे छह बैट दे. कि वास्तव में क्या कर रही है? खैर, मुझे यहाँ समय में वापस रोल हम कहानी में हैं, जहां के लिए. मैं यहाँ वापस जाओ तो, अगर मैं घोषित किया है एक चार * टी कहा जाता है. मैं अब छह बाइट्स के लिए malloc बुलाया है. और अब मैं उन छह आकर्षित करने के लिए जा रहा हूँ बस सरणी में पहले की तरह बाइट्स. लेकिन मैं वास्तव में नहीं जानता कि क्या इस सरणी के अंदर. आप स्मृति आवंटित अगर यह पता चला है कि आप कुछ है कि वहाँ पर भरोसा नहीं कर सकते वहाँ मूल्य में जाना जाता है. यह कुछ के द्वारा प्रयोग किया जा सकता था वरना, कुछ अन्य समारोह, कुछ अन्य आप ने लिखा है कि कोड की लाइन. तो हम आम तौर पर इन कचरा फोन करता हूँ मूल्यों और के रूप में, शायद, उन्हें आकर्षित सिर्फ इतना है कि हम यह दर्शाता प्रश्न चिह्न, वहाँ वास्तव में क्या है पता नहीं है. और इतनी लंबी है कि कोई बड़ी बात नहीं है के रूप में हम उन के ऊपर लिख काफी होशियार हैं कचरा संख्या के साथ मूल्यों या हम के बारे में परवाह है कि घर का काम. इसलिए इस मामले में मैं क्या करने जा रहा हूँ? खैर, कोड की अपनी लाइन अगले, मैं चार है. INT मैं 0 मिल, एन हो जाता है एस की स्ट्रिंग लंबाई. पाश के लिए तो एक परिचित. मैं कम से कम या n के बराबर है, जो आमतौर पर ऊपर है. लेकिन इस बार यह जानबूझकर है. मैं + +, और फिर मैं बस टी ब्रैकेट मैं हो जाता है. मेरी तस्वीर को इस तरह दिखता है क्योंकि टी में संग्रहीत इस पल है, स्मृति की कि यादृच्छिक हिस्सा का पता जिनके मूल्यों अज्ञात हैं. लेकिन जैसे ही मैं टी ब्रैकेट कर के रूप में 0 कि मुझे यहाँ डालता है. और क्या समाप्त होता है वहाँ तैयार हो रही है? हम ज डाल खत्म होता है. कि ब्रैकेट 0 में क्या है वजह. और फिर एक ही बात ई, और एल, और एल, और ओ. एन, क्यों मैं के माध्यम से ऊपर चली गई n करने के लिए एक बराबर है? 0 चरित्र की वजह से. तो बस, तो स्पष्ट होना, अगर मैं वास्तव में मिटा जो भी इन कचरा मान रहे हैं और फिर वास्तव में आकर्षित मैं क्या उम्मीद है, यह है ब्रैकेट 1, 2 है 3, 4, प्लस कि पीछे चल रहा है नए चरित्र. और इसलिए अब हम डॉट अतीत जारी रखा, तो डॉट, यह सही संस्करण में डॉट और टी ब्रैकेट 0 मैं होता, की पूंजीकृत बेशक, capitalizing जा सिर्फ इस जो धारणात्मक यहाँ अकेला,, अंततः लक्ष्य था. ताकि सभी सूचक है. और तुम हफ्तों के लिए उन्हें का उपयोग किया गया अब तार के संदर्भ में. लेकिन वे कर रहे हैं हुड के नीचे एक छोटे से अधिक जटिल. लेकिन अगर आप इस में उनके बारे में अगर आपको लगता है मुझे लगता है वे कर रहे हैं कि प्रस्ताव सचित्र रूप शायद सब कि डरावना नहीं के रूप में वे पहली पहली नज़र में लग सकता है, विशेष रूप से इस तरह के नए वाक्य रचना के साथ. संकेत पर कोई प्रश्न, तार, या घर का काम? हाँ? दर्शक: तुम वापस जा सकते हैं [सुनाई] करने के लिए? स्पीकर 1: यकीन है. दर्शक: तो कैसे अपने बहुत पिछले में आ गए रेखा, आप एक * टी लाइन नहीं है और लाइन में एक * है? आप के लिए संदर्भ नहीं है - स्पीकर 1: आह, एक बहुत अच्छा सवाल है. क्यों मैं एक * टी और एक * एस नहीं है? संक्षेप में, पिछले हफ्ते की तरह में क्योंकि हमारी समारोह स्वैप, मैं कहना था कि जब आप से एक सूचक साधन मिल गया है जैसा कि हमने किया है कि तुम वहाँ जाना जो शारीरिक रूप से मंच पर था, के लिए वास्तव में सितारा ऑपरेटर का उपयोग करें. यह पता चला है कि इस वर्ग कोष्ठक अंकन हम वाक्यात्मक फोन करता हूँ क्या है सिर्फ एक सेक्सी रास्ते से है जो शुगर, इसके लिए आशुलिपि संकेतन है कह वास्तव में क्या आप का वर्णन कर रहे हैं. लेकिन यह एक छोटे से अधिक सहज है. और बनाने के जोखिम पर इस लगते अधिक यह करने की जरूरत की तुलना में जटिल, क्या वास्तव में हो रहा है यहाँ निम्नलिखित है - मैं * टी कहते हैं कि करने के लिए जाने का मतलब पते टी में संग्रहीत. तो सचमुच, अगर टी जमा कर रहा है उस घंटे के पते शुरू में, * टी यहां जाने का मतलब है. अब, टी ब्रैकेट 0 क्या मतलब है? एक ही सटीक बात. यह सिर्फ एक छोटे से अधिक उपयोगकर्ता है लिखने के लिए अनुकूल है. लेकिन मैं अभी तक नहीं कर रहा हूँ. टी * एस हो जाता है * मैं अभी कुछ नहीं कह सकता. मैं तो कर रही होगी क्योंकि क्या? मैं ज, ज, ज, ज, ज डाल दिया होगा पूरी बात भर. है ना? * टी टी में पता करने के लिए जाना जाता है. लेकिन हम एक पाश के अंदर हो. और मैं क्या मूल्य बढ़ाने हूँ, बेशक, प्रत्येक यात्रा पर? मैं. लेकिन वहाँ एक मौका है यहाँ, सही? यह हो रही है जैसे यह लगता है हालांकि एक छोटे से अधिक परिष्कृत वर्ग कोष्ठक अंकन से हम कुछ समय के लिए उपयोग किया है - मुझे वहाँ मेरे ज परिवर्तन पूर्ववत करते हैं - यह अब एक छोटे से हो रही है, भले ही शौक़ीन, मूल विचार, अगर * टी यहाँ का मतलब है और * टी बस है टी में पता करने के लिए जाना. लेकिन टी में पता क्या था? हम प्रयोग कर रख संख्या? Ox456 तरह है कि वापस लाने सिर्फ चर्चा के लिए. खैर, मैं में ई में प्राप्त करना चाहते हैं टी स्ट्रिंग, मैं बस के लिए जाना चाहते अनिवार्य रूप से, 456. या यों कहें, 457. मैं सिर्फ एक जोड़ने की जरूरत है. लेकिन मैं सही, ऐसा कर सकते हैं? T, मैं रखना भले ही ड्राइंग क्योंकि यह अब एक तीर के रूप में, यह सिर्फ एक संख्या, Ox456. और मुझे लगता है कि एक या अधिक जोड़ने अगर मुझे लगता है कि मैं जोड़ने अगर आम तौर पर, मैं कर सकता हूँ मैं चाहता हूँ जहाँ वास्तव में वास्तव में मिलता है. इसलिए मैं वास्तव में ऐसा करते हैं - और यह अब क्या कहा जाता है है गणित संकेतक - मैं इस लाइन को हटा सकते हैं. सच कहूँ तो, कौन सा है, मैं साफ लगता है और पढ़ने के लिए अनुकूल है एक छोटे से अधिक उपयोगकर्ता. लेकिन यह कोई कम सही है. कोड की यह पंक्ति अब उपयोग कर रहा है सूचक गणित. यह करने के लिए जाने के कह रहा है निम्न पते - टी की शुरुआत है, जो कुछ भी है, जो टी प्लस मैं, जो शुरू में है जो महान है, 0 है. कि टी की शुरुआत का मतलब है क्योंकि प्लस 1, प्लस 2, प्लस 3, और बहुत आगे है. और एस के साथ ही सौदा. इस के लिए तो वाक्यात्मक चीनी. लेकिन वास्तव में क्या हो रहा है समझ हुड के नीचे, मैं तर्क होता है, अपने आप में और वास्तव में उपयोगी है. क्योंकि इसका मतलब अब वहाँ नहीं है और अधिक जादू चल रहा हुड के नीचे. बहुत से अधिक होने जा रहा नहीं कर रहे हैं हम आप के लिए वापस छील कर सकते हैं कि परतें. यह सी है. और इस प्रोग्रामिंग है. बहुत अच्छा सवाल. ठीक है, तो यह था कि छोटी गाड़ी जैसा कि मैंने पहले जिक्र किया गया कार्यक्रम. स्वैप त्रुटिपूर्ण था. काम करने लगते किया है. सिर्फ दूध की तरह याद है कि और संतरे का रस - मैं शुरू कर दिया है जो आज के प्रदर्शन पीने. तो सिर्फ संतरे का रस के साथ और के रूप में दूध, हम उपयोग करने के लिए किया है एक अस्थायी चर, tmp, पकड़ करने के लिए एक अस्थायी रूप से इतना है कि हम फिर सकता है अपने मूल्य को बदलने और फिर बी का अद्यतन करें. लेकिन इस समारोह में, हम यह बात कही, या इस समारोह था जिसमें कार्यक्रम लिखित गलत और त्रुटिपूर्ण था, क्यों? हाँ? दर्शक: [सुनाई]. स्पीकर 1: बिल्कुल, जब आप स्वैप कहते हैं - या अधिक आम तौर पर, जब आप किसी भी समारोह में सबसे कहते हैं - उस समारोह के लिए बहस कर रहे हैं अगर आदिम, तो बात है, ints और घर का काम और डबल्स और मंगाई, चीजों के बिना स्टार, आप की एक प्रतिलिपि में गुजर रहे हैं तर्क. एक्स 1 था और वाई 2 था तो, अगर एक जा रहा है 1 हो सकता है और बी 2 होने जा रहा है. लेकिन वे अलग हिस्सा बनने जा रही हैं के टुकड़े की, अलग हिस्सा भंडारण के होना होगा कि स्मृति समान मूल्यों. इसलिए इस कोड सुपर एकदम सही है ए और बी गमागमन पर. यह गमागमन पर अच्छा नहीं है - पिछले हफ्ते के उदाहरण में - एक्स और वाई. फिर, वे कर रहे हैं क्योंकि गलत दायरे में. अब, हम यह कैसे तय करने के बारे में जाना था? हम समारोह बनाने के लिए किया था एक छोटे से भद्दा लग रही हो. लेकिन फिर, क्या विचार यह सिर्फ मतलब है. और वास्तव में, स्थिरता के लिए, मुझे जाने, यह करने के लिए समान है तो एक बात बदल हम अभी क्या किया. मैं पिछले हफ्ते उल्लेख किया है, यह नहीं है बात जहां यह जाता है. वास्तव में, आम तौर पर आप रखा जाएगा अगले चर नाम के लिए स्टार. लेकिन मैं यह थोड़ा आसान हो जाएगा लगता है * अगले करने के लिए विचार करने के लिए यह अर्थ के रूप में डेटा प्रकार एक सूचक है इस मामले में एक पूर्णांक के लिए. इसलिए मैं यहाँ क्या कर रहा हूँ? मैं मुझे एक पूर्णांक देना नहीं है कह रहा हूँ एक और int द्वारा पीछा किया, ए और बी उन्हें बुला. मुझे एक पूर्णांक का पता दे. मुझे एक और INT का पता दे. उन पतों ए और बी को बुलाओ. और फिर नीचे * संकेतन का उपयोग नीचे दिए गए, उन पतों से प्रत्येक के लिए जाना पाने के लिए या तो जरूरत के रूप में या अपने मूल्य निर्धारित किया है. लेकिन यहाँ एक अपवाद नहीं है. क्यों मैं tmp करने के लिए अगले एक * नहीं है? क्यों मैं उदाहरण के लिए, यह मत करो? मैं सिर्फ सभी जाना चाहिए ऐसा लगता है बाहर और पूरी बात सही है. हाँ? दर्शक: [सुनाई]. स्पीकर 1: मैं घोषित नहीं किया है एक स्ट्रिंग के रूप में tmp. तो यह, इस मामले में, घोषित होगा एक पूर्णांक का पता बनाने के लिए एक tmp. लेकिन यह है कि मैं चाहता हूँ कि काफी नहीं है क्या, कारणों की एक जोड़ी के लिए. दर्शक: आप उन्हें स्वैप करने के लिए नहीं करना चाहती. स्पीकर 1: बिल्कुल, मैं स्वैप करने के लिए नहीं करना चाहती tmp के साथ कुछ भी. tmp बस है सप्ताह एक चीज है. मैं चाहता हूँ कि एक चर रहा है कुछ संख्या में स्टोर करने के लिए. मैं भी पते के बारे में परवाह नहीं है इस पल में. मैं सिर्फ 32 बिट की जरूरत है या इसलिए एक पूर्णांक की दुकान है. और मैं उन 32 बिट में डाल करना चाहते हैं जो कुछ तो बात है, एक में नहीं है, लेकिन क्या अभी और अधिक सटीक होना, एक पर है. एक एक पता है, तो * एक है क्योंकि इसका मतलब वहां जाने के लिए और मूल्य 1 मिलता है. उदाहरण के लिए, पिछले हफ्ते के उदाहरण में या बी के मामले में, 2 की मूल्य मिलता है. तो क्या वास्तव में हो रहा है? मुझे यहाँ एक तस्वीर खींचना करते हैं कि करेगा केवल अलग आज की भाग तंग. लेकिन यह प्रकट करने के लिए जारी रहेगा कुछ समय के लिए. यह, मैं दावा, क्या आपके कंप्यूटर की है स्मृति आप एक चलाते समय की तरह लग रहा है कार्यक्रम, किसी भी कार्यक्रम है. आप बहुत शीर्ष पर एक कार्यक्रम चलाने के लिए आपके कंप्यूटर की रैम की - तो के बारे में सोच इस आयत, वास्तव में, के रूप में अपने कंप्यूटर की रैम या स्मृति, सभी 101 यह अरब बाइट्स, सभी दो अरब बाइट्स, यह सब दो गीगाबाइट, आपके पास मात्रा है जो भी हो, की एक आयत के रूप में आकर्षित करते हैं. और मैं दावा है कि आप एक कार्यक्रम चलाने के लिए माइक्रोसॉफ्ट वर्ड या क्रोम की तरह या ऐसा कुछ, बिट्स कि माइक्रोसॉफ्ट या कि गूगल ने लिखा है - उन कार्यक्रमों के मामलों में - आपके कंप्यूटर की मेमोरी में लोड कर रहे हैं वे अधिक से क्रियान्वित किया जा सकता है, जहां जल्दी और, सीपीयू में खिलाया जो कंप्यूटर का दिमाग है. और टीएएम में वे बहुत कम जमा कर रहे हैं इतनी बात करने के लिए अपने कार्यक्रम के ऊपर,. दूसरे शब्दों में, इस का एक हिस्सा है अगर स्मृति, आप डबल जब पर क्लिक करें माइक्रोसॉफ्ट वर्ड, बिट्स आ हार्ड ड्राइव से. वे राम में भरी हुई हो. और हम ऊपर से ही उन्हें भगाओ हूँ धारणा यह आयत की. खैर, अपनी स्मृति के बाकी है अलग अलग चीजों के लिए इस्तेमाल किया. ऊपर से ही आप को प्रारंभ देखना डेटा और uninitialize डेटा. इस के साथ, सबसे अधिक भाग के लिए, क्या करना है स्थिरांक या वैश्विक चर मूल्यों है कि. लेकिन उन एक और समय पर अधिक. तो फिर तुम ढेर है जो हम करने के लिए वापस आ जाएगा. लेकिन तल पर है कि हिस्सा है विशेष रूप से सही अब सार्थक. यह तथाकथित ढेर है. तो सिर्फ सबसे अधिक किसी भी विकास हॉल में की तरह यहाँ पर परिसर में, आप उन ट्रे है कि सिर्फ एक दूसरे के शीर्ष पर ढेर जिस पर आप भोजन और whatnot डाल सकता है. एक कंप्यूटर सिस्टम में ढेर बहुत समान है. ट्रे जबकि अलावा, हम में उपयोग के रूप में डायनिंग हॉल, ज़ाहिर है, मतलब है बातें ट्रे ले जाने के लिए या फ्रेम - हम उन्हें फोन करता हूँ - के रूप में एक कंप्यूटर की स्मृति धारण करने के लिए प्रयोग किया जाता है चर और मूल्यों. तो क्या वास्तव में चला जाता है हुड के नीचे? खैर, मेरे ऊपर फ्लिप यहाँ स्क्रीन करने के लिए. और चलो बस पर ध्यान केंद्रित करते हैं एक पल के लिए नीचे हिस्सा. यह मेरा के नीचे के हिस्से में है तो कंप्यूटर की स्मृति में यह पता चला जब मैं समारोह के मुख्य कहते हैं - , सच में, जो होता है स्वचालित रूप से मेरे लिए - मैं में स्मृति का एक हिस्सा मिलता है मेरे राम के नीचे तो बात करो. और यह जहां मुख्य की है स्थानीय चर जाना. यह हो सकता है जहां argc और argv है जाओ, और किसी भी चर मैं मुख्य के अंदर की घोषणा. वे नीचे अंत मेरे कंप्यूटर की रैम की. अब मुख्य एक समारोह कॉल लगता है कि यह पिछले सप्ताह की तरह, स्वैप पसंद है? खैर, हम अनिवार्य रूप से, एक नया ट्रे डाल एक स्मृति की मेरी हिस्सा पर नया फ्रेम,. और मैं के रूप में यह वर्णन करने के लिए जा रहा हूँ स्वैप समारोह से संबंधित. अब क्या स्वैप के अंदर है? खैर, पिछले सप्ताह के कार्यक्रम पर आधारित है और हम बस से एक अंश देखा, स्वैप के फ्रेम के अंदर, या स्वैप के पर ट्रे, क्या चर रहे हैं? वैसे, एक और बी. उन अपने स्थानीय तर्क थे, प्लस एक तिहाई, tmp. तो सच में, मैं यह आकर्षित कर सकता एक छोटे से अधिक सफाई से. मुझे आगे जाना है और लेबल पूर्ववत करते हैं. और मुझे तुम क्या जानते हैं कि दावा करते हैं? एक शायद यहां खत्म होता जा रहा है. बी यहां खत्म होता जा रहा है. और TMP यहां खत्म होता जा रहा है. अब, आदेश हो सकता है एक छोटे से अलग हो. लेकिन धारणा यह विचार है. और सिर्फ सामूहिक रूप से, यह क्या है हम स्वैप के फ्रेम कहते हैं, या हूँ भोजन हॉल ट्रे. और मुख्य के साथ ही सौदा. लेकिन मुझे लगता है कि redraw नहीं होगा. लेकिन है कि जहां argc और argv और किसी भी एक्स और वाई की तरह अपने स्थानीय चर की के रूप में अच्छी तरह से हो सकता है. तो अब वास्तव में क्या हो रहा है पर विचार आप स्वैप कॉल करते. आप स्वैप कॉल करते हैं, जैसे कोड को क्रियान्वित करने यही नहीं, आप में, में गुजर रहे हैं छोटी गाड़ी संस्करण, ए और बी के रूप में एक्स और वाई की प्रतियां. मैं अब इस आकर्षित करते हैं तो अगर स्क्रीन पर - इस पर बेहतर पाने के लिए मिल गया है - इसलिए मैं अपने आप को बता रहा था कहानी था इस छोटी गाड़ी संस्करण में, जब हम सचमुच ए और बी में गुजर स्वैप कॉल पूर्णांक के रूप में, क्या वास्तव में हो रहा है? खैर, क्या वास्तव में हो रहा है यह है. मुझे आगे जाना है और पूर्ववत चलो बस यहाँ कुछ स्थान खाली करने के लिए. तो यह मेरे कंप्यूटर की मेमोरी है. तो मेरे पास है, उदाहरण के लिए - वास्तव में इसे इस तरह से करते हैं - मैं इस भंडारण, एक्स का दावा है कि अगर अभी पिछले सप्ताह की तरह मूल्य 1. और इस मूल्य भंडारण, y है 2 अभी पिछले सप्ताह की तरह. मैं स्वैप कॉल और जब यह, मुख्य है जिससे अपने आप को एक करने के लिए पहुँच दे रही है और बी और TMP, मैं दावा करने के लिए जा रहा हूँ कि इस एक है और यह 1 है. यह ख है. यह 2 है. इस tmp कहा जाता है. और शुरू में, यह कुछ कचरा मूल्य है मैं वास्तव में यह एक में स्टोर जब तक, जो 1 है. तब मैं आगे जाना है और परिवर्तन एक क्या हो सकता है? बी के लिए मूल्य. और इसलिए अब मैं यहाँ दो हैं. और फिर हम बी tmp हो जाता था. फिर से, बस एक मानसिक स्वास्थ्य की जांच के रूप में, तृतीय यहाँ कोड की लाइन बस यह है एक, बी tmp हो जाता है. और तो अन्त में, मैं क्या करूँ? मुझे आगे जाना है और जो कुछ होने के लिए बी को बदलने tmp का मान 1 है, जो है. मैं फिर tmp नहीं टिकते. लेकिन अब, समस्या के रूप में जल्द ही स्वैप के रूप में है यह सौंपने नहीं है, क्योंकि रिटर्न वापस कुछ मूल्य, वहाँ कोई वापसी है इसमें स्पष्ट रूप से बयान. वास्तव में क्या हो रहा है? खैर, अनिवार्य रूप से सभी यह स्मृति - ठीक है, जाहिरा तौर पर रबड़ पसंद करती है एक समय में केवल एक उंगली - बस गायब हो जाता है. अब हकीकत में ऐसा नहीं है कहीं भी जा रही है. लेकिन अगर आप यह सोच सकते हैं अब प्रश्न चिह्न के रूप में. यह नहीं रह गया है क्योंकि वास्तव में उपयोग में. और कुछ नहीं तो वे मान के साथ किया जाता है. तो की हरी संस्करण के मामले में इस कोड, बजाय क्या किया जा रहा है स्वैप में पारित कर दिया? पते तो. तो एक्स के पते और Y के पते. तो हम अगर यह कहानी एक आखिरी फिर से बताना समय, और मैं वास्तव में फिर से स्वैप आकर्षित, लेकिन संकेत के साथ, यह एक, यह जा रहा है बी जा रहा है, और इस tmp जा रहा है, क्या है वास्तव में यह हरे रंग में एक में संग्रहित मैं जा रहा हूँ जहाँ मेरे कोड का संस्करण पते में? यह एक्स के लिए एक सूचक होने जा रहा है. तो मैं एक तीर आकर्षित कर सकता है. लेकिन एक ही मनमाने ढंग से इस्तेमाल करते हैं उदाहरण के रूप में पहले. चलो यह है कि हम कहते हैं Ox123 की तरह कुछ. और इस Ox127 होने जा रहा है क्योंकि यह एक है क्योंकि यह चार बाइट्स दूर है INT, तो Ox127. और फिर, मैं कुछ स्वतंत्रता ले जा रहा हूँ संख्या के साथ. उन्होंने कहा कि वे की तुलना में बहुत छोटे हो वास्तव में हो सकता है और एक अलग आदेश में. लेकिन यह है कि कैसे तस्वीर है अब अलग है. लेकिन मैं इस हरी कोड का उपयोग करते समय और मैं int tmp * एक मिलता है. * निम्न करने के लिए एक साधन, ले कि एक में के अभिभाषण और इसे करने के लिए जाना है, जो 1 है. और कहा कि मैं तो tmp में क्या रखा है. इस बीच, कोड की अगली पंक्ति में यहाँ, * एक ख हो जाता है, इसका क्या मतलब है? खैर, * एक, तो यहाँ जाओ, * ख हो जाता है जो वहाँ जाने का मतलब है. और कहा कि वहाँ के मूल्य डाल मतलब है. अंत में, कोड की अंतिम पंक्ति बस * बी tmp हो जाता था. तो बी वहाँ जाना है और साथ इसके ऊपर लिखना कहते हैं tmp, जो इस मामले में हो रहा है , फिर से, 1 हो. और ऐसा क्यों हरी संस्करण की है हमारे कोड जबकि लाल, काम करता है संस्करण कभी नहीं किया था. यह सब सिर्फ नीचे फोड़े कैसे स्मृति में कामयाब रहे और यह है जहाँ है वास्तव में रखा अपने कंप्यूटर की रैम. और अब के लिए, कि चीजों में से एक है ढेर के लिए इस्तेमाल किया जा रहा है. लेआउट पर सवाल? संकेत पर? या स्वैप पर? ठीक है, तो malloc, याद है, कुछ इस तरह से किया था. यह एक सुपर सरल उदाहरण था. और यह एक था कि Binky काफी हालांकि, हमारे लिए शुरू की जल्दी से, वर्ग के अंत में. Dammit, वहाँ हम फिर जाओ. तो इस उदाहरण था कि याद है कि Binky को, यद्यपि हमें शुरू कुछ हद तक जल्दी से कक्षा के अंत में. और यहाँ हम वास्तव में malloc इस्तेमाल किया दूसरी बार के लिए. क्योंकि हम इसे इस्तेमाल करने के लिए पहली बार , पर्याप्त रैम बनाने का आवंटन पर्याप्त रैम एक स्ट्रिंग स्टोर करने के लिए. इस बार Binky सरल रखा. तो यह सिर्फ स्टोर करने के लिए है एक पूर्णांक, जाहिरा तौर पर. और वह पूरी तरह से ठीक है. यह करने के लिए, स्पष्ट रूप से, एक थोड़ा अजीब है एक INT के आवंटन के लिए malloc का उपयोग करें. लेकिन निक के claymation के बिंदु था वास्तव में बस की कहानी बता क्या ऐसा होता है या जब ऐसा नहीं होता है आप स्मृति गाली. तो इस मामले में, इस कार्यक्रम कुछ बातें किया. यहां पहले मामले में, यह वाणी एक सूचक एक पूर्णांक के लिए एक्स कहा जाता है. यह तो एक सूचक वाणी एक पूर्णांक के लिए y बुलाया. यह तो एक्स में दुकानों, क्या? अब कोई और. के अनुसार एक्स में जमा हो जाता है क्या इस कार्यक्रम के तीसरे लाइन? दर्शक: [सुनाई]. स्पीकर 1: खैर, काफी नहीं कहते प्रति बाइट्स,. अब और अधिक सटीक हो. क्या एक्स में जमा हो जाता है? एक पता, मुझे लगता है मैं इसे सुना लगता है. तो malloc क्या वापस करता है? malloc behaviorally आवंटित स्मृति का एक हिस्सा. लेकिन यह कैसे यह करने के लिए आप पहुँच देता है? यह क्या देता है? पहली बाइट का पता स्मृति का हिस्सा में. अब, यह सुपर आसान है. इसका मतलब है, जो सिर्फ एक बाइट है हम वापस हो रही है पता है पूरी बात का पता. तो एक्स में संग्रहीत तो, पता है स्मृति की है कि हिस्सा की. इस बीच, आगे क्या होता है? तो वास्तव में, चलो आगे चलते हैं और असली तेजी से यह बाहर निकालना. हम यहाँ स्क्रीन पर जाने और यदि हां हम इस बाहर खेलने int * x और int * y मेरे लिए क्या कर रहा है? मैं सिर्फ यह करना जा रहा है कि दावा इस और इसे कॉल की तरह कुछ एक्स, और इस और y कहते हैं. इस बीच, कोड की तीसरी पंक्ति है एक पूर्णांक के आकार का आवंटन करने के लिए जा रहे हैं, यदि मैं ने कहा - माफ होना होता है एक मैं एक INT मतलब पहले - एक ठेठ कंप्यूटर पर चार बाइट्स. CS50 उपकरण के साथ कम से कम. तो इस आवंटित करने के लिए जा रहा है यह कौन जानता है? यहीं कहीं बाहर. और यह कुछ में संग्रहीत किया जाता है कौन जानता है बैल, का पता? लेकिन क्या लौटा हो रहा है उस पते है. लेकिन हम pictorially इस आकर्षित करेंगे के रूप में की तरह है कि सिर्फ एक तीर. अब अगली पंक्ति * एक्स में 42 हो जाता है. * एक्स आम आदमी की दृष्टि में क्या मतलब है? सिर्फ वहाँ जाओ. उस पते पर जाएँ. या दूसरे शब्दों में, का पालन करें तीर और वहाँ 42 डाल दिया. लेकिन फिर कुछ बुरा हुआ Binky करने, सही? यहाँ कि लाइन पाँच याद, * y हो जाता है 13, वास्तव में एक अशुभ संख्या, हमारे लिए क्या किया? खैर, * y वहाँ जाने का मतलब है. खैर, यह नहीं दिया गया है एक मूल्य अभी तक, है ना? कोड Y जा रहा है नहीं है कुछ भी करने के लिए प्रारंभ. हम एक्स किए जा था एक पते पर. लेकिन y शीर्ष अप घोषित किया गया था. लेकिन फिर एक अर्धविराम, कोई मूल्य नहीं वास्तव में यह में डाल दिया था. तो यह इस कॉल करने के लिए उचित है एक कचरा मूल्य. वहाँ कौन है क्या जानता है? यह प्रयोग किया गया है कि बिट्स के अवशेष है में कोड की कुछ पिछली पंक्ति से मेरे कार्यक्रम. मैं वहाँ जाने का कहना है कि अगर ऐसा है, तो इस तरह है, मैं इस तीर पर है जहां कोई पता नहीं है खत्म हो जा. जब आप आम तौर पर और है कि एक विभाजन दोष मिलता है. अगर आप गलती से भिन्नता है, ऐसा करने के लिए बात करते हैं, या नहीं है कि एक पते पर जाना वास्तव में एक वैध पते, बुरी बातें होती हैं. और कहा कि वास्तव में क्या हुआ है Binky सोचने के लिए. तो याद है कि निक था कि कहानी एक ही विचार के रूप में यहाँ था कह रहा है क्या मैं भ्रम की साथ तैयार किया है वहाँ बोर्ड पर चाक. एक्स और वाई घोषित कर रहे हैं. तो फिर हम के आकार आवंटित एक पूर्णांक और एक्स में यह संग्रहीत. फिर अगली पंक्ति हम * एक्स किया. इस निक के जादू की छड़ी था के dereferencing. कि स्मृति में 42 डाल एक्स से बाहर बताया. लेकिन यह है जहां बातें बुरी तरह गलत हो गया था. है ना? हम भिन्नता Y करने की कोशिश की. लेकिन y सही, कुछ फर्जी मूल्य था? नीचे बाएँ हाथ में तीर कोने, नहीं है वास्तव में कुछ भी करने के लिए इशारा करते हुए. यह एक तरह से मैं क्या कर रहा है बोर्ड पर यहाँ था. तो बुरी बातें होती हैं, विभाजन इस मामले में, गलती है, या Binky गलती. लेकिन हम तो एक्स रही द्वारा तय है कि अगर Y कैसे कहानी बदल करता हो जाता है? मैं एक्स वाई हो जाता है तो, वह है यह कहते हुए प्रभावी रूप से एक ही यह है जो भी, बैल, कुछ , यहाँ एक ही होने जा रहा है बैल कुछ. या सचित्र रूप से हम एक तीर आकर्षित करेंगे. तो यहाँ Binky साथ बोर्ड पर, की अगली पंक्ति के साथ कोड, * y वहाँ जाने का मतलब है. कहाँ है? यह यहाँ पर मतलब है. और हम हैं कि 13 होने के लिए जब अद्यतन यह सिर्फ जा रहा है और शामिल है अब यहां 13 लेखन. तो शायद पूरी तरह से नहीं पहली नज़र में सीधा. लेकिन संक्षिप्त और करने के लिए एक ही भाषा का प्रयोग करने के लिए Binky यहां का उपयोग कर, इतना था कि पहले दो संकेत आवंटित, एक्स और वाई, लेकिन नहीं pointees. और pointees नहीं है एक आम तौर पर शब्द का इस्तेमाल किया. लेकिन सूचक बिल्कुल है. लेकिन यह बताया जा रहा है क्या है Binky के नामकरण में कम. इस कोर्स के अगली पंक्ति,, एक पूर्णांक pointee का आवंटन. स्मृति की तो एक हिस्सा - मैं पर अधिक आकर्षित किया दाएँ हाथ वहाँ पक्ष - और सेट एक्स यह करने के लिए बात करने के लिए बराबर है. इस में 42 स्टोर करने के लिए एक्स dereferences इस पर इशारा कर रहा है कि स्मृति. और फिर यह, ज़ाहिर है, एक बुरी बात थी. Y इशारा नहीं किया गया था क्योंकि अभी तक कुछ भी. यह बात ठीक करता है. तो यह अभी भी छोटी गाड़ी कार्यक्रम है. हम के माध्यम से उड़ा रहे हैं सिर्फ इसलिए कि रेखा और कह कर कोड लाइन, ओह ठीक है, यह वहाँ दुर्घटना चलो. यह एक बुरी बात है. बाधाओं कार्यक्रम सिर्फ जा रहा है कर रहे हैं उस लाइन पर पूरी तरह रद्द कर दिया जाए. लेकिन आप दुर्घटनाग्रस्त हो जाने से हटाने के लिए गए थे रेखा और पिछले दो के साथ बदलें वहाँ लाइनों आप आवंटित - का उपयोग सूचक असाइनमेंट - Y बात टी के रूप में एक्स के लिए बात करने के लिए. और फिर आप भिन्नता एक बहुत ही सुरक्षित तरीके से वाई. तो जहां यह हमें छोड़ करता है? खैर, पता चला है कि हुड के नीचे CS50 पुस्तकालय में, संकेत दिए गए हैं भर में इस्तेमाल किया. और हम वास्तव में छील शुरू करेंगे लंबे समय से पहले उस परत वापस. लेकिन यह भी एक अभिव्यक्ति बदल जाता है आप में से कुछ के साथ परिचित हो सकता है, विशेष रूप से उन लोगों को और अधिक आरामदायक, एक बहुत ही लोकप्रिय है कि वास्तव में है वेबसाइट, या पोट अतिप्रवाह, इन दिनों. लेकिन यह वास्तव में बहुत है तकनीकी अर्थ. अब हम एक ढेर है क्या करना है. यह ट्रे का एक ढेर की तरह है एक भोजन कक्ष के अंदर. या आपके कंप्यूटर के अंदर स्मृति अपने उन फ्रेम कार्यों द्वारा उपयोग किया जाता है. खैर, यह पता चला कि उसकी वजह से का बहुत ही सरल कार्यान्वयन स्मृति और तथाकथित पर फ्रेम ढेर, तुम वास्तव में नियंत्रण ले जा सकते हैं एक कंप्यूटर प्रणाली की काफी आसानी से. आप एक सिस्टम में हैक कर सकता है यदि लोग हमें हमारे कोड नहीं लिखा है की तरह विशेष रूप से अच्छी तरह से. हमारे जैसे लोग हिस्सा उपयोग करते हैं स्मृति का उपयोग करें या सरणियों की - और भी अधिक सामान्यतः - लेकिन कभी कभी जाँच करने के लिए भूल जाते हैं हमारे सरणी आप कर सकते हैं के रूप में की सीमाओं कभी कभी अपने आप को, और दोहराया है जिस तरह से बहुत दूर अंत एक सरणी अतीत. सबसे अच्छा मामले में, अपने कार्यक्रम में बस दुर्घटना हो सकती है. विभाजन गलती, दयालु शर्मनाक. महान नहीं है, लेकिन यह जरूरी नहीं है एक बेहद बुरी बात. लेकिन अपने कार्यक्रम वास्तविक वास्तव में अगर उपयोगकर्ताओं के कंप्यूटर्स, यह चल रहा है एक वेबसाइट पर कि वास्तविक यादृच्छिक लोग इंटरनेट पर, दे पड़ रहे हैं लोगों को अपने कोड पर बुरी बातें है प्रेरित आम तौर पर एक अच्छी बात नहीं है क्योंकि इसे लेने के लिए एक अवसर का मतलब कंप्यूटर का नियंत्रण. और यह देखने के लिए जा रहा है एक छोटे से गुप्त. लेकिन मैं मैं के साथ आपको डराने लगा यहाँ यह पिछले उदाहरण. यहाँ कोड का एक उदाहरण है. और एक अच्छा विकिपीडिया वहाँ के माध्यम से चलता है कि लेख यह और अधिक विस्तार में. मैं नीचे बुला पर मुख्य है Foo, 1 की argv में गुजर रहा है. और वह है, बस आप कर सकते हैं कि इतना कार्यक्रम चलाने के लिए और पारित एक मनमाने ढंग से इनपुट. और फिर foo शीर्ष अप घोषित किया जाता है एक स्ट्रिंग को स्वीकार करने के रूप में, या अधिक संक्षेप में, एक चार *. यह तो घर का काम की एक सरणी की घोषणा की. अधिक आम तौर पर एक बफर, इसे कहते हैं, आकार 12 की. इसलिए 12 अक्षरों के अंदर फिट कर सकते हैं उस सरणी बुलाया ग की. और फिर यह इस नए समारोह का उपयोग करता है, नए लेकिन मुश्किल नहीं है जो , स्मृति प्रतिलिपि समझते हैं. यह प्रतियां था जो बार से स्मृति, चर अतीत N, जो भी उपयोगकर्ता सी में argv 1 में टाइप. कितने बाइट्स? बार की स्ट्रिंग लंबाई. तो दूसरे शब्दों में, अगर उपयोगकर्ता प्रकार में एच ई एल एल ओ, स्ट्रिंग लंबाई दर्ज नमस्ते के पांच है. तो उन बाइट्स के पांच पाने के लिए जा रहा है सरणी बुलाया सी, में नकल जो आकार 12 की है. लेकिन क्या एक बहुत लंबे समय में उपयोगकर्ता प्रकार 13 अक्षर या 14 है कि शब्द वर्ण या 100 अक्षरों या अधिक? वे कहाँ जा रहे हैं? खैर, उस फ्रेम, कि ट्रे भोजन हॉल ढेर में, वे वहाँ जाने के लिए जा रहे हैं. और यह सिर्फ overwriting शुरू हो रहा है पहले से ही है कि अन्य सामान उस ढेर पर ढेर इतनी बात करने के लिए ढेर,. तो pictorially, यह इस तरह लगता है. यह सिर्फ एक रंगीन संस्करण का है चित्र हम ड्राइंग किया गया है. नीचे, का कहना है, मुख्य है चलो. और शीर्ष पर, आप अब क्या देख रहे हैं फ्रेम, रंग एक के लिए, अब कोडित है समारोह foo बुलाया. लेकिन क्या बारे में दिलचस्प यहाँ है foo यहाँ अपनी सीमा है. तो यह सिर्फ मैं तरह तैयार है लेकिन हल्के नीले रंग में किया था. और अब इस जहाँ है सी ब्रैकेट 0 से चला जाता है. और इस जहां सी ब्रैकेट है 11 को खत्म हो रहा है. दूसरे शब्दों में, यह करने के लिए होता है एक वर्ग के रूप में प्रतिनिधित्व किया. लेकिन तुम सिर्फ बैट plopping रखने अगर नीचे - या घर का काम - वे समाप्त करने के लिए जा रहे हैं सभी तरह से ऊपर स्थान 0 पर 11 को यह 0 अनुक्रमित है क्योंकि. लेकिन जहां 13 वें चरित्र है समाप्त करने के लिए जा रहे हैं? जहां 14 वीं है? जहां 50 वीं चरित्र है समाप्त करने के लिए जा रहे हैं? यह नीचे जा रहा रखने के लिए जा रहा है. क्योंकि हम तैयार किया है, भले ही आगे बढ़ रही है ढेर, के साथ तस्वीर पते, यह पता चला है, से जाना छोटे पते, छोटे बड़ा पतों को संकेत दिए. तो यह सिर्फ ऊपर और ऊपर जा रहा रखता है. इसलिए यदि उपयोगकर्ता प्रकार में नमस्कार, यह बहुत अच्छा है. कोई बग, कोई समस्या नहीं है, हर कोई सुरक्षित है. लेकिन अगर हम करेंगे में उपयोगकर्ता प्रकार विरोधात्मक कोड कॉल, प्रतिनिधित्व सामान्य रूप से एक, हमले, हमले, के रूप में हमले, हमले, क्या हो सकता है? खैर, अगर इनपुट के सभी कि उपयोगकर्ता में टाइप सिर्फ कुछ अनुकूल नहीं है या अक्षरों के आपत्तिजनक स्ट्रिंग. यह वास्तव में अक्षर का एक अनुक्रम है कि आप इसे संकलित हैं, यह वास्तव में कोड है. शायद यह सब हटाता है कि कोड है अपनी हार्ड ड्राइव पर फाइल या स्पैम भेजता या ऐसा कुछ. क्या यहां महत्वपूर्ण यह है कि सूचना है कि बुरा आदमी के लिए काफी भाग्यशाली है अगर स्मृति का लाल हिस्सा अधिलेखित - मैं मेरी तस्वीर पर आकर्षित लेकिन नहीं था जो इस विकिपीडिया तस्वीर यहाँ है - अपनी तथाकथित वापसी पता. जब भोजन देता है, स्वैप देता है जब, कैसे कंप्यूटर से जाने के लिए जानती है यहाँ यहाँ नीचे करने के लिए? या ऊपर ऊपर तकनीक के क्षेत्र में, कैसे यह स्वैप से जाने के लिए जानती है कोड - 0 और 1 कि रचना स्वैप - मुख्य करने के लिए वापस? एक तथाकथित वापसी पता नहीं है पर उसी ढेर फ्रेम में संग्रहीत एक ही कैफेटेरिया ट्रे. बुरा आदमी को काफी चालाक है तो अगर हमले कोड, हमले कोड, हमले डाल कोड, और काफी भाग्यशाली हो - - अक्सर परीक्षण और त्रुटि के माध्यम से कि लाल वापसी पता के ऊपर लिख, पता और सूचना के साथ बहुत ऊपर. 0835C080 सूचना है. इसके लिए शीर्ष तक पीछे की ओर लिखा है कारणों हम शायद फिर से आना करेंगे. यह है कि संख्या है. बुरा आदमी काफी भाग्यशाली हैं या हो जाता है तो अगर लाल के ऊपर लिख काफी समझदार है के पते के साथ स्मृति की पट्टी वह या वह किसी भी तरह की है कि कोड आपके कंप्यूटर में इंजेक्ट किया, जिसका अनुमान कोड को लौटा दिया जा रहा है जैसे ही foo किया जाता है के रूप में क्रियान्वित करने? बुरा आदमी का कोड. तो इस हमले कोड, एएए, फिर, हो सकता है स्पैम भेजने, सभी फाइलों को नष्ट कर सकता है अपनी हार्ड ड्राइव पर. लेकिन यह है कि क्या वास्तव में एक पोट अतिप्रवाह है है, या एक बफर उग आया है, या एक बफर अतिप्रवाह हमले. और यह अविश्वसनीय, अविश्वसनीय रूप से आम है में लिखा कार्यक्रमों के साथ इस दिन के लिए सी, सी + +, और यहां तक ​​कि कुछ अन्य भाषाओं. कि डरावना पर ध्यान दें, हम करेंगे एक मजाक के साथ खत्म होता है. [हंसी] बुधवार को मिलते हैं. अगले CS50 पर - इसलिए मैं सभी डिस्क दीपक के बाहर आज कर रहा हूँ, लेकिन , वसा रहित दूध, आधा फ़ोन इंतजार किताब, संतरे का रस मैं आज पिया कि. यूएसबी केबल, एक रिंच. [संगीत खेल]