[সঙ্গীত বাজানো] ডেভিড জে Malan: ঠিক আছে এটি CS50 এবং এই সপ্তাহে পাঁচটি শুরু. আজ তাই, আপনার সীট নিরাপত্তা নীচে, আপনি কিছু পাবেন না. কিন্তু উপরে, আপনি একটি, এই এটি করা উচিত আমাদের জন্য উপচয় সামান্য টোকেনের আপনি যে কাজ করা সব পঞ্চদশ খেলার মধ্যে. শুধু সামান্য বৃত্ত অপসারণ জন্য বাজানো শুরু নিচ থেকে ক্লাসের বাকি. সুতরাং যে পুনরাহ্বান, অথবা সেট যে সমস্যা জানি এই সপ্তাহান্তে গিয়েছিলাম আউট, যা চার, অন্য খেলা লেখার জড়িত. কিন্তু জড়িয়ে আছে এই সময় একটি ব্যবহার করে প্রকৃত গ্রাফিক্যাল ইউজার ইন্টারফেস, না একটি ভালো টেক্সচুয়াল ইন্টারফেস পনেরো খেলা ছিল. এবং এগিয়ে আপনি মিথ্যা খেলা যে, আপনি এখনও এই পরবর্তী দেখা যায় না করেছি, একটি ভালো সামান্য কিছু দেখায়. আমি আমার টার্মিনাল ঢোকা যাচ্ছে না এখানে GDB-র মধ্যে উইন্ডোর. এবং আমি এগিয়ে যান এবং চালানো যাচ্ছে না আপনি অ্যাক্সেস করতে পারেন, যা কর্মীদের সমাধান, স্বাভাবিক হিসাবে হালনাগাদ 50 পশ্চাদ্ধাবন. কিন্তু আমি একটু মধ্যে এটি করা যাচ্ছে না গোপন মোড, একটু ইস্টার ডিম, দ্বারা, ঈশ্বরের মোড তথাকথিত argv1 ঈশ্বরের নির্বাণ. এবং আমি আমার নিজের দিক নির্দেশনা অনুসরণ করতে হবে আমার নিজের মধ্যে এটি চলমান সমস্যা ডিরেক্টরি সেট করুন. তাই এখন আপনি একটি সম্পূর্ণ সংস্করণ দেখুন ব্রেকআউট এর খেলা. বস্তুত, এই কোন হাত মোড. সুতরাং এটা আসলে এর - যদিও wowed আপনি হতে পারে - ঈশ্বরের মোড বাস্তবায়ন বেশ তুচ্ছ ব্রেকআউট, পনের খেলা অসদৃশ, যা আপনি কিছু মোকাবেলা হতে পারে হ্যাকার সংস্করণ জন্য. ব্রেকআউট এটা ঈশ্বরের মধ্যে যথেষ্ট মোড সহজভাবে, কি করতে হবে intuitively বাহা সঙ্গে? শুধু যাই হোক না কেন সমান করতে আনুভূমিক অবস্থান বল হয়. তাই যতদিন আপনি lockstep এই কাজ হিসেবে এই গেমটি চলন্ত বল দৃঢ়প্রতিজ্ঞভাবে , কখনো কখনো বল মিস্ এবং আপনি প্রত্যেক সময় জয় করব. কিন্তু এই সপ্তাহে এর হ্যাকার সংস্করণ শুধু ঈশ্বরের মোড চেয়ে আরো আছে. অন্যান্য বৈশিষ্ট্য একটি সংখ্যা আছে. তাদের মধ্যে, লেজার. যাতে আপনি সত্যিই আপনি অধীর পেতে হলে ইষ্টকদ্বারা নিচে শুটিং শুরু করতে পারেন এবং কয়েক অন্যদের. এবং চাই আপনাদের মধ্যে যারা জন্য প্রমিত বনাম হ্যাকার শক্তির পরিমাপ করা সংস্করণ, আমি দেখতে পারেন যে এই সপ্তাহে হ্যাকার সংস্করণ ইচ্ছাকৃতভাবে একটি ঈশ্বর আর বলে, একটু বেশি doable মোড পঞ্চদশ খেলার সঙ্গে ছিল. আপনি একটি প্রসারিত খুঁজছেন এবং করছি তাই আপনি যদি আপনি কিছু অতিরিক্ত মজা খুঁজছেন বৈশিষ্ট্য সুদ যদি ডুব না. এখন আরও কার্যকরীভাবে, আমাকে নির্দেশ দেওয়া এক জিনিস আউট হিসাবে ভাল. আপনি কিছু এখনো থাকতে পারে না যা GDB-র, সূক্ষ্ম, যা ব্যক্তিগতভাবে স্পর্শ. কিন্তু এখন সত্যিই ব্যবহৃত পেতে সময় এই সরঞ্জামের সঙ্গে এই এবং আরামদায়ক যাও এটা আপনার জীবন করতে হবে, কারণ অনেক সহজ, সত্যিই. GDB-র একটি দম্পতি নেভিগেশন রব এর বক্তৃতা প্রতি সপ্তাহ আগে, প্রত্যাহার যে GDB-র একটি ডিবাগার হয়. এটি আপনি চালাতে দেয় একটি হাতিয়ার আপনার প্রোগ্রাম কিন্তু এটি ধাপে, লাইন ধাপে চালানো লাইন দ্বারা, যাতে আপনি, কাছাকাছি অকর্মা করতে পারেন আপনি জিনিষ ঘটছে দেখতে যাতে, তাই আপনি প্রিন্ট আউট করতে পারেন ভেরিয়েবল এর মান. সংক্ষেপে বলতে গেলে, এটি আপনাকে আরও অনেক কিছু দেয় printDef আর ক্ষমতা আছে. এখন বোঝা যাচ্ছে যে নেতারা, ইন্টারফেস বেশ রহস্যময় হয়. সাদা ও কালো টেক্সচুয়াল ইন্টারফেস অধিকাংশ অংশ জন্য. কমান্ড কিছুটা শক্ত হয় প্রথমে মনে. কিন্তু আপনি অর্ধেক সময় নিতে পারে, যদিও একটি ঘন্টা, একটি ঘন্টা, যে আপফ্রন্ট করা তা সময় বিনিয়োগ, বিশ্বাস করুন. অবশ্যই সেমিস্টারে এর শেষে এটি সংরক্ষণ করতে হবে আরো মাত্রার আপনি একটি আদেশ যে বেশী সময়. ইন সপ্তাহে ডুব তাই তাড়াতাড়ি এবং ব্রেকআউট শর্তাবলী, জানেন যে আপনি আপনি তাই যতদিন আপনি এটা করতে পারেন ডিস্ট্রিবিউশন কোড বা আপনার নিজের কোড আপনার Pst4 ডিরেক্টরির মধ্যে অগ্রগতি. আপনি GDB চালানো সম্ভব না. / ব্রেকআউট. এই পর্যন্ত খোলা যাচ্ছে এই মত একটি উইন্ডো. আমার সম্পর্কে নিজেকে আরো দিতে একটি টার্মিনাল উইন্ডোর. এবং তারপর কি আমি এগিয়ে যেতে চলেছি এবং না, এটা ঠিক এটি চালানোর জন্য না. আমি প্রথম একটি বিভাজক পয়েন্ট নির্ধারণ করা যাচ্ছে না বিরতি করতে পারবেন যা রিকল, একটি নির্দিষ্ট স্থানে মৃত্যুদন্ড. আমি যাচ্ছি জিনিষ সহজ রাখা টাইপ করে ঠিক লাইন এক সময়ে বিরতি এক নম্বর. আমার সম্পর্কে আসলে এই উইন্ডোটি পুনরায় খুলুন এটি একটি পাওয়ার কারণ সেখানে একটু ছোট. তাই এখন আমি এখানে করতে যাচ্ছি না আমি আমার টার্মিনাল উইন্ডোতে খুলুন না. সেখানে আমরা যেতে, চলো. আমি ড্রপবক্স, Pst4 ফিরে যান তাই এখন যদি এবং GDB চালানো. / ব্রেকআউট লিখুন, বিজ্ঞপ্তি আমি এক সেট বিরতি যাচ্ছে না লাইন এক একটি বিরতি বিন্দু. এবং এখন আমি যেতে চলেছি এগিয়ে যান এবং টাইপ করুন. এবং আমি যখন, কিছুই বিজ্ঞপ্তি ঘটতে মনে হচ্ছে. কোন পপ আপ আছে. কোন গ্রাফিকাল আছে কোনো ব্যবহারকারী ইন্টারফেস. আমি কারণ বোধগম্য যে এর আক্ষরিক আমার প্রোগ্রাম লাইন এক সময়ে. এবং আমি দ্রুত ফরওয়ার্ড করেছি বিজ্ঞপ্তি বিশেষভাবে এখন 62, সব কারণ এই ফাইলটি শীর্ষে উপাদান মন্তব্য এবং ধ্রুবক ভালো জিনিস এবং এখন জন্য স্টাফ নীরস. তাই এখন আমি, প্রধান ভিতরে আছি এটি লাইন 62 এ, বলে মনে হয়. এবং এই মাত্র উঠেছে কোড, রিকল. আমি একইভাবে, যাচ্ছে এই পর্যন্ত খোলা আমার ড্রপ বক্স ডিরেক্টরি Pst4 মধ্যে মধ্যে, breakout.c মধ্যে. এবং আমি নিচে এবং নিচে স্ক্রল ডাউন এবং যদি, এবং আমাকে এগিয়ে যান এবং চালু করা যাক আমার লাইন নম্বর. আমি নিচে স্ক্রল আমি দেখতে পাবেন কি, যদি লাইন 62, ঠিক লাইন যে আমরা স্থগিত করেছি. এই লাইন এখানে, 62, তাই আমরা হতে চলেছেন যেখানে. তাই এখন GDB-র মধ্যে, আমি এগিয়ে যান এবং যদি টাইপ এখন পরে, এটা যাচ্ছে লিখুন যে লাইন চালানো. এবং voila, আমরা গ্রাম উইন্ডোতে তথাকথিত. কি GWindow সঙ্গে অপরিচিত যদি চিন্তা করতে না হয়. বৈশিষ্ট হিসাবে, এটি আপনাকে পরিচয় করিয়ে দিতে হবে ভাল walkthrough ভিডিও একটি সংখ্যা হিসেবে বৈশিষ্ট এমবেড করা. কিন্তু এখন এর এই একটি যাক একটু বেশি আকর্ষণীয়. আমাকে এই উইন্ডোর উপর সরানো যাক পাশ থেকে একটি সামান্য বিট. আমার সম্পর্কে উইন্ডোতে সামান্য করা যাক বড় তাই আমি আরো দেখতে পারেন. এবং এখন আমাকে এগিয়ে যান এবং আবার পরের করতে. এবং আমার ইষ্টকদ্বারা আছে. আমি পরের আবার টাইপ করা হলে এখন আমি বল দেখতে. এবং আমি পরের আবার টাইপ করা হলে এখন আমি বাহা দেখুন. এবং ভাগ্যক্রমে এই gedit না সত্যিই আমাকে দেখিয়ে সহযোগী আমি চাই সবকিছু. কিন্তু এখন আমি পরের আবার না, পরের আবার, আমি আছি কিছু ভেরিয়েবল ঘোষণা. আর আমি কোনো এক মুদ্রণ করতে পারেন খুঁজে এইসব বলছি. প্রিন্ট করুন ইট, প্রিন্ট জীবন. এবং এখন আমি কি অবিরত যদি পরবর্তী, আমি থাকব যে বিজ্ঞপ্তি যে লুপ এর ভিতরে. কিন্তু কোড চালানো যাচ্ছে আমি আশা ঠিক হিসাবে. তাই আমি এই ফাংশন আঘাত, অপেক্ষা করুন ক্লিক করুন, এটি করতে যাচ্ছে এটা আক্ষরিক যে. তাই আমি নিয়ন্ত্রণ হারিয়ে করলো প্রোগ্রাম ওভার. GDB-র সম্পর্কে অন্য একটি প্রম্পট প্রদান করা হয় না. কিন্তু চিন্তা করবেন না. আমার খেলা যান, কোথাও ক্লিক করুন. এবং voila এখন, এটা লাইন 86 থেকে আয়. তাই আবার, এটা শেষ পর্যন্ত, অমূল্য এর ডিবাগিং সমস্যার জন্য. আপনি আক্ষরিক মাধ্যমে পইঠা পারে আপনার কোড আউট, এবং আরো অনেক কিছু মুদ্রণ জিনিষ, অনেক, আরো. একা কিন্তু এখন জন্য, যারা হাতিয়ারসমূহ প্রবেশ করুন বেশ দূরে আপনি পাওয়া উচিত. সুতরাং আমরা কটাক্ষপাত গ্রহণ, অবশ্যই, আপনি আছেন এ এখন গ্রাফিক্স, একটি অপ্রত্যাশিত সব. এবং এখন আমাদের বিশ্বের একটি সামান্য পায় আরো আকর্ষণীয়. এবং যদি আপনি কিছু থেকে, সম্ভবত জানেন, আমরা এই আছে যে অনলাইন ভিডিও আপনার দেখা হয়েছে করেছি যে হাফপ্যান্ট সমস্যা সেট অংশ হিসাবে. তারা ইচ্ছাকৃতভাবে, গুলি করা হয়েছে একটি সাদা পরিপ্রেক্ষিত বিরুদ্ধে. এবং তাদের কিছু শিক্ষণ আছে কিছু পাঠ্য অঙ্কন ফেলোগণ overlaid যে পর্দা তাদের পাশ দিয়ে. তবে অবশ্যই, এই সব যে হয় না বাস্তব জগতে আকর্ষণীয়. এটি একটি সঙ্গে একটি বক্তৃতা Hall হয় বড় সাদা পর্দা এবং একটি পরিপ্রেক্ষিত. এবং আমাদের আশ্চর্যজনক উত্পাদন দল সাজানোর সবকিছু সুন্দর চেহারা সম্পর্কে খুঁজে ফসল তোলা দ্বারা আসলে পরে বা কিছু ওভারলেয়িং আমরা কি বা না চান. এখন শুধু এই সপ্তাহে প্রেরণা প্রদান করে এবং আপনি সত্যিই, আপনি শেষ পর্যন্ত, যেতে পারেন যেখানে কম্পিউটার বিজ্ঞান সঙ্গে. নেই শুধু সমস্যা পরে চার সেট. কিন্তু অন্য কোর্স বা একটি সম্পূর্ণ পরে পাঠ্যক্রমের আশ্চর্যজনক এটা কি আপনি করতে পারেন পরিপ্রেক্ষিতে এই দিন কি বিশেষ করে গ্রাফিক্স. আপনি কিছু এই দেখা হয়ে থাকতে পারে অনলাইন কাছাকাছি প্রবাহিত. কিন্তু আমার জন্য, আমি আপনাকে দেখাতে চাই মাত্র একটি মিনিট দুয়েক, কি একটি আভাস কম্পিউটার প্রযুক্তি এবং কি সিজিআই, কম্পিউটার গ্রাফিক্স এই দিন করতে পারেন একটি পরিচিত গানের সঙ্গে এবং সম্ভবত সিনেমা. [সংগীত - Lana DEL RAY, "তরুণ ও সুন্দর] স্পিকার 1: এটি শুধু একটি সামান্য বিট আশ্চর্যজনক, সম্ভবত, ঠিক কিভাবে omnipresent - [সাধুবাদ] স্পিকার 1: আমি এটা ডাউনলোড. কিন্তু, আমি মনে করি, সত্যিই আশ্চর্যজনক ঠিক omnipresent সফ্টওয়্যার ও কোড এবং কিভাবে ভালো সরঞ্জাম সত্যিই. সুতরাং যে দিক স্বাদ এর যা আপনি যেতে পারেন. ওহ, কোন অ্যাপ্লায়েন্স আজ. ওয়েল, যে আসলে দুঃখজনক সময়জ্ঞান এর আমি ঠিক করতে চেষ্টা পয়েন্ট দেওয়া. ঠিক আছে, তাই এর আরম্ভ করা যাক ফিউশন আবার. পরে আমাকে মনে রাখুন. ঠিক আছে, এবং আপনি একটি পেয়েছিলাম উচিত যদি আপনি একটি পেতে পারি যদি একটি সরাইয়া হিসাবে ইমেল যে মত লক্ষ্য করা. ঠিক আছে, যাতে গত সপ্তাহে প্রত্যাহার আমরা ফিরে ছুলা এই শুরু পরে স্ট্রিং হিসাবে পরিচিত. স্ট্রিং যে একটি ডাটা টাইপ স্মরণ CS50 লাইব্রেরি ঘোষণা. এবং এটি প্রশিক্ষণ চাকার অংশ এখন যে বন্ধ করা শুরু হবে. এটা তাড়াতাড়ি নেভিগেশন একটি দরকারী ধারণা ছিল. কিন্তু এখন এটা পেতে যাচ্ছে আকর্ষণীয় এবং আপনি আরো শক্তিশালী আসলে, ফণা নীচে দেখুন একটি স্ট্রিং ঠিক কি হল, আমরা বলেন নি? হ্যাঁ, তাই এটি একটি তথাকথিত গৃহস্থালি * এর. এবং সেখানে * আছে উল্লেখ করে ঠিকানা কিছু জড়িত. এবং যাতে আপনি গৃহস্থালি * যখন আপনি ঠিক মানে যার ডাটা টাইপ একটি পরিবর্তনশীল একটি এখন পয়েন্টার. সেখানে তারা আছে যে শুধুমাত্র আপনাকে একটা ঘোষণা করা হয় যে মানে পয়েন্টার তথাকথিত. এবং যে পয়েন্টার দৃশ্যত যাচ্ছে এর, ঠিকানা সংরক্ষণ অবশ্যই, একটি গৃহস্থালি. এখন কেন এই জানার জন্য? ওয়েল, একটি স্ট্রিং কি ফণা নীচে? ওয়েল, কিছু সময়ের জন্য আমরা বলছে করছি ফণা নীচে একটি স্ট্রিং যে শুধু H-ই-L-L-O, উদাহরণস্বরূপ. কিন্তু আমরা এই সম্পর্কে সায়ীদ করেছি মূলত, একটি অ্যারের হচ্ছে. এবং একটি অ্যারের তারপর একটু দেখাবে এই সাথে এই মত আরও একটি কামড় গ্রহণ. এবং তারপর আমরা সেখানে যে বলেন করেছি ফিরে এখানে বিশেষ কিছু, ব্যাকস্ল্যাশ 0, অথবা নাল টারমিনেটর. এই সব সময়, তাই এখানে এই একটি স্ট্রিং হয়েছে. কিন্তু সত্যিই, একটি স্ট্রিং আসলে একটি ঠিকানা. হিসাবে আমরা দেখতে পাবেন এবং ঠিকানা, প্রায়ই হয় কনভেনশন দ্বারা 0x সঙ্গে অগ্রে যুক্ত. 0x কি বোঝান না? কেউ কি জানে? তাই এটি শুধু হেক্সাডেসিমেল মানে. সুতরাং আপনি PST থেকে, আসলে, প্রত্যাহার হতে পারে 1, আমি বিশ্বাস করি, উষ্ণ আপ এক প্রশ্ন আসলে সম্পর্কে জিজ্ঞাসা ছাড়াও হেক্সাডেসিমেল স্বরলিপি বাইনারি এবং দশমিক. এবং এখানে প্রেরণা যে হেক্সাডেসিমেল সাথে আপনি 16 আছে আপনার নিষ্পত্তি সংখ্যা. 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, অনুসরণ একটি দ্বারা, বি, সি, ডি, ই, চ. এবং আপনি ঐ সমস্ত আপ গণনা, যদি আপনি 16 মোট পেতে. তাই এই সাথে এর তুলনা হয় আমরা 10 আছে যেখানে দশমিক, সংখ্যা, নয়টি 0 মাধ্যমে. এটি বাইনারি বিপরীত এর আমরা ঠিক 0 এবং 1 আছে যেখানে. কিন্তু আপনি ঠিক করতে পারেন দিনের শেষে একই সংখ্যা প্রতিনিধিত্ব, কিন্তু আছে কিছুটা অন্যরকম. এবং হেক্সাডেসিমেল সাধারণ কারণ এটি সক্রিয় আউট - এবং আমরা এই দেখতে পাবেন পরে অবশ্যই - এমনকি যখন আমরা পেতে প্রেক্ষাপটে ওয়েব প্রোগ্রামিং HTML এবং রঙ কোড, হেক্সাডেসিমেল চমৎকার. প্রতিটি অঙ্ক কারণ, দেখা যাচ্ছে পুরোপুরি চার বিট প্রতিনিধিত্ব করে. চমত্কারভাবে লাইনের তাই এটি শুধু ধরনের আপ আমরা শেষ পর্যন্ত দেখতে পাবেন. তাই এই হতে পারে Ox123 বা কিছু সেই মতো, বাচক ঠিকানা 123 কোথাও ভিতরে আমার সম্পর্কে কম্পিউটার এর মেমরি. তবে অবশ্যই, কিছু সমস্যা উঠা কারণ এই অন্তর্নিহিত এর বাস্তবায়ন. এবং আমি একটি ছুরিকাঘাত গ্রহণ প্রত্যাহার ভালো একটি ফাংশন রূপায়ণকারী - গত সপ্তাহে ড্যাশ 0 বিন্দু গ তুলনা যে, এটি ছিল মত লাগছিল, যদিও ঠিক আছে, এটা শুধু তুলনা করা হয়নি দুই স্ট্রিং সঠিকভাবে. আমি দূরে প্রধান নিক্ষিপ্ত করেছি, এবং আমি নিক্ষিপ্ত করেছি দূরে মন্তব্যগুলি শুধুমাত্র উপর ফোকাস এখানে সুদের যে কোড. এটা বগী কারণ এবং তা লাল হবে. কি কারণে? ওয়েল, শীর্ষ আছে আমি যখন ঘোষণা একটি স্ট্রিং, কি সত্যিই ছিল যাচ্ছে ফণা নীচে? আচ্ছা, আমাকে নিয়ে যান এখানে পর্দা এবং যে আঁকা. তাই আমি আবার,, ঘোষণা স্ট্রিং গুলি GetString,. তাই আমি এখন এগিয়ে যান যাচ্ছে এবং করছি সত্যিই এটা কি জন্য গুলি আঁকা. এখানে একটি বর্গক্ষেত্র হতে যাচ্ছে. এবং আমি দাবি করতে যাচ্ছি যে 32 বিট এর. অন্তত এটা সাধারণত হয়, অন্তত CS50 নেভিগেশন কম্পিউটারের অনেক যন্ত্র. আমি এটা গণ কল যাচ্ছে না. কিন্তু এখন পুনরাহ্বান যে আমরা GetString, বলা হয়. সুতরাং GetString, আয়, অবশ্যই, একটি পংক্তি. H-ই-L-L-O ব্যবহারকারী ধরনের লিখুন যদি স্ট্রিং হ্যালো ফিরে পায়. এবং স্ট্রিং, আমরা ঠিক যেমন বলেছেন, শেষ আপ কোথাও আপনার কম্পিউটার এর মেমরি শেষে ব্যাকস্ল্যাশ 0. আমি অ্যারের মত এই আঁকা করব - বা অক্ষরের সংলগ্ন ব্লক - আসলে এটা যে. এবং এখন, কি GetString হয় আসলে ফিরে? কি ফিরে হয়েছে GetString হয়েছে এই সময় সব? ভাল, আমরা এর আগে সপ্তাহের মধ্যে, বলতে, এটি একটি স্ট্রিং ফেরৎ. কিন্তু আরো টেকনিক্যালি, কি আছে দৃশ্যত GetString ফিরে? শ্রোতা: একটি ঠিকানা. স্পিকার: 1 একটি ঠিকানা. বিশেষভাবে এটি ঠিকানা ফেরৎ এটি যাই হোক না কেন খুব প্রথম কামড়. আমি এক, দুই, তিন ব্যবহার করে রাখা এটি সুবিধাজনক কারণ. এটা প্রথম ঠিকানা ফেরৎ স্ট্রিং অক্ষর. এবং আমরা গত সপ্তাহে বলেন, যে যথেষ্ট. আমরা সবসময় চিন্তা করতে পারেন, কারণ যেখানে স্ট্রিং এর শেষে ঠিক দ্বারা একটি জন্য সঙ্গে, হয়তো, এটা ওভার iterating লুপ বা মত একটি লুপ বা কিছু যে, শুধু "ব্যাকস্ল্যাশ 0" খুঁজছেন, বিশেষ সেন্টিনেলে অক্ষর. এবং তারপর আমরা জানি যে স্ট্রিং দৈর্ঘ্য হতে হবে - এই ক্ষেত্রে - পাঁচ. সুতরাং টেকনিক্যালি GetString, কি আছে এটি এই ক্ষেত্রে Ox123 ফেরৎ পাঠানো হয়. এবং টেকনিক্যালি তারপর কি হল যে আমরা s এর ভিতর, Ox123 সঞ্চয়. দিনের শেষে, এমনকি এই যদিও নতুন ধারণা, পয়েন্টার, তারা হয় শুধু ভেরিয়েবল. কিন্তু তারা বিট সংরক্ষণ ঘটতে যে সম্মিলিতভাবে একটি ঠিকানা প্রতিনিধিত্ব. সুতরাং টেকনিক্যালি তারা পায় গণ সঞ্চিত Ox123 হয়. মানুষ হিসাবে কিন্তু আমরা - আজ অনওয়ার্ড সহ - সত্যিই, সাধারণত, যত্ন যাচ্ছে না প্রকৃত ঠিকানা কি মেমরির কিছু খণ্ড এর. এটা ঠিক বিস্তারিত কম স্তর আছে বুদ্ধিমত্তা আকর্ষণীয় হতে. তাই আমি এই পূর্বাবস্থা করতে যাচ্ছি. এর পরিবর্তে, আরো উচ্চ পর্যায়ের, শুধু বলে যে আমরা পয়েন্টার বিষয়ে কথা বলছি যখন আমি আরো আঁকতে চলেছি conveys যে ব্যবহারকারী বান্ধব তীর একই ধারণা এবং দূরে abstracts প্রকৃত কি বিবরণ অন্তর্নিহিত ঠিকানা. আমরা কোড ফিরে যান এখন যদি, কি আমরা স্ট্রিং T থাকে তাহলে গত সপ্তাহে ঘটেছে GetString সমান? হ্যালো ভাল, আমি আবার যদি, টাইপ করুন আমি পেতে যাচ্ছি এই সময় মেমরি অন্য অঞ্চলে. H-ই-L-L-O ব্যাকস্ল্যাশ 0. কিন্তু আমি GetString বলা হয় কারণ একটি দ্বিতীয় সময় - এবং আমি এ খুঁজছেন থেকে এই জানি GetString, সোর্স কোড - এমনকি এটা হ্যালো ছিল coincidental যদিও দুইবার টাইপ করা, GetString, নয় নিখুত করার চেষ্টা করে যাচ্ছে এবং চতুর হতে. এটা ঠিক অন্য খণ্ড পেতে যাচ্ছে যা কম্পিউটার থেকে মেমরি অন্য ঠিকানাতে হতে যাচ্ছে. ইচ্ছামত শুধু 456 এর কথা বলা যাক. এবং তারপর কি এটি ফিরে যাচ্ছে? এটা 456 ফিরে যাচ্ছে এবং T মধ্যে এটি সংরক্ষণ. তাই কি সত্যিই, নেভিগেশন যাচ্ছে বাম দিকে আমি অন্য খণ্ড আছে মেমরি, 32 বিট সাধারণত. এবং সেখানে Ox456 যেতে যাচ্ছে. কিন্তু আবার, আমি এইসব আগ্রহী না করছি আর বিশেষ সংখ্যা. আমি শুধু abstractly যাচ্ছি একটি তীর হিসাবে এটি আঁকা. তাই এটি এখন একটি নতুন ব্যাখ্যা হয়. কিন্তু এটা যে একই সঠিক ধারণা সব এই সময় ঘটছে হয়েছে. তাই কারণ তারপর, যে এই প্রথম তুলনা সংস্করণ বগী ছিল গত সপ্তাহে কেন? গণ সমান সমান হলে আপনাকে যা করতে হবে যখন আপনি সত্যিই কি T ফণা তুলনা নীচে? আপনি ঠিকানাগুলি তুলনা করছি. এবং শুধু intuitively, স্পষ্টত, Ox123 সমান Ox456 যাচ্ছে না. ঐ সংখ্যার, যারা বিট শুধু ভিন্ন. তাই ধারাবাহিকভাবে, গত সপ্তাহে বলেন আপনি বিভিন্ন জিনিষ টাইপ করুন, এমনকি যদি শব্দ ধারণকৃত একই ছিল. সুতরাং আমরা এই স্থির করা. Layman এর পদ, ফিক্স কি ছিল? শ্রোতা: একটি ফাংশন ব্যবহার করুন. স্পিকার: 1 একটি ফাংশন ব্যবহার করুন. অথবা তারা স্পষ্টভাবে জড়িত হয়, কিন্তু কি একটি ফাংশন ব্যবহার করার জন্য? শ্রোতা: স্ট্রিং তুলনা করার. স্পিকার: 1 স্ট্রিং তুলনা করার. সুতরাং এখানে মৌলিক সমস্যা ছিল আমি বিবেচনা করে যে দ্বারা সংজ্ঞায়িত করা স্ট্রিং গুণ তাদের ঠিকানা তুলনা. এবং অবশ্যই যে এখন একবার শুধু মূক এর আপনি কি ঘটছে বুঝতে ফণা নীচে. সত্যিই দেখতে স্ট্রিং তুলনা করতে হলে তারা যে একটি মানবিক ভাবে সমান করছি দুই স্ট্রিং সমান হতে বিবেচনা করবে আমরা তাদের চরিত্র তুলনা করতে হবে অক্ষরের জন্য অক্ষর. এখন আমি কাজ করতে পারে আছে এই খুব tediously. কিন্তু familiarly, আমরা লুপ জন্য একটি ব্যবহার করে. এবং মাত্র গুলি বন্ধনী তুলনা T বন্ধনী তোমার বিরুদ্ধে আমি. T বন্ধনী বিরুদ্ধে গণ বন্ধনী আমি প্লাস 1 আমি প্লাস 1 টি, এবং তাই ঘোষণা, ভিতরে লুপ কিছু. এবং আমি যে কোনো দুটি অক্ষর স্পট যদি পার্থক্য, অথবা আমি ooh বুঝতে পারি যে, যদি গুলি করা হয় টন আর T তুলনায় খাটো বা দীর্ঘতর আমি অবিলম্বে মিথ্যা বলতে পারেন তারা একই না. কিন্তু আমি গুলি এবং টন মাধ্যমে পেতে এবং বলে যদি একই, একই, একই, একই, একই, শেষ উভয় স্ট্রিং, আমি বলতে পারেন সত্য, তারা সমান. ওয়েল, সৌভাগ্যক্রমে, বছর আগে কেউ আমাদের জন্য যে কোড লেখেন. এবং তারা এটি StrComp বলা স্ট্রিং তুলনা জন্য. এবং এটি একটি সামান্য পাল্টা যদিও যারা হলে স্বজ্ঞাত, StrComp 0 ফেরৎ দুই স্ট্রিং, গুলি এবং টন একই. কিন্তু এটি ঋণাত্মক মূল্য ফেরৎ যদি গুলি অথবা টন বর্ণানুক্রমে আগে আসা উচিত এটা আসতে হবে যদি ইতিবাচক মান টন বর্ণানুক্রমে পরে. আপনি কি কখনও কিছু বাছাই করতে চান, যদি তাই হয়, এটি StrComp দরকারী যে দেখা যাচ্ছে. এটা ঠিক বলে না, কারণ কোন বা হ্যাঁ, সমান না. এটা আপনার ক্রম একটা ধারনা দেয় একটি অভিধান যথাসাধ্য না. StrComp সুতরাং, গুলি কমা T সমান 0 মানে সমান যে স্ট্রিং সত্যিই সমান. যে কেহ এই ফাংশন লিখেছে, কারণ বছর আগে সম্ভবতঃ লুপ জন্য একটি ব্যবহৃত যে মত বা যখন একটি লুপ বা কিছু আবার অক্ষরের একীভূত এবং আবার এবং আবার. কিন্তু সমস্যা দুটি এখানে পড়েছিল. এই copy0.c ছিল. এবং লাল দুটি হল এটি ভ্রান্ত কারণ. এবং আমরা এখানে কি? ওয়েল, প্রথম আমি GetString বলা হয়. এবং আমি গুলি ফেরত মান সংরক্ষণ করা হয়. সুতরাং যে বেশ অনেক হিসাবে একই ছবি এই উপরের অংশ. কিন্তু কি যে পরে আসে? আচ্ছা, আমাকে এগিয়ে যান এবং পরিত্রাণ পেতে এই পুরো গুচ্ছ. আমরা যেখানে আমরা শুধু সময় গুটিয়ে করব এখন সঙ্গে সামঞ্জস্যপূর্ণ যা গুলি আছে, লাইন আপ সেখানে এক. আমি চেক করুন. গণ সমান যদি 0 সমান. এখন, একটি দ্রুত পার্শ্ব নোট, যখন GetString, 0 ফিরে হতে পারে? পর্যাপ্ত মেমরি নেই না. রাইট? এটি এই ঘটতে যাচ্ছে যে বিরল অবশ্যই যে কোন কম্পিউটারে অথবা megs শত শত পেয়েছিলাম উপস্থিত RAM-র, এমনকি যোগাড়. কিন্তু তত্ত্ব, ফিরে পারে 0, বিশেষত যদি ব্যবহারকারী সহযোগিতা না. আপনি না চাই সাজা উপায় আছে ইনপুট এবং কিছু কৌতুক ফিরে মধ্যে GetString কার্যকরভাবে 0. সুতরাং এটা যে চেক করতে যাচ্ছে. আপনি যদি কোনো শুরু করেছেন কারণ যদি ইতিমধ্যে, সেগমেন্টেশন ফল্ট পেতে - যা সম্ভবত একটি উৎস হয়েছে কিছু হতাশা - যারা প্রায় সবসময় ফলাফল মেমরি সংক্রান্ত ত্রুটির. একরকম আপনি একটি বিষয়ে আপ তছনছ আপনি বুঝতে পারছি না, এমনকি যদি পয়েন্টার, একটি পয়েন্টার ছিল. সুতরাং আপনি সেগমেন্টেশন প্রবর্তিত হতে পারে ব্যবহার করে সপ্তাহে এক হিসাবে তাড়াতাড়ি ফল্ট লুপ বা একটি যখন জন্য একটি ভালো কিছু অতিদূরে যাচ্ছে লুপ এবং একটি অ্যারের কিছু অ্যারের সীমা অতীতের যে আপনি সপ্তাহে দুটি ঘোষণা বিশেষ. এমনকি আপনি সমস্যা এটি সম্পন্ন হতে পারে ব্রেকআউট সঙ্গে চার সেট. আপনি সম্ভবত দেখা যায় না যদিও জন্য ডিস্ট্রিবিউশন কোড যে কোন বড় ব্রেকআউট, এটি সক্রিয় আউট যে GRect এবং GOval এবং অন্যান্য ধরনের জিনিস, যারা আসলে পয়েন্টার হয় ফণা নীচে. আমাদের মত কিন্তু স্ট্যানফোর্ড, hides সাজানোর যে বিস্তারিত অন্তত লাইব্রেরির জন্য উদ্দেশ্য, অনেক আমরা করতে চাই স্ট্রিং এবং গৃহস্থালি * জন্য. কিন্তু GRect এবং GOval এবং যারা সব আপনি না হয় অথবা কিছু ব্যবহার করা হবে এই সপ্তাহে পরিণামে হয় মেমরি অ্যাড্রেস. আপনি শুধু এটা জানি না. সুতরাং, সম্ভবত, তারপর বিস্ময়কর না আপনি কিছু ওভার ট্রিপ হতে পারে সেগমেন্টেশন ফল্ট. কিন্তু এখন এখানে আকর্ষণীয় কি আমরা কি 0 পরীক্ষা পরে যদি স্ট্রিং T গুলি পায়. আচ্ছা, আমাকে T ঘোষণা করা যাক. আমি একটি বর্গক্ষেত্র আঁকতে হিসাবে এটা করতে যাচ্ছি 32 বিট এটি কল. এবং তারপর আমি কাজ করতে যাচ্ছি গুলি পায়. ওয়েল, যে কি মানে? ওয়েল, এটা মনে হয় একটু কঠিন এটা জিনিস ছবি. কিন্তু এখানে আমার মনে হয় x এর ভিতরে কি? এই পরিবর্তনশীল ভিতরে আক্ষরিক কি? মান Ox123. ঠিক তাই আমি বলতে যখন স্ট্রিং T গুলি পায়, যে আক্ষরিক সংখ্যা নিতে মানে গুলি, যা Ox123 এবং এটি Ox123 করা. অথবা pictorially, যদি আমি ধরনের বিমূর্ত দূরে যে বিস্তারিত থেকে এটি আছে আক্ষরিক করছেন প্রভাব এই হিসাবে ভাল. সুতরাং এখন, গত সপ্তাহে ফিরে মনে যখন আমরা পুঁজিবাদী টি আমি রইল টি বন্ধনী 0 করেনি. ওয়েল, এটা টি বন্ধনী 0, যদিও পয়েন্টার, আপনি এটা হিসাবে যদিও বিবেচনা করতে পারেন এটি একটি বর্গাকার সহ, একটি অ্যারে বন্ধনী স্বরলিপি. তাই যেখানে টি বন্ধনী 0? ওয়েল, এটা H এর. এবং তাই আমরা কোড যে লাইন ব্যবহার করেন তখন, যে সি type.h যা দুই ঊর্ধ্ব, হেডার ফাইল, যে যেখানে এটি ঘোষিত হচ্ছে. আপনি যদি এই এইচ capitalizing কিন্তু করছি অবশ্যই, যে যে একই সঠিক H এর s এর ভিতরে, তাই কথা বলতে. তাই এখন আপনি বা পরিবর্তিত হয়েছে মূলধনী মূল এবং উভয় কপি তথাকথিত. আপনি একটি কপি না কারণ একটি মানবিক এটা হতে চান যে উপায়. সুতরাং এখানে ফিক্স, কি ছিল copy1.c গত সপ্তাহে? ফাংশন, তাই আসলে আমরা পারা স্ট্রিং কপি করুন. এবং মৌলিকভাবে, আমরা কি করতে হবে স্ট্রিং কপি করার জন্য কি করতে চান? ভাল, এখানে এই সবুজ সংস্করণে আমি এটা মোটামুটি নিম্ন স্তরের কাজ করতে যাচ্ছেন. ফাংশন আসলে আছে তারা এই ব্যাপারে সাহায্য করতে পারে. কিন্তু অধিকাংশ মৌলিক এক, এবং সবচেয়ে পরিচিত এক, অন্তত, শীঘ্রই হবে আমাদের পরিচিত, হল - তাই প্রথম সারির এক সবুজ কোড এখন. আমি শুধু গৃহস্থালি * হিসাবে গণ rewrote. কোন কার্যকরী আছে সেখানে পার্থক্য. আমি CS50 লাইব্রেরি দূরে ছুড়ে ফেলে এবং আমি এটি একটি গৃহস্থালি * কি এটা আহ্বান করছি. এখনই ডট, বিন্দু, বিন্দু, কারণ না কিছু ত্রুটি পরীক্ষা করা আবার কথা বলার জন্য আকর্ষণীয়. তাই এখন T ঘোষিত হয়. এটা খুবই একটি গৃহস্থালি * হয়. তাই আমি একটি সামান্য বর্গ সৃষ্টি আগে যেমন পর্দা. কিন্তু ডান দিকে, malloc, আমরা মেমরি বরাদ্দ করা হয়. তাই মেমরি কিছু খণ্ড বরাদ্দ. এবং আসলে আমরা কত বাইট কাজ বরাদ্দ করতে চান, এটা মনে হচ্ছে না? ওয়েল, s এর স্ট্রিং দৈর্ঘ্য. এটা হ্যালো যে, তাই যদি পাঁচ হতে যাচ্ছে. আমরা H-ই-L-L-O বলবো. পাঁচ বাইট তাই. কিন্তু তারপর 1 প্লাস, কেন 1? 0 অক্ষর. আমরা এই লোক জন্য রুম ছেড়ে না যদি আমরা ঘটনাক্রমে একটি অবস্থা তৈরি হতে পারে স্ট্রিং যেখানে H-ই-L-L-O. এবং তারপর পরবর্তী সময় GetString, হয় , বলা হয় এবং আমি উদাহরণস্বরূপ, টাইপ ডেভিড, ডি-A-V-I-D, কম্পিউটার যাচ্ছে গণ আসলে মনে করি যে আপনি H-ই-L-L-O-D-A-V-I-D আছে, কারণ যারা শব্দের মধ্যে বিরতি নেই. তাই আমরা যে বিরতি প্রয়োজন. সুতরাং আমরা পাঁচ চাই না. আমরা ছয় বাইট চান. এবং বাইট আমি বলতে. কিন্তু গৃহস্থালির কাজ সত্যিই সময় সাইজ এর. টেকনিক্যালি গৃহস্থালির প্রায় সবসময় একটি একক বাইট. কিন্তু শুধু আমাদের কোড পোর্টেবল করতে, তাই এটি কাজ করে, যাতে কথা বলতে বিভিন্ন কম্পিউটার, এমনকি তারা যদি পারে নীচে কিছুটা আলাদা হতে ফণা, আমি জেনেরিক যাচ্ছি গৃহস্থালির কাজ বলে মাপ যাতে আমার কোড সবসময় কাজ করে. এবং আমি এটা ঠিক কম্পাইল করতে হবে না আমি আমার কম্পিউটার আপগ্রেড করার জন্য বা ব্যবহার করার জন্য, কারণ কিছু ভিন্ন প্ল্যাটফর্ম. তাই আমি 6 বার আকার পেয়েছেন 1 হতে হবে, যা একটি গৃহস্থালি. সুতরাং যে মানে malloc পারে আমার সম্পর্কে ছয় বাইট দিতে. আসলে এরকম যে কি? আচ্ছা, আমাকে এখানে সময় ফিরে পাকানো যাক আমরা বিবরণ আছে যেখানে আপনি. আমি এখানে ফিরে যান, তাই যদি আমি ঘোষণা করেছি T নামক একটি গৃহস্থালি *. আমি এখন ছয় বাইট জন্য malloc বলা করেছি. এবং এখন আমি ঐ ছয় আঁকা যাচ্ছে না শুধু অ্যারের আগে চাই বাইট. কিন্তু আমি আসলে কি জানেন না এই অ্যারে ভিতরে. আপনি মেমরি বরাদ্দ করা হলে এটি সক্রিয় আউট যে আপনি কি কিছু আছে যে বিশ্বাস করতে পারে না সেখানে পরিচিত মান. এটা কিছু ব্যবহৃত হয়ে থাকতে পারে অন্যথায়, কিছু অন্যান্য ফাংশন, কিছু অন্যান্য আপনি লিখেছেন যে কোড লাইন. সুতরাং আমরা সাধারণত এইসব আবর্জনা ডাকবো মান হিসাবে, সম্ভবত, তাদের আঁকা প্রশ্ন চিহ্ন, শুধু ইঙ্গিত যে আমরা সেখানে আসলে কি জানি না. এবং যে এতক্ষণ আমরা কোন বড় চুক্তি যারা মুছে ফেলা যথেষ্ট স্মার্ট আবর্জনা সংখ্যার মান বা আমরা যত্ন সম্পর্কে যে অক্ষর. তাই এই ক্ষেত্রে আমি কি করতে যাচ্ছি? ওয়েল, আমার লাইন কোড পরবর্তী, আমি চার আছে. আমি 0 পেতে int, এন পায় s এর স্ট্রিং দৈর্ঘ্য. লুপ জন্য তাই একটা পরিচিত. আমি কম বা N সমান যা সাধারণত উপরে থাকে. কিন্তু এই সময় এটি ইচ্ছাকৃত নয়. আমি + + ', এবং তারপর আমি সহজভাবে করতে T বন্ধনী আমি গুলি পায়. আমার ছবি এ ভালো দেখায় কারণ T সঞ্চিত এই মুহূর্তে হল, মেমরি যে র্যান্ডম খণ্ড ঠিকানা যার মান জানা যায় না. কিন্তু যত তাড়াতাড়ি আমি T বন্ধনী মতো আমাকে এখানে রাখে 0. আপ কি আছে টানা পেয়ে শেষ? আমরা জ নির্বাণ আপ শেষ. যে গুলি বন্ধনী 0 কি কারণ. জন্য এবং তারপর একই জিনিস ই, এবং L, এবং L, এবং হে. N, কেন আমি মাধ্যমে যেতে হয়নি N একটি সমান? 0 চরিত্রের কারণে. তাই ঠিক, তারপর পরিষ্কার হবে, যদি আমি আসলে আপনি মুছে যাই হোক না কেন এই আবর্জনা মান এবং তারপর আসলে আঁকা আমি আশা, এই গুলি বন্ধনী 1, 2, হয় 3, 4, প্লাস যে trailing এর নতুন অক্ষর. তাই এখন আমরা বিন্দু গত অব্যাহত যদি এই সঠিক সংস্করণ মধ্যে বিন্দু, বিন্দু এবং বড় হাতের অক্ষরে T বন্ধনী 0 আমি চাই, এর অবশ্যই, capitalizing করা ঠিক এই এখানে লোক, যা ধারণার দিক থেকে, পরিণামে উদ্দেশ্য ছিল. সুতরাং যে সব পয়েন্টার. এবং আপনি সপ্তাহের জন্য তাদের ব্যবহার করছি এখন স্ট্রিং প্রেক্ষাপটে. কিন্তু ফণা নীচে তারা একটু বেশি জটিল. কিন্তু আপনি এই তাদের চিন্তা যদি সচিত্র ফর্ম তারা যে আমি উত্থাপন তারা সম্ভবত যে সব ভয়ের না প্রথম প্রথম নজরে মনে হতে পারে, বিশেষ করে এই ধরনের নতুন বাক্য গঠন সঙ্গে. পয়েন্টার উপর কোন প্রশ্ন, স্ট্রিং, বা চিহ্ন? হ্যাঁ? শ্রোতা: আপনি ফিরে যেতে পারেন [শ্রবণাতীত] আপনি? স্পিকার 1: শিওর. শ্রোতা: আপনার শেষ আসা সুতরাং কিভাবে লাইন, আপনি একটি * T লাইন থাকে না এবং একটি * গুলি লাইন? আপনি রেফারেন্স আছে কি না - স্পিকার: 1 আহ, সত্যিই একটি ভাল প্রশ্ন. কেন আমি একটি * T এবং একটি * গুলি না? কারণ আমাদের মত সংক্ষেপে, গত সপ্তাহে, ফাংশন অদলবদল, আমি যে তখন কি বলেছেন আপনি একটি পয়েন্টার মানে পেয়েছেন আমরা কি হিসাবে আপনি সেখানে যেতে যা শারীরিকভাবে মঞ্চে, আপনি আসলে ছিল তারকা অপারেটর ব্যবহার করুন. এটি সক্রিয় আউট যে এই বর্গাকার বন্ধনী- স্বরলিপি আমরা অন্বিত ডাকবো কি শুধু একটি সেক্সি ভাবে, যা চিনি, জন্য এটি এর সাঁটে লেখার স্বরলিপি বলছে আপনি বর্ণনা করছি ঠিক কি. কিন্তু এটা একটু আরও বেশি ধারণাসম্পন্ন এর. এবং এর ফলে ঝুঁকি এই অধিক বলে মনে হচ্ছে এটা করার প্রয়োজন আর জটিল, কি সত্যিই এখানে যাচ্ছে নিম্নোক্ত - আমি মানে * T বলে যে যদি আপনি যান ঠিকানা T মধ্যে সংরক্ষণ করা হয়. তাই আক্ষরিক, সংরক্ষণ T হলে যে ঘঃ ঠিকানা প্রাথমিকভাবে, * T উপায় এখানে যান. এখন, T বন্ধনী 0 মানে কি? একই সঠিক জিনিস. এটি শুধু একটি সামান্য আরো ব্যবহারকারীর লিখতে বন্ধুত্বপূর্ণ. কিন্তু আমি এখনও কাজ করছি না. আমি * T * গুলি পায় না বলতে পারেন. কারণ আমি তখন কি কাজ করা হবে? আমি H, H, H, H, H নির্বাণ করা চাই গোটা ব্যাপারটাই সর্বত্র. রাইট? * T কারণ T মধ্যে ঠিকানা যান. কিন্তু আমরা একটি লুপ এর ভিতরে করছি. এবং কি মান আমি বৃদ্ধিশীল am অবশ্যই, প্রতিটি পুনরাবৃত্তির নেভিগেশন? আমি. কিন্তু একটি সুযোগ আছে এখানে, ডান? এটি হচ্ছে মত এই মতানুযায়ী যদিও একটি সামান্য আরো পরিশীলিত বর্গাকার বন্ধনী-স্বরলিপি আর আমরা কিছু সময়ের জন্য ব্যবহার করেছি - আমার সম্পর্কে আছে আমার জ পরিবর্তন পূর্বাবস্থা করা যাক - এখন এই একটি সামান্য পাওয়ার হয়, যদিও fancier, মৌলিক ধারণা, যদি * T এখানে অর্থ * T ঠিক T মধ্যে ঠিকানা যান. কিন্তু T থাকা ঠিকানা কী ছিল? আমরা ব্যবহার করতে থাকুন নম্বর? Ox456 লেগেছে, এর যে ফিরিয়ে আনা যাক শুধু আলোচনা অনুরোধে জন্য. ওয়েল, আমি ই এ পেতে চান T স্ট্রিং, আমি যেতে চাই মূলত, 456. অথবা পরিবর্তে, 457. আমি শুধু এক যোগ করা আবশ্যক. কিন্তু আমি ঠিক আছে, তা করতে পারে? T, আমি অঙ্কন রাখা যদিও কারণ এটা এখন একটি তীর হিসাবে এটা এর নম্বর, Ox456. এবং আমি যে এক, যোগ অথবা আরও বেশি যদি সাধারণত, আমি করতে পারেন যে আমি যোগ হলে আমি চাই ঠিক যেখানে আসলে পেতে. তাই আমি আসলে এই না - এবং এখন এই বলা কি পয়েন্টার এরিথমেটিক - আমি এই লাইন সরাতে পারেন. সত্যি, যা, আমি পরিস্কার এবং মনে করেন পড়তে একটু বেশি ব্যবহারকারী বান্ধব. কিন্তু এই কোন কম সঠিক. কোড এই লাইন এখন ব্যবহার করা হয় পয়েন্টার এরিথমেটিক. এটা যেতে বলছে নিম্নলিখিত ঠিকানায় - T শুরু যাই হোক না কেন, যা যা প্রাথমিকভাবে T প্লাস আমি হয় যা মহান, 0. যে T শুরুতে মানে প্লাস 1, প্লাস 2, প্লাস 3, এবং তাই ঘোষণা. S-এর সাথে এবং একই চুক্তি. এই জন্য তাই অন্বিত চিনি. কিন্তু বোঝার কি সত্যিই যাচ্ছে ফণা নীচে, আমি তর্ক করবে নিজেই এবং আসলে দরকারী. এটা আছে না এখন মানে আরো অনেক কিছু ম্যাজিক যাচ্ছে ফণা নীচে. আরো অনেক আছে যাচ্ছে না আমরা আপনার জন্য ছুলা ব্যাক করতে পারেন যে স্তর. এই সি হয়. এবং এই প্রোগ্রামিং করা হয়. প্রশ্নের সত্যিই ভাল. ঠিক আছে, তাই এই যে বগী ছিল আমি আগে উল্লেখ ছিল প্রোগ্রাম. swap 'দ্বিধান্বিত ছিল. কাজ বলে মনে করে থাকেন. শুধু দুধ সঙ্গে চান এবং যে প্রত্যাহার কমলার রস - আমি শুরু যা আজকের বিক্ষোভের পানীয়. তাই শুধু কমলার রস এবং সঙ্গে দুধ, আমরা একটি ব্যবহার করতে হয়নি অস্থায়ী পরিবর্তনশীল, tmp, একটি রাখা অস্থায়ীভাবে যাতে আমরা তারপর পারে বো আপডেট তারপর তার মান এবং পরিবর্তন. কিন্তু এই ফাংশন, আমরা বলেন, এই এই ফাংশন যা ছিল প্রোগ্রাম লিখিত ভুল ও ত্রুটিপূর্ণ ছিল, কেন? হ্যাঁ? শ্রোতা: [শ্রবণাতীত]. স্পিকার 1: ঠিক, যখন আপনি swap 'কল - অথবা আরো সাধারণভাবে, আপনি যখন সবচেয়ে কোনো ফাংশন কল - যে ফাংশন আর্গুমেন্ট যদি আদিম, তাই কথা বলতে, ints এবং চিহ্ন এবং টেনিস এবং floats, জিনিষ ছাড়া নক্ষত্র, আপনার একটি কপি দিয়ে যাচ্ছি যুক্তি. এক্স 1 ছিল এবং y 2 ছিল, তাই যদি একটি যাচ্ছে 1 এবং 2 বো হতে যাচ্ছে. কিন্তু তারা বিভিন্ন অংশ হতে যাচ্ছেন বিট বিভিন্ন অংশ সম্পর্কে সংরক্ষণ করা কি যে মেমরি অভিন্ন মান. তাই এই কোড নিখুঁত সুপার a ও b সোয়াপিং এ. এটা সোয়াপিং কোন ভাল - - গত সপ্তাহে এর উদাহরণ x এবং y. আবার, তারা, কারণ ভুল সুযোগ. এখন, আমরা এই খাটানো সম্পর্কে কিভাবে যান নি? আমরা ফাংশন করতে ছিল একটু uglier তাকান. কিন্তু আবার, বিবেচনা কি এই মাত্র মানে. এবং প্রকৃতপক্ষে, সুসংগতি, আমাকে এটি অভিন্ন, তাই এক জিনিস পরিবর্তন আমরা ঠিক কি. আমি গত সপ্তাহে হিসাবে উল্লেখ করেছে, এটি না যায় যেখানে ব্যাপার. আসলে, সাধারণত আপনি করা হবে পরিবর্তনশীল নামের পাশে তারকা. কিন্তু আমি এটা একটু সহজ হবে মনে হয় পরবর্তী * বিবেচনা এটি অর্থ ডাটা টাইপ একটা পয়েন্টার এই ক্ষেত্রে কোন int-এ. আমি এখানে কি করছেন? আমি আমার কোন int দিতে না বলছে অন্য int-দ্বারা অনুসরণ, তাদের একটি এবং বো কলিং. আমার সম্পর্কে কোন int এর ঠিকানা দিন. আমার সম্পর্কে অন্য কোন int এর ঠিকানা দিন. যারা a ও b ঠিকানাগুলি ডাকুন. এবং তারপর * স্বরলিপি নিচে ব্যবহার নিচে, যারা প্রত্যেকটি ঠিকানায় যান হিসাবে হয় পেতে প্রয়োজন বা তার মান সেট. কিন্তু এখানে একটি ব্যতিক্রম আছে. কেন আমি tmp পাশে একটি * আছে না? আমি কেন উদাহরণস্বরূপ, এই না? আমি সব যেতে হবে মত মতানুযায়ী আউট এবং গোটা ব্যাপারটাই সঠিক. হ্যাঁ? শ্রোতা: [শ্রবণাতীত]. স্পিকার 1: আমি ঘোষণা করেন নি একটি স্ট্রিং হিসাবে tmp. তাই এই, এই ক্ষেত্রে, ঘোষণা করা হবে একটি tmp কোন int এর ঠিকানা হতে পারে. কিন্তু যে আমি চাই বেশ কি না কারণের একটি দম্পতি জন্য. শ্রোতা: আপনি তাদের অদলবদল করতে না চান. স্পিকার 1: ঠিক, আমি অদলবদল করতে না চান tmp সঙ্গে রয়েছে. tmp ঠিক সপ্তাহে এক উপাদান. আমি চাই সব পরিবর্তনশীল কিছু সংখ্যা সঞ্চয়. আমি এমনকি ঠিকানা সম্বন্ধে গ্রাহ্য না এই মুহূর্তে. আমি 32 বিট প্রয়োজন বা তাই কোন int সঞ্চয়. এবং আমি যারা 32 বিট মধ্যে লাগাতে চান যাই হোক না কেন, তাই কথা বলতে, একটি নয়, কিন্তু আরও ভালো হবে, একটি কি হয়. একটি একটি ঠিকানা যদি, * একটি উপায় কারণ সেখানে যান এবং মান 1 পেতে. উদাহরণস্বরূপ, গত সপ্তাহে এর উদাহরণ অথবা B এর ক্ষেত্রে, 2 মান পেতে. তাই কি সত্যিই যাচ্ছে? আমার সম্পর্কে যে এখানে একটি ছবি আঁকা চলুন শুরু করা যাক শুধু আজ অংশ বাদে আঁশ বাহির করা. কিন্তু এই দেখা যাবে বেশ কিছু সময়ের জন্য. এই, আমি দাবি, কি আপনার কম্পিউটারের হয় মেমরি আপনি একটি চালানোর মত দেখায় প্রোগ্রাম, যে কোন প্রোগ্রাম. আপনি খুব শীর্ষে একটি প্রোগ্রাম চালাতে হলে আপনার কম্পিউটারের RAM-র - তাই মনে আপনার এই আয়তক্ষেত্র, সত্যিই, কম্পিউটারের RAM-র বা মেমরি, সমস্ত 101 এটি বিলিয়ন বাইট, সমস্ত দুই বিলিয়ন বাইট, এটি সমস্ত দুই গিগাবাইট, আপনি পরিমাণ যাই হোক না কেন, এটি একটি আয়তক্ষেত্র হিসাবে আঁকা যাক. আপনি একটি প্রোগ্রাম চালাতে এবং যখন আমি যে দাবি মাইক্রোসফট ওয়ার্ড অথবা Chrome-এর মত যে ভালো বা কিছু, যে বিট মাইক্রোসফট বা যে Google লিখেছিলেন - যারা প্রোগ্রামের ক্ষেত্রে - আপনার কম্পিউটারের মেমরিতে লোড করা হয় তারা আরো কার্যকর করা যেতে পারে যেখানে দ্রুত এবং প্রতিপালিত CPU-র মধ্যে, যা কম্পিউটারের মস্তিস্ক হয়. এবং Tam তারা খুব সংরক্ষিত করছি আপনার প্রোগ্রাম শীর্ষে, তাই কথা বলতে. অন্য কথায়, যদি এই একটি খণ্ড হয় মেমরি, আপনি ডবল উপর ক্লিক করা হলে মাইক্রোসফট ওয়ার্ড, বিট আসা হার্ড ড্রাইভ বন্ধ. তারা উপস্থিত RAM-র মধ্যে লোড করা হবে. এবং আমরা খুব শীর্ষে তাদের আপ ঠেলা করব ধারণার দিক থেকে এই আয়তক্ষেত্র. ওয়েল, আপনার মেমরি বাকি হয় বিভিন্ন জিনিষ জন্য ব্যবহৃত. খুব শীর্ষে আপনি আরম্ভ দেখুন তথ্য ও ডেটা uninitialize. এই সঙ্গে, অধিকাংশ অংশ জন্য, কি আছে ধ্রুবক বা গ্লোবাল ভেরিয়েবল যে মান আছে. যারা অন্য সময় কিন্তু আরো. তারপর আপনি যা গাদা আছে, আমরা ফিরে আসবো. কিন্তু নীচে যে অংশ বিশেষ করে ডান এখন germane. এটা তথাকথিত স্ট্যাকের না. তাই শুধু এখানে সবচেয়ে কোনো ডি Hall চান ক্যাম্পাস, আপনি সেই ট্রে আছে শুধু যা একে অপরের উপর গাদা আপনি খাদ্য এবং যে কোন বস্তু লাগাতে পারেন. একটি কম্পিউটার সিস্টেমের মধ্যে স্ট্যাকের অনুরূপ. আমরা ব্যবহার, ট্রে যেহেতু ছাড়া ডাইনিং হল, অবশ্যই, বোঝানো হয় জিনিষ ট্রে বহন বা ফ্রেম - আমরা তাদের ডাকবো হিসেবে - একটি কম্পিউটার এর মধ্যে মেমরি ধারণ করার জন্য ব্যবহার করা হয় ভেরিয়েবল এবং মান. তাই কি সত্যিই যায় ফণা নীচে? আচ্ছা, আমাকে বেশি উল্টানো যাক এখানে পর্দায়. এবং let এর ঠিক উপর ফোকাস একটি মুহূর্ত জন্য নীচের অংশ. এই আমার নীচে অংশ যদি কম্পিউটার এর মেমরি এটি সক্রিয় আউট যখন আমি ফাংশন প্রধান কল - যা সত্যি, এরকম স্বয়ংক্রিয়ভাবে আমার জন্য - আমি মেমরি একটি খণ্ড পেতে আমার RAM-র নীচে, তাই কথা বলতে. প্রধান যেখানে এবং এই হল স্থানীয় ভেরিয়েবল যান. যেখানে argc এবং argv হয়তো এটা যান, এবং কোনো ভেরিয়েবল আমি প্রধান ভিতর ডিক্লেয়ার. তারা নীচে শেষ পর্যন্ত আমার কম্পিউটার এর RAM-র. এখন প্রধান যে কল একটি ফাংশন অনুমান swap 'র মত, এটা যেমন গত সপ্তাহে কি? ভাল, আমরা মূলত একটি, একটি নতুন ট্রে করা মেমরি আমার খণ্ড সম্মুখের নতুন ফ্রেম. এবং আমি এই হিসাবে বর্ণনা করা যাচ্ছে না swap 'র ফাংশন অন্তর্গত. এখনই swap 'র ভিতর কি? ওয়েল, গত সপ্তাহে এর প্রোগ্রাম উপর ভিত্তি করে এবং আমরা শুধু থেকে একটি উদ্ধৃতাংশ দেখেছি এক, swap 'এর ফ্রেম ভিতরে, অথবা swap' র এর উপর ট্রে, কি ভেরিয়েবল? ওয়েল, a ও b. যারা তার স্থানীয় আর্গুমেন্ট কারণ প্লাস একটি তৃতীয়, tmp. সত্যিই তাই, আমি এই আঁকতে পারে একটি সামান্য আরো পরিচ্ছন্নভাবে. আমাকে এগিয়ে যান এবং লেবেল পূর্বাবস্থা করা যাক. এবং আপনি কি জানেন যে সম্পর্কে দাবি করা যাক? একটি সম্ভবত এখানে শেষ করতে যাচ্ছে. বি এখানে শেষ করতে যাচ্ছে. এবং tmp এখানে শেষ করতে যাচ্ছে. এখন, ক্রমবিন্যাসের প্রতাপ একটু ভিন্ন হবে. কিন্তু ধারণার দিক থেকে এই ধারণা করা হয়. এবং শুধু সম্মিলিতভাবে এই কি আমরা swap 'এর ফ্রেম কল, অথবা করব ডাইনিং হল ট্রে. প্রধান সঙ্গে এবং একই চুক্তি. কিন্তু আমি যে পুনরায় আঁকুন না. কিন্তু যে যেখানে argc এবং argv এবং কোনো x এবং y মত স্থানীয় ভেরিয়েবল পাশাপাশি হতে পারে. সুতরাং এখন সত্যিই কি ঘটছে সে বিবেচনা আপনি swap 'যখন কল. যেমন আপনি swap 'যখন কল, নির্বাহ কোড এই, আপনি, কথা প্রসঙ্গে করছি বগী সংস্করণ, a ও b হিসাবে x এবং y কপি. আমি এখন এই আঁকা না তাই আপনি যদি পর্দায় - এই সময়ে আরও ভাল পেয়েছিলাম - আমি নিজেকে কহন ছিল গল্প তাই এই বগী সংস্করণ ছিল যখন আমরা আক্ষরিক a ও b কথা প্রসঙ্গে অদলবদল কল পূর্ণসংখ্যা হিসাবে, কি সত্যিই কি ঘটছে? ভাল, কি সত্যিই ঘটছে না. আমাকে এগিয়ে যান এবং শুধু পূর্বাবস্থা চলুন শুরু করা যাক এখানে কিছু স্থান আপ সাফ করতে. তাই এই আমার কম্পিউটার এর মেমরি হয়. আমি যদি তাই হয়, উদাহরণস্বরূপ - আসলে এর যাক এই ভাবে করবেন - আমি এই সংরক্ষণ, হল x দাবি করে যে যদি গত সপ্তাহেই মত মান 1. এবং এই মান সংরক্ষণ, Y হয় 2 মাত্র গত সপ্তাহে না. এবং এই, আমি ও swap 'যখন কল, প্রধান যার ফলে একটি এবং নিজেকে এক্সেস প্রদান বো এবং tmp, আমি যে দাবি করতে যাচ্ছি এই একটি এবং এই 1. এই বো. এই 2. এই tmp বলা হয়. এবং প্রাথমিকভাবে, এটি কিছু আবর্জনা মান আছে আমি আসলে এটি একটি সঞ্চয় পর্যন্ত যা 1. তারপর আমি এগিয়ে যান এবং পরিবর্তন একটি কি হবে? B এর মান. তাই এখন আমি এখানে দুই আছে. এবং তারপর আমরা বো tmp পায় বলেন. আবার, বৈধতা পরীক্ষা করে, ঠিক যেমন তৃতীয় এখানে কোড লাইন কেবল এই হল এক, বো tmp পায়. তাই সর্বশেষে, আমি কি করব? আমি এগিয়ে যান এবং বো হতে পরিবর্তন যাই হোক না কেন tmp এর মান 1, যা হয়. আমি আবার tmp স্পর্শ করবেন না. কিন্তু এখন, সমস্যা যত তাড়াতাড়ি swap হিসাবে হয় আয়, এটি হস্তান্তর না কারণ কিছু মান ফিরে, কোন রিটার্ন আছে বিবৃতি এটা স্পষ্টভাবে. আসলে কি ঘটছে? ওয়েল, মূলত এই সব স্মৃতি - ঠিক আছে, দৃশ্যত: রবার সার্চইঞ্জিন একটি সময়ে শুধুমাত্র এক আঙুল - শুধু disappears. এখন বাস্তবে এটি না কোথাও হয় যাব. তবে আপনি যদি মনে করতে পারেন এখন প্রশ্ন চিহ্ন হিসাবে. এটা কোনো কারণ আসলে ব্যবহার. এবং কিছুই যারা মান সম্পন্ন করা হয়. তাই সবুজ সংস্করণের ক্ষেত্রে এই কোড পরিবর্তে কি হচ্ছে swap 'র মধ্যে পাস? সুতরাং ঠিকানাগুলি. সুতরাং x এর ঠিকানা এবং y এর ঠিকানা. আমরা তাই আপনি যদি এই গল্প শেষ পুনরায় বলুন সময়, এবং আসলে আমি আবার swap 'র আঁকা কিন্তু পয়েন্টার সাথে, এই এই একটি হচ্ছে খ হচ্ছে, এবং এই হচ্ছে tmp, কি আসলে এই সবুজ একটি সঞ্চিত আমি পার করছি যেখানে আমার কোড এর সংস্করণ ঠিকানার মধ্যে? এটা x এর একটি পয়েন্টার হতে যাচ্ছে. তাই আমি একটি তীর আঁকতে পারে. কিন্তু একই অবাধ ব্যবহার আগে যেমন. চলুন শুরু করা যাক এই বলে যে Ox123 মত. এবং এই Ox127 হতে যাচ্ছে, কারণ এটা, কারণ এটি চার বাইট দূরে এর একটি int-এ, তাই Ox127. এবং আবার, আমি কিছু স্বাধীনতাকে গ্রহণ করছি সংখ্যার সঙ্গে. তারা হবে তুলনায় অনেক ছোট করছি আসলে একটি ভিন্ন অনুক্রমে চিহ্নিত করা এবং. কিন্তু যে কিভাবে ছবিটি এখন ভিন্ন. কিন্তু আমি এই সবুজ কোড ব্যবহার করেন তখন এবং আমি int-tmp * একটি পেতে পারি. , নিম্নোক্ত কাজ নিতে * একটি উপায় , একটি মধ্যে যে ঠিকানা এবং এটা যেতে যা 1. এবং যে আমি তারপর tmp রাখা কি. এদিকে, কোড পরের লাইনে এখানে, * একটি বো পায়, এর অর্থ কি? ওয়েল, * একটি, তাই এখানে যান পায় * খ, যা সেখানে যাওয়ার মানে. সেখানে মান রাখা মানে. অবশেষে, কোড শেষ লাইন সহজভাবে * বো tmp পায় বলেন. তাই বো বলেছেন সেখানে যান এবং সঙ্গে এটি মুছে ফেলা এই ক্ষেত্রে, যাচ্ছে যা tmp আবার,, 1 হতে হবে. এবং এই হল কেন সবুজ সংস্করণ আমাদের কোড কাজ, লাল, যেহেতু সংস্করণ করেনি কখনও. কিভাবে নিচে এটা সব ঠিক boils মেমরি পরিচালিত এবং এটি যেখানে হয় আসলে আপনার মধ্যে স্থাপন করা কম্পিউটারের RAM-র. এবং এখন জন্য, যে এক স্ট্যাকের জন্য ব্যবহৃত হচ্ছে. বহির্বিন্যাস প্রশ্ন? পয়েন্টার নেভিগেশন? অথবা swap 'র উপর? ঠিক আছে, তাই malloc, রিকল, ভালো কিছু করেনি. এটি একটি সুপার সহজ উদাহরণ. এবং এই এক যে ছিল Binky বেশ যদ্যপি, আমাদের চালু দ্রুত, ক্লাস শেষে. Dammit, সেখানে আমরা আবার যেতে. তাই এই উদাহরণ যে পুনরাহ্বান যে Binky যদিও আমাদের চালু কিছুটা দ্রুত ক্লাস শেষে. এবং এখানে আমরা সত্যিই malloc ব্যবহার দ্বিতীয় সময় জন্য. প্রথমবার কারণ আমরা এটি ব্যবহার পর্যাপ্ত RAM উপস্থিত তৈরি, পর্যাপ্ত RAM উপস্থিত বরাদ্দ একটি স্ট্রিং সঞ্চয়. এই সময় Binky এটা সহজ রাখা. তাই এটি শুধু সঞ্চয় এর কোন int, দৃশ্যত. এবং যে সম্পূর্ণই সূক্ষ্ম. এটি করার জন্য, উন্মুক্তভাবে, একটু অদ্ভুত এক int-এ বরাদ্দ malloc ব্যবহার করুন. কিন্তু নিক এর claymation বিন্দু ছিল সত্যিই কি গল্প বলা এরকম অথবা যখন ঘটতে না আপনি মেমরি mistreat. তাই এই ক্ষেত্রে, এই প্রোগ্রাম কিছু জিনিস না. এখানে প্রথম ক্ষেত্রে, এটা ঘোষণা একটি পয়েন্টার কোন int-x এর বলা হয়. এর পরে একটি পয়েন্টার ঘোষণা কোন int-Y বলা হয়. তারপর, x এর মধ্যে কি সঞ্চয়? এখন অন্য কেউ. অনুযায়ী x এর মধ্যে সঞ্চিত পরার কি এই প্রোগ্রামের থার্ড লাইন? শ্রোতা: [শ্রবণাতীত]. স্পিকার 1: ভাল, বেশ বাইট, প্রতি বলে. এখন আরও ভালো হবে. X এর মধ্যে কি সংরক্ষিত পরার? একটি ঠিকানা, আমি এটা শুনে মনে হয়. সুতরাং malloc কি ফিরে না? malloc আচরণগতভাবে বরাদ্দ মেমরি একটি খণ্ড. কিন্তু এটা কিভাবে আপনি এটি অ্যাক্সেস দিতে না? এটা কি ফেরৎ? প্রথম বাইট এর ঠিকানা মেমরি খণ্ড মধ্যে. এখন, এই সুপার সহজ. এটা শুধু একটি বাইট আছে, যার মানে হচ্ছে আমরা ফিরে পেয়ে থাকেন ঠিকানা হল গোটা ব্যাপারটাই ঠিকানা. আমি তখন x এর মধ্যে সঞ্চিত, ঠিকানা হল মেমরি যে তাল না. এদিকে, পরে কি হবে? তাই আসলে, এর এগিয়ে যান এবং এই বাস্তব দ্রুত আঁকা. আমরা এখানে পর্দায় যেতে উপর এবং যদি তাই আমরা এই নিঃশেষিত int-* x এবং int-* Y আমার জন্য কি করতে যাচ্ছে? আমি এটা ঠিক করতে যাচ্ছে দাবি করে যে ভালো কিছু এবং এটি এক্স কল, এবং এই এবং এটি Y কল. এদিকে, কোড তৃতীয় লাইন কোন int মাপ বরাদ্দ করা যাচ্ছে, যা হতে হবে - আমি দুঃখিত যদি - আমি এক int-বোঝানো এক আগে একটি সাধারণ কম্পিউটারে চার বাইট. এবং CS50 প্রয়োগ অন্তত. তাই এই বরাদ্দ করা যাচ্ছে না এটা কে জানে? কোথাও খুঁজে এখানে. এবং এই কিছু সংরক্ষণ করা হয় ঠিকানা Ox, কে জানে? কিন্তু কি ফিরে পেতে যাচ্ছে যে ঠিকানা. কিন্তু আমরা pictorially এই আঁকা করব যে ঠিক মত একটি তীর. এখন পরের লাইন * X 42 পায়. * X layman এর পরিপ্রেক্ষিতে এর অর্থ কি? ঠিক আছে যান. যে ঠিকানায় যান. অথবা অন্য কথায়, অনুসরণ তীর এবং সেখানে 42 করা. কিন্তু তারপর খারাপ কিছু ঘটেছে Binky আপনি, ডান? যে লাইন এখানে পাঁচ প্রত্যাহার, * Y পায় 13 প্রকৃতপক্ষে একটি দুর্ভাগা নম্বর, আমাদের জন্য কি? ওয়েল, * Y উপায় আছে যান. ওয়েল, এই দেওয়া হয়নি একটি মান এখনো, ডান? কোড Y হচ্ছে না কিছু সক্রিয়া. আমরা x সক্রিয়া করা হচ্ছে ছিল একটি ঠিকানায়. কিন্তু Y উপরে ঘোষণা করা হয়. কিন্তু তারপর একটি সেমিকোলন, কোন মূল্য আসলে এটি স্থাপন করা হয়. সুতরাং এই কল পরিষ্কার একটি আবর্জনা মান. কে আছে জানেন কি? এটি ব্যবহার করা হয় যে বিট অবশিষ্টাংশ এর মধ্যে কিছু কোড পূর্ববর্তী রেখা দ্বারা আমার প্রোগ্রাম. আমি সেখানে যেতে বলে, তাই যদি এই মত হল আমি এই তীর যেখানে কোন ধারণা আছে শেষ পর্যন্ত যাচ্ছে. যখন আপনি সাধারণত এবং যে একটি সেগমেন্টেশন ফল্ট পেতে. যদি আপনি দূর্ঘটনাক্রমে dereference, তাই আপনি কথা বলতে, বা না একটি ঠিকানায় আসলে একটি বৈধ ঠিকানা, খারাপ ব্যাপার ঘটতে. এবং যে কি ঘটেছে ঠিক Binky মনে. তাই প্রত্যাহার যে নিক যে বিবরণ এখানে কহন একই ধারণা ছিল কি আমি বিভ্রম সঙ্গে টানা করেছি সেখানে বোর্ডে খড়ি. X এবং y ঘোষণা করা হয়. তারপর আমরা মাপ বরাদ্দ কোন int এবং x এর মধ্যে এটি সংরক্ষণ করা হয়. তারপর আমরা কি পরের লাইন * X. এই নিক এর যাদু জাদুদণ্ড ছিল dereferencing হয়. যে মেমরি 42 করা x এর দ্বারা নির্দিষ্ট. কিন্তু এই যেখানে জিনিষ ভয়ঙ্করভাবে ভুল হয়েছে. রাইট? আমরা dereference Y করার চেষ্টা করে. কিন্তু Y অধিকার, কিছু অচল মূল্য ছিল? নীচে বাঁদিকের যে তীর কোণার, না হয় আসলে কিছু ইশারা. এটা কি আমি করছেন ধরনের বোর্ডে এখানে করেছিল. তাই খারাপ ব্যাপার ঘটতে, সেগমেন্টেশন এই ক্ষেত্রে ফল্ট, অথবা Binky ফল্ট. কিন্তু আমরা তখন X করে ঠিক হলে Y পায় কিভাবে গল্প পরিবর্তন আছে? ওয়েল, আমি এক্স না যে y, ও পায় বলার অপেক্ষা রাখে না কার্যকরভাবে একই এই যাই হোক না কেন, Ox-কিছু এখানে একই হতে যাচ্ছে Ox-কিছু. অথবা pictorially আমরা একটি তীর আঁকা করব. সুতরাং এখানে Binky সঙ্গে বোর্ড, এর পরের লাইন সঙ্গে কোড * Y সেখানে যাওয়ার মানে. সেখানে কোথায়? এখানে ওভার মানে. এবং আমরা 13 হতে যে আপডেট যখন এটা শুধু যাওয়া এবং জড়িত এখন এখানে 13 লেখা. তাই সম্ভবত না সম্পূর্ণভাবে প্রথম নজরে সহজবোধ্য. কিন্তু সংক্ষিপ্তবৃত্তি এবং একই অপভাষা ব্যবহার যে Binky, তাই এখানে ব্যবহার করা হয়েছে প্রথম দুটি পয়েন্টার বরাদ্দ x এবং y, কিন্তু না pointees. এবং pointees একটি নয় সাধারণত শব্দটি ব্যবহার করেন. কিন্তু পয়েন্টার একেবারে হয়. কিন্তু এটা স্পষ্ট হচ্ছে কি Binky এর নামকরণের এ. অবশ্যই এই পরের লাইন, কোন int pointee বরাদ্দ. তাই মেমরি একটি খণ্ড - আমি উপর সৃষ্টি হিসেবে ডান দিকে আছে - এবং সেট x সমান এটা নির্দেশ. এই dereferences x এর মধ্যে 42 সঞ্চয় এটা নির্দেশ করে যে মেমরি. এবং তারপর এই, অবশ্যই, একটি খারাপ জিনিস না. Y প্রতি নির্দেশ ছিল না, কারণ কোনো কিছু. এটি সংশোধন করা হয়েছে. তাই এই এখনও বগী প্রোগ্রাম. আমরা মাধ্যমে প্রবাহিত করছি মাত্র কারণ লাইন এবং বলছে কোড লাইন, ভাল উহু, সেখানে বিপর্যস্ত করা যাক. যে একটি খারাপ জিনিস. অডস প্রোগ্রাম ঠিক যাচ্ছে হয় যে লাইনে সম্পূর্ণভাবে পরিত্যাগ. অপসারণের জন্য ছিল কিন্তু যদি ক্র্যাশ গত দুই সঙ্গে এটি লাইন এবং প্রতিস্থাপন করুন আপনি দায়িত্ব অর্পণ করা আছে লাইন - পয়েন্টার নিয়োগ ব্যবহার করে - পি বিন্দু T হিসাবে x এর দিকে নির্দেশ করে. এবং তারপর আপনি dereference একটি অত্যন্ত নিরাপদ উপায়ে Y. সুতরাং যেখানে এই আমাদের ছাড়বে? ওয়েল, ফণা নীচে দেখা যাচ্ছে যে CS50 লাইব্রেরি মধ্যে, পয়েন্টার হয় চলাকালে ব্যবহৃত. এবং আসলে আমরা ছুলা শুরু করব আগে দীর্ঘ ফিরে যে স্তর. কিন্তু এটা খুব যে একটি অভিব্যক্তি সক্রিয় আপনি কিছু, সঙ্গে পরিচিত হতে পারে বিশেষ করে যারা আরো আরামদায়ক, খুব জনপ্রিয় যে আসলে ওয়েবসাইট, অথবা স্ট্যাক ওভারফ্লো, এই দিন. কিন্তু এই আসলে খুব আছে প্রযুক্তিগত মানে. আমরা এখন একটি স্ট্যাক কি জানেন. এটা ট্রে একটি স্ট্যাক মত একটি ডাইনিং হলের ভিতরে. অথবা ভিতরে আপনার কম্পিউটার এর মেমরি যারা ফ্রেম তার যে কর্ম দ্বারা ব্যবহার করা হয়. ওয়েল, এটা দেখা যাচ্ছে যে কারণে খুব সরল বাস্তবায়ন মেমরি এবং তথাকথিত নেভিগেশন ফ্রেম গাদা, আপনি আসলে নিয়ন্ত্রণ গ্রহণ করতে পারেন মোটামুটি সহজে একটি কম্পিউটার সিস্টেমের. আপনি একটি সিস্টেমের মধ্যে হ্যাক করতে পারেন যদি মানুষ আমাদের কোড লেখা নি বিশেষ করে ভাল. আমাদের মত মানুষ অংশ ব্যবহার করা হলে মেমরি বা ব্যবহার অ্যারে এর - এমনকি আরো সাধারণভাবে - তবে কখনও কখনও চেক করতে ভুলবেন না আমাদের অ্যারের গণ্ডি আপনি প্রতাপ হিসাবে নিজেকে মাঝে মাঝে আছে, এবং iterated অতিদূরে শেষে একটি অ্যারের গত উপায়. সেরা ক্ষেত্রে, আপনার প্রোগ্রাম শুধু বিপর্যস্ত হতে পারে. সেগমেন্টেশন ফল্ট, দয়ালু লজ্জাজনক হবে. মহান নেই, কিন্তু এটা অপরিহার্যভাবে না একটি অতিশয় খারাপ জিনিস. কিন্তু আপনার প্রোগ্রাম বাস্তব নেভিগেশন আসলে যদি ব্যবহারকারীদের কম্পিউটার, এটি চলমান হলে একটি ওয়েবসাইট যে প্রকৃত র্যান্ডম মানুষ ইন্টারনেট, লেট আঘাত করা হয় মানুষ আপনার কোড নেভিগেশন খারাপ জিনিষ প্রবর্তিত হয় কারণ সাধারণত একটি ভাল জিনিস এটা করা একটি সুযোগ মানে কম্পিউটার নিয়ন্ত্রণ. এবং এই তাকান যাচ্ছে রহস্যপূর্ণ সামান্য. কিন্তু আমি আপনার সাথে ভীতি চাই এখানে এই শেষ উদাহরণ. এখানে কোড একটি উদাহরণ. এবং একটি ভাল উইকিপিডিয়া আছে মাধ্যমে পদচারনা যে নিবন্ধটি আরো বিস্তারিতভাবে এই. আমি নীচে কলিং প্রধান আছে 1 argv মধ্যে ক্ষণস্থায়ী foo বিন্যাস,. এবং যে ঠিক তাই করতে পারেন যে প্রোগ্রাম চালানো এবং পাস একটি অবাধ ইনপুট. এবং তারপর foo বিন্যাস উপরে ঘোষিত হয় একটি স্ট্রিং গ্রহণ, অথবা আরও অবিকল, একটি গৃহস্থালি *. তারপর চিহ্ন একটি অ্যারের ঘোষণা করে. এটি একটি বাফার, আরো সাধারণভাবে, কল আয়তন 12. সুতরাং 12 অক্ষর ভিতরে ফিট করতে পারে গ বলা হয় যে অ্যারের. এবং তারপর, এই নতুন ফাংশন ব্যবহার করে নতুন কিন্তু কঠিন নয় , মেমরি কপি বুঝতে. এটা ছিল, যা বার থেকে কপি করা মেমরি পরিবর্তনশীল গত N, যাই হোক না কেন ব্যবহারকারী C মধ্যে argv 1 মধ্যে টাইপ করা. কত বাইট? বার স্ট্রিং দৈর্ঘ্য. তাই অন্য কথায়, ব্যবহারকারীর ধরন যদি H-ই-L-L-O লিখুন, স্ট্রিং দৈর্ঘ্য হ্যালো পাঁচটি হয়. সুতরাং যারা বাইট পাঁচ পেতে যাচ্ছে গ বলা অ্যারে, মধ্যে কপি যা আয়তন 12 হল. একটি অনেক লম্বা কিন্তু কি ধরনের ব্যবহারকারী 13 টি অক্ষর বা 14 এর যে শব্দ অক্ষর বা 100 অক্ষর বা তার বেশি? যেখানে তারা যেতে যাচ্ছি? ওয়েল, যে ফ্রেম, যে ট্রে ডাইনিং হল স্ট্যাকের মধ্যে, তারা সেখানে যেতে চলুন. এবং এটি মাত্র overwriting শুরু করতে যাচ্ছে ইতিমধ্যে যে অন্যান্য উপাদান যে স্ট্যাকের উপর, উচ্ছ্বাসিত স্ট্যাকের, তাই কথা বলতে. সুতরাং pictorially, এই ভাবে মনে করি. শুধু এই একটি রঙিন সংস্করণ ছবি আঁকার আমরা আসছি. নীচে, প্রধান হল, এর কথা বলা যাক. এবং উপরে, আপনি এখন কি দেখছি ফ্রেম, রং ​​জন্য, এখন কোডেড হয় foo বিন্যাস বলা হয় ফাংশন. কিন্তু এখানে আকর্ষণীয় কি foo বিন্যাস এখানে তার ফ্রেম হয়. তাই এটা আমি চাই টানা এর কিন্তু হালকা নীল করেছিল. এবং এখন এই হল যেখানে C বন্ধনী 0 যায়. এবং এই সি বন্ধনী যেখানে 11 শেষ পর্যন্ত যাচ্ছে. অন্য কথায়, এটি ঘটবে একটি বর্গক্ষেত্র হিসাবে প্রতিনিধিত্ব করা. কিন্তু আপনি শুধু বাইট plopping রাখা নিচে - বা চিহ্ন - তারা শেষ করতে যাচ্ছেন আপ অবস্থানে 0 সমস্ত উপায় আপ 11 কারণ এটা ইন্ডেক্স 0. কিন্তু 13 অক্ষর যেখানে শেষ পর্যন্ত যাচ্ছে? 14 তম কোথায়? 50th চরিত্র কোথায় শেষ পর্যন্ত যাচ্ছে? এটি ডাউন বর্তা যাচ্ছে. আমরা টানা করেছি, যদিও কারণ স্ট্যাকের সঙ্গে ছবি, উদ্ভিন্ন ঠিকানা, এটি সক্রিয় আউট, থেকে যান ছোট ঠিকানা, ছোট বড় ঠিকানায় পয়েন্টার. তাই এটি শুধু ঊর্ধ্বগামী এবং আপ রাখে. তাই আপনি যদি ব্যবহারকারী ধরনের হ্যালো, যে মহান. কোন বাগ, কোন সমস্যা নেই, সবাই এর নিরাপদ. কিন্তু আমরা করব ব্যবহারকারী ধরনের হলে adversarial কোড কল, প্রতিনিধিত্ব জেনেরিক হিসাবে, আক্রমণ, আক্রমণ, আক্রমণ, আক্রমণ, কি ঘটতে পারে? ওয়েল, যদি ইনপুট যে সকল ব্যবহারকারী টাইপ করা মাত্র কিছু বন্ধুত্বপূর্ণ নয় অক্ষর বা অশোভন পংক্তি. এটা আসলে অক্ষরের একটি অনুক্রম এর যে আপনি এটা কম্পাইল করা হলে, আসলে এটি কোড. হয়তো এটা কোড যে মুছে ফেলা সব আপনার হার্ড ড্রাইভে ফাইল বা স্প্যাম পাঠায় যে ভালো বা কিছু. কি এখানে কি যে বিজ্ঞপ্তি যে খারাপ লোক যথেষ্ট ভাগ্যবান পেয়েছিলাম যদি মেমরি লাল খণ্ড মুছে ফেলা - আমি কিন্তু আমার ছবি নেভিগেশন আঁকা হয়নি, যা এখানে এই উইকিপিডিয়া ছবি আছে - তার তথাকথিত ফিরতি ঠিকানা. যখন খাদ্য আয়, swap 'আয় যখন, কিভাবে কম্পিউটার থেকে যেতে জানি না আপ এখানে ডাউন? অথবা আপ উপরে কারিগরি সেগমেন্টের মধ্যে, কিভাবে এটা swap 'থেকে যেতে জানি না কোড - 0 এবং 1 এর যে swap 'র রচনা - ফিরে যাও? একটি তথাকথিত ফিরতি ঠিকানা আছে একই স্ট্যাক ফ্রেম, সংরক্ষিত একই ক্যাফেটেরিয়া ট্রে. খারাপ লোক যথেষ্ট চালাক হয় তাই আপনি যদি আক্রমণ কোড করা, আক্রমণ কোড হামলা কোড, এবং ভাগ্যবান যথেষ্ট পেতে - আপনি - প্রায়ই শুদ্ধাশুদ্ধি মাধ্যমে , যে লাল ফিরতি ঠিকানা মুছে ফেলা ঠিকানা ও বিজ্ঞপ্তি খুব উপরের. 0835C080 লক্ষ্য করুন. এটি জন্য পিছন আপ উপরে লেখা কারণ আমরা সম্ভবত পরিদর্শন করব. এই যে সংখ্যা. খারাপ লোক ভাগ্যবান যথেষ্ট বা পায় তাই আপনি যদি লাল মুছে ফেলা স্মার্ট যথেষ্ট ঠিকানা সঙ্গে মেমরি স্ট্রিপ সে একরকম আছে যে কোড আপনার কম্পিউটারের মধ্যে ইনজেকশনের, যার অনুমান কোড ফিরে যাচ্ছে যত তাড়াতাড়ি foo বিন্যাস হিসাবে নির্বাহ করা হয়? খারাপ লোক এর কোড. এই আক্রমণ কোড সুতরাং, AAA যাচাই, আবার, প্রতাপ স্প্যাম পাঠাতে, সমস্ত ফাইল মুছে ফেলা হতে পারে আপনার হার্ড ড্রাইভে. কিন্তু কি যে সত্যিই একটি স্ট্যাক ওভারফ্লো হয় , অথবা একটি বাফার পদদলিত করা, অথবা একটি ওভারফ্লো আক্রমণ বাফার. এবং এটা অবিশ্বাস্যভাবে, অবিশ্বাস্যভাবে সাধারণ এর এ লিখিত প্রোগ্রাম সঙ্গে এই দিন সি, সি + +, এবং এমনকি কিছু অন্যান্য ভাষাসমূহ. এটা ভীতিকর নোট অন, আমরা করব একটি তামাশা দিয়ে শেষ. [হাস্য] বুধবার আপনাকে দেখতে. পরবর্তী CS50 এ - তাই আমি আজ ডিস্ক আলো সব আউট না কিন্তু অপেক্ষা করুন, চর্বি বিনামূল্যে দুধ, অর্ধেক ফোন বই, কমলার রস আমি আজ যে drank. USB তারের, একটা রেঞ্চ. [সঙ্গীত বাজানো]