[সঙ্গীত বাজানো] ডেভিড জে MALAN: ঠিক আছে. এটি CS50. এবং এই সপ্তাহে 5 শুরু. এবং আপনি লক্ষ্য করে হতে পারে, কিছু উপাদান একটু বেশি হচ্ছে জটিল, একটু ঘন. এবং এটি বিশেষ করে যদি খুব সহজ আপনি কিছু সময়ের জন্য অভ্যাস করেছি সবচেয়ে নিচে হিজিবিজি চেষ্টা করা আমরা কি কিছু, আমরা বর্গ বলছে. কিন্তু যে সম্ভবত না, বুঝতে পারছি আদর্শ প্রাতিষ্ঠানিক পদ্ধতির উপাদান এই ধরনের শেখার, এবং উপাদান আরো সাধারণভাবে. এবং তাই আমরা সন্তুষ্ট হয় যে CS50 এর নিজস্ব Gheng ঘোষণা গং প্রস্তুত শুরু হয়েছে নোট ক্যানোনিকাল সেট কোর্সের জন্য, আশা যা এই, যে, এক শুধুমাত্র একটি হিসাবে পরিবেশন করা রেফারেন্স এবং একটি সম্পদ উপাদান পর্যালোচনা এবং যাচ্ছে ফিরে উপাদান মাধ্যমে থাকতে পারে প্রায় আপনি প্রথম সময় পলান কিন্তু এছাড়াও, যাতে আপনার মাথা হতে পারে আরো নিচে, যখন এটি তুলনায় আপ বক্তৃতা করার সময় আসে, আপনি ব্যস্ত হতে পারে, যাতে আরো, thoughtfully হিসাবে আরো scribbly বিরোধিতা. সঙ্গে বলেন যে, আপনি খুঁজে পাবেন ওয়েবসাইট এই যেমন নথি হয়. এবং খেয়াল করুন, উপরের বাম এ আছে, না শুধুমাত্র বিষয়বস্তু একটি টেবিল, কিন্তু সময় কোড যে অবিলম্বে আপনি তিড়িং লাফ হবে যথাযথ অংশ ভিডিও অনলাইন. এবং এখানে কি চ্যাং করা হয়েছে মূলত, নথিভুক্ত করা হয় কি এই ঘটেছে বিশেষ বক্তৃতা. এবং বক্তৃতা অনেক ইতিমধ্যে অনলাইন এখন এই URL সঙ্গে. এবং আমরা বাকি পোস্ট চালিয়ে যাব এই সপ্তাহ শেষে যারা, তাই যে সম্পদ সুবিধা নিতে না. তাই আরও ঝামেলা ছাড়া, আমরা ফিরে ছুলা শুরু হয়েছে যে স্তর কিছু সময়ের জন্য স্ট্রিং. এবং আমরা একটি স্ট্রিং কি বলে নি আসলে গত সপ্তাহে? তাই গৃহস্থালি তারকা. এবং গৃহস্থালি তারা, ভাল, কি যে সত্যিই মানে কি? আচ্ছা, এই সব সময়, আমরা করেছি যদি একটি ফাংশন আহ্বান করা, getString, এবং সংরক্ষণ মত তথাকথিত ফেরত একটি মধ্যে GetString মান ভেরিয়েবল বলা এর লেখা আমরা করছি স্ট্রিং এর টাইপ আপ আছে উপরে কোড লাইন. আমি দেখতে যখন এটি শুধুমাত্র আমার হস্তাক্ষর এখানে বিবর্ধিত আমি এই ঠিক কিভাবে নৃশংস বুঝতে পারছি না. তবে, এর অনুমান করা যাক, ডান দিকে তবু, একটি যুক্তিসঙ্গত কি চিত্রাঙ্কন এই সব যাচ্ছে GetString সঙ্গে সঙ্গে সময়. getString, অবশ্যই, একটি স্ট্রিং পায়. কিন্তু যে সত্যিই কি মানে? এটা একটি খণ্ড পায় মানে অপারেটিং সিস্টেম থেকে মেমরি একটি ফাংশন কল করে, malloc আহবান. কিন্তু আরো যে পরে. এবং তারপর এটি এর মান পূরণ করা মেমরি যে তাল অক্ষর দিয়ে ব্যবহারকারী আছে , টাইপ দ্বারা অনুসরণ, অবশ্যই, একটি নাল অক্ষর, বা ব্যাকস্ল্যাশ খুব শেষে শূন্য. এদিকে, বাম দিকে এই গল্প, এই সব সময়, আমরা এর মত একটি পরিবর্তনশীল প্রকাশক হয়েছে. এবং যে পরিবর্তনশীল এখন কি একটি পয়েন্টার কলিং শুরু হবে. এটা যার ভিতরে একটি বাক্সে না আমরা স্ট্রিং করা, Daven, জন্মগতভাবে, বরং আমরা যে বর্গক্ষেত্র রাখা বাম কি ঠিক বাক্স? হ্যাঁ? শ্রোতা: এর ঠিকানা যেখানে এটি মেমরি অবস্থিত. ডেভিড জে MALAN: যথাযথভাবে. Daven যেখানে এর ঠিকানা মেমরি অবস্থিত. এবং Daven সব, অবস্থিত যেখানে কোনটাই, কিন্তু বিশেষভাবে অঙ্ক কি? হ্যাঁ? শ্রোতা: প্রথম অক্ষর. ডেভিড জে MALAN: প্রথম অক্ষর এই ক্ষেত্রে Daven,, যা, আমি ইচ্ছামত ছিল প্রস্তাবিত এবং unrealistically 1, OX1, যা শুধু অর্থ 1 হেক্সাডেসিমেল সংখ্যা. কিন্তু এটা সম্ভবত যাচ্ছে অনেক বড় সংখ্যা হতে আমরা আঁকা হতে পারে একটি উপসর্গ হিসাবে একটি 0x সঙ্গে, একটি হেক্সাডেসিমেল অক্ষর প্রতিনিধিত্বমূলক. এবং আমরা জানি যেখানে প্রয়োজন হবে না, কারণ Daven অক্ষর বাকি কারণ, কি সহজ নকশা সিদ্ধান্ত অনেক বছর আগে তৈরি করা হয়েছিল যে? হ্যাঁ? শ্রোতা: ব্যাকস্ল্যাশ 0. ডেভিড জে MALAN: হ্যাঁ, ঠিক. ব্যাকস্ল্যাশ 0 যদ্যপি আপনি পারবেন রৈখিক সময়, স্ট্রিং, তর্ক করতে, বাম থেকে ডান পদব্রজে ভ্রমণ, একটি লুপ জন্য, অথবা একটি সময় সঙ্গে লুপ, বা কিছু মত যে, এখানে, ওহ, নির্ধারণ এই বিশেষ স্ট্রিং এর শেষে. এ ঠিকানা দিয়ে তাই একটি স্ট্রিং এর শুরু, আমরা সম্পূর্ণতা অ্যাক্সেস করতে পারেন এটি, এই সব কারণ যখন, একটি স্ট্রিং শুধুমাত্র একটি গৃহস্থালি তারকা হয়েছে. তাই এটি ব্যবহার করতে অবশ্যই জরিমানা CS50 লাইব্রেরি এবং এই বিমূর্ততা, তাই কথা বলতে, কিন্তু আমরা করব ঠিক দেখতে শুরু কি যাওয়া হয়েছে এই পুরো সময় নীচে. তাই আপনি যদি এই উদাহরণ প্রত্যাহার হতে পারে, খুব, শেষ সময় থেকে, 0 তুলনা, যা আসলে তুলনা না. কিন্তু আমরা এই সমস্যা সমাধানের শুরু করেন. কিন্তু সম্ভবত একটি সতেজকারক, আমি কেউ আগ্রহ একটি গোলাপী হাতি আজ, এছাড়াও চ্যাং দ্বারা তৈরি? কিভাবে সামনে আপনি? [শ্রবণাতীত]. উপর আসা. এবং ইতিমধ্যে, হিসাবে আপনি আসা পর্যন্ত, আসুন শুধু একটা মুহূর্ত জন্য বিবেচনা এই কোড আসলে করছেন. এটা দুই ভেরিয়েবল ঘোষণা এর উপরে, গুলি এবং টন, এবং GetString আহ্বান. এটি একটি খুব ব্যবহারকারী বন্ধুত্বপূর্ণ প্রোগ্রাম নয় এটা আপনাকে বলতে হয় না, কারণ কি না. তবে আমরা অনুমান করা যাক সরস অংশ উপর মনোযোগ নিবদ্ধ করে. এর সমান এবং তারপর যদি আমরা না, , এটা printf, বলতে হবে টন সমান, আপনি একই জিনিস টাইপ. হ্যালো. আপনার নাম কি? Janelle: Janelle. ডেভিড জে MALAN: Janelle, আপনি দেখা করতে চমৎকার. আপনার চ্যালেঞ্জ তাই এই হাতির জন্য হাত আমাদের প্রথম কি একটি ছবি আঁকা হয় যারা প্রথম দুই প্রতিনিধিত্ব করা হচ্ছে লাইন. তাই গুলি এবং টন হতে পারে কিভাবে পর্দায় প্রতিনিধিত্ব? এবং আপনি শুধু সঙ্গে এটি আহরণ করতে পারে এই বড় পর্দায় আপনার আঙুল. তাই দুই অর্ধেক আছে যে সমীকরণ প্রতিটি পাশ. তাই সেখানে বাম গণ, এবং তারপর ডান GetString. এবং তারপর টন, বাম আছে এবং তারপর ডান GetString. সুতরাং আমরা কিভাবে শুরু হতে পারে একটি ছবি আঁকার যে কি ঘটছে প্রতিনিধিত্ব করে এখানে মেমরি, আপনি বলতে হবে? এবং আমাকে আপনি ব্যাখ্যা করা যাক যাক হিসাবে আপনি যেতে আপনি কি করছেন. Janelle: ঠিক আছে. ওয়েল, প্রথমত, এটা জিজ্ঞাসা করা হবে আপনি ইনপুট স্ট্রিং পেতে. এবং এটা দুঃখিত, ওহ store-- হবে. ডেভিড জে MALAN: ঠিক আছে. ভাল. এবং এই কি বলা হয়? ঠিক আছে, ওহ. চালু রাখুন. আমি ছিন্ন করা মানে না. Janelle: দুঃখিত. সুতরাং এটা ইনপুট তা হবে ঠিকানা নিশ্চিত না র. আমি ঠিক সংখ্যা মনে করতে পারেন না, কিন্তু আমি এটা 0 দিয়ে শুরু হয়েছিল. ডেভিড জে MALAN: এটা ঠিক আছে আমি নম্বর কারণ, তাই কোন সঠিক উত্তর নেই. Janelle: 0 চাপ দিয়ে শুরু. ডেভিড জে MALAN: ঠিক আছে, তাই উপাদান 0. নিশ্চিত করুন. Janelle: তারপর যদি শুধু একটি দুটি চিঠি মত ডেভিড জে MALAN: ঠিক আছে, আপনি ফিরে. Janelle: তাই উপাদান 0, এবং তারপর উপাদান 1 বা উপাদান 2. যা টুকরা এবং ডেভিড জে MALAN: ছবি আপনি ডান এখন অঙ্কন করা হয়? GetString যাও কল? অথবা এর ঘোষণা? Janelle: ঘোষণা এর, আমি বিশ্বাস করি. ওহ, getString, এটা হবে কারণ প্রতিটি [মধ্যে ইনপুট করা? এলাকা. ?] ডেভিড জে MALAN: গুড. ঠিক. এমনকি এই কার্যকরভাবে যদিও একটি অ্যারের, রিকল প্রদান করে, আমরা একটি স্ট্রিং ফিরে পেতে, আমরা করতে পারেন 01 এবং 2 ব্যবহার করে স্ট্রিং মধ্যে সূচক. টেকনিক্যালি, এই সম্ভবত হয় প্রতিটি ঠিকানা দ্বারা প্রতিনিধিত্ব, কিন্তু যে সূক্ষ্ম. সুতরাং, অনুমান যদি আমি দ্রুত করতে পারেন আমরা বাকি বন্ধ যেখানে এগিয়ে শেষ সময়, এক যদি স্ট্রিং, একটি বো ই গ্রাম ছিল ব্যাকস্ল্যাশ 0, যার ফলে প্রতিনিধিত্বমূলক গেব এর ইনপুট, কিভাবে আমরা এখন প্রতিনিধিত্ব করতে পারে? এই যে মেমরি হয় getString দ্বারা ফেরত দেয়া হয়েছে? Janelle: এটা হবে একটি চাপ দ্বারা প্রতিনিধিত্ব? ডেভিড জে MALAN: একটি চাপ দ্বারা? ওয়েল, কোন. , এর ঠিক pictorially, শুরু করা যাক বলতে আমাকে শুধু এগিয়ে যান এই গুলি এবং যদি,, এই যে প্রস্তাব getString ফেরত মান. এবং যদি আপনি 0, 1, 2, এই টানা করেছি, যা , পুরোপুরি যুক্তিসঙ্গত কারণে আমরা যেমন স্ট্রিং মধ্যে সূচক, করতে পারেন. তবে সঙ্গে সামঞ্জস্যপূর্ণ হতে শেষ সময়, আমাকে এগিয়ে যান এবং ইচ্ছামত এই যে প্রস্তাব ঠিকানা 1, এই ঠিকানা 2, এই তাই ঘোষণা অঙ্ক 3, এবং হয়. এবং তাই, শুধু সুপার হতে পরিষ্কার, কি যাচ্ছে যে ফলে এর মধ্যে যেতে প্রথম কোড লাইন, আপনি বলতে হবে? Janelle: ঠিকানা 1? ডেভিড জে MALAN: যথাযথভাবে. তাই 0x1 মোকাবেলার. এবং ইতিমধ্যে, আমাকে এগিয়ে যান এবং আপনি কি কাজ করেছি অনেক প্রতিলিপি এখানে আমার নিজের T যোগ করুন. আমি গেব টাইপ ছিল আবার, একটি দ্বিতীয় সময়, GetString সঙ্গে সঙ্গে অনুরোধ জানানো হবে যখন, যেখানে, অবশ্যই, গেব যেতে হবে? ওয়েল, presumably-- Janelle: এখানে ভালো লেগেছে? ডেভিড জে MALAN: হ্যাঁ. Janelle: অথবা এটি একই বাক্সে এছাড়াও? ডেভিড জে MALAN: আমাকে হাঁ, উত্থাপন করা ঠিক, এই অতিরিক্ত বাক্সে তাই. কিন্তু কি এখন কি এমনকি, যে আমি এই চমত্কার বন্ধ টানা করেছি, যদিও together-- 0x1, এই বাস্তবে 0x2-- হয়, এই এখন, ঠিকানা 0x10 হতে পারে উদাহরণস্বরূপ, এবং 0x11, 0x12 এবং, এবং তাই ঘোষণা. এবং তাই, যদি এর ক্ষেত্রে, কি টি এখানে শেষ করতে যাচ্ছে? Janelle: 0x10? ডেভিড জে MALAN: যথাযথভাবে. সুতরাং 0x10. এবং এখন, তাই চূড়ান্ত প্রশ্ন. আপনি, দ্বারা পর্যন্ত কাজ করতে হয়েছে এখন পর্যন্ত একটি হাতির জন্য hardest. এখন, আমি কোড থামা যদি আবার, যখন আমি কি, লাইন তিনটি, এর সমান টি সমান, আমি আসলে কি am আমরা এখানে টানা করেছি তুলনা যে? Janelle: দুই ঠিকানায়? ডেভিড জে MALAN: যথাযথভাবে. তাই আমি t সমান সমান গুলি বলছে? অন্য কথায়, 10 সমান সমান 1 হয়? এবং অবশ্যই, সুস্পষ্ট উত্তর এখন না, হয়. তাই এই প্রোগ্রাম শেষ পর্যন্ত আপনি বলতে হবে, মুদ্রণ যাচ্ছে? Janelle: এটা হতে হবে আপনি একই জিনিস টাইপ? ডেভিড জে MALAN: তাই আপনি যদি এর 1 এবং T 10? Janelle: আপনি বিভিন্ন জিনিষ টাইপ করা. ডেভিড জে MALAN: যথাযথভাবে. আপনি বিভিন্ন জিনিষ টাইপ করা. ঠিক আছে. তাই সাধুবাদ একটি বৃত্তাকার, এখানে, যদি আমরা করতে পারে. [সাধুবাদ] যে বেদনাদায়ক ছিল. আমি জানি. সুন্দরভাবে সম্পন্ন. তাই এখন দেখুন যদি আমরা না করতে পারেন ফিক্স কি ছিল সরাইয়া জ্বালাতন করা. এবং অবশ্যই, আমরা আপাততঃ নির্দিষ্ট সময় যা আমি এখন green-- মধ্যে উপস্থাপন করব আমরা এখানে উন্নত বৈশিষ্ট্য একটি দম্পতি করেনি. প্রথমত, একটি মানসিক সুস্থতা হিসাবে আমি প্রথম চেক করছি, চেক এর সমান নাল এবং টি নাল এর সমান হয়. এবং শুধু পরিষ্কার হবে, যখন বল গুলি বা টন ভালো কোড নাল হতে? যখন গুলি বা টন নাল হতে পারে. হ্যাঁ? শ্রোতা: [শ্রবণাতীত]. ডেভিড জে MALAN: যথাযথভাবে. স্ট্রিং ব্যবহারকারী যে যদি টাইপ উপায় খুব দীর্ঘ হয় মেমরির মধ্যে মাপসই করা হবে, অথবা কিছু করার যে মত অদ্ভুত কোণ ক্ষেত্রে, হিসাবে আমরা দেখতে পাবেন আক্ষরিক,, GetString আজ, তার ডকুমেন্টেশন, এটি হিসাবে নাল ফিরে আসতে হবে বলছেন একটি বিশেষ প্রহরী মান, বা শুধু ধরণের একটি বিশেষ চিহ্ন যে কিছু ভুল মানে. তাই আমরা চেক করতে চান, এটি সক্রিয় আউট, কারণ যে যে নাল একটি খুব বিপজ্জনক মান. প্রায়শই, আপনার সাথে কিছু করতে চেষ্টা করে নাল এটি ক্ষণস্থায়ী একটি ফাংশন জড়িত ইনপুট হিসাবে, যে ফাংশন instance-- জন্য খুব এটি সঙ্গে, বিপর্যস্ত এবং হবে পারে, আপনার পুরো প্রোগ্রাম নিচে নিতে. তাই এই তৃতীয় লাইন এখন শুধু একটি মানসিক সুস্থতা হয় যদি আপনি হবে, ত্রুটি পরীক্ষা পরীক্ষা. যে জন্য এখন একটি ভাল অভ্যাস যে কোন সময়ে আমাদের মধ্যে পেতে আমরা একটি মান ব্যবহার করার চেষ্টা করুন যে সম্ভাব্য নাল হতে পারে. এখন, এখানে চতুর্থ লাইন, "যদি strcmp (গুলি, T)," ভাল, কি উল্লেখ যে? ভাল, আমরা এই খুব সংক্ষিপ্ত একটি ছিল স্ট্রিং তুলনা নামে ফাংশন. এবং জীবন তার উদ্দেশ্য তুলনা করা হয় দ্বিতীয় বিরুদ্ধে তার প্রথম যুক্তি, কিন্তু তাদের ঠিকানা পদ, আমরা একটি মুহূর্ত অজানতে করেনি আগে লাল কোড সঙ্গে, কিন্তু বরং ঐ দুটি তুলনা মনুষ্যোচিত স্বজ্ঞাত স্ট্রিং এই বিরুদ্ধে, এই তুলনা উপায়, এই, এই বিরুদ্ধে, এবং বিরুদ্ধে তারপর বাঁধন যখন এক এবং যদি বা আমার আঙ্গুলের উভয় একটি ব্যাকস্ল্যাশ 0 হিট. সুতরাং কেউ বছর আগে বাস্তবায়িত strcmp কার্যকারিতা আমাদের জন্য বাস্তবায়ন আমরা অর্জিত হবে আশা যে মাত্র দুই সহজ মান পরীক্ষা করা হয়. এখন সত্যি, আমি অঙ্কন রাখা এই বিভিন্ন সংখ্যার সকল. কিন্তু বাস্তবতা আমি চলেছি, হয় সম্পূর্ণ সময় এই পর্যন্ত তৈরীর. তাই আমাকে এগিয়ে যান এবং এই আউট হিজিবিজি একটি বিন্দু করা যে, শেষে দিনের এবং অগ্রগতিশীল, আমরা সত্যিই যত্নশীল যাচ্ছেন না কি জিনিস আসলে ঠিকানাগুলি মেমরি. তাই আমি এই আঁকা যাচ্ছে না এত আর সংখ্যার ধরণের, আমি দূরে এই মাত্র একটি বিমূর্ত আছি শুধু তীরচিহ্ন সঙ্গে আরো বন্ধুত্বপূর্ণ সামান্য. অন্য কথায়, একটি পয়েন্টার হয়, ভাল, এর ঠিক আক্ষরিক, এটি আঁকা যাক একটি পয়েন্টার হিসাবে, একটি তীর প্রতি নির্দেশ , অন্য কিছু থেকে নিজেকে থেকে এবং সম্পর্কে খুব বেশী চিন্তা করবেন না এই ঠিকানার minutia যা, আবার, আমি যাহাই হউক না কেন আপ. কিন্তু আমরা যারা অ্যাড্রেস দেখতে পাবেন, কখনও কখনও, কোড ডিবাগ করার সময়. এখন এদিকে, এই প্রোগ্রাম এখানে সংশোধন করা হয়েছে, অবশ্যই, তুলনা দ্বারা যে সমস্যা যারা দুই স্ট্রিং. কিন্তু আমরা অন্য সমস্যার মধ্যে স্থাপিত হয়. এই কপি থেকে শেষ সময় প্রোগ্রাম যদ্দ্বারা, আমি পুঁজিতে করার চেষ্টা ছিল একটি স্ট্রিং শুধু প্রথম অক্ষর. কিন্তু উপসর্গ কি ছিল আমরা যখন শেষ সময় দেখেছি একটি ব্যবহারকারী মত একটি মান টাইপ ছোট হাতের মধ্যে গেব, এর জন্য, তারপর আমরা, টি এর মধ্যে নিয়োগ সেখানে তৃতীয় লাইন হিসাবে, এবং তারপর আমি করার চেষ্টা টি বন্ধনী 0 পুঁজিতে? এর প্রভাব কী ছিল টি বন্ধনী 0 এখানে পরিবর্তন? শ্রোতা: এটা পরিবর্তন. ডেভিড জে MALAN: হ্যাঁ, আমি ভাল, এর পরিবর্তন. সত্যিই কি ঘটছে ছিল না? ওয়েল, আমি পরিষ্কার করতে পারেন আমাকে যদি দেখতে দিন এই ছবি আপ, হিসাবে অনুসরণ করে. এর হয়, আবার, শব্দ গ্রাম, এ, বি, ই, ব্যাকস্ল্যাশ, 0, এবং এর আমরা একটি বক্স হিসাবে অঙ্কন চালিয়ে যাব এখানে, কিন্তু কোন ঠিকানা. এর জিনিষ আপ নির্মাণ বন্ধ করা যাক. এর মাত্র একটি ছবি আঁকা শুরু করা যাক বিশ্বের সহজতর করা. আমি পংক্তি টন সঙ্গে টি ডিক্লেয়ার, যে মেমরি যে তাল সৃষ্টি করে. স্কয়ার 32 হতে হবে অধিকাংশ কম্পিউটারে বিট. আসলে, যদি আপনি কি কখনো একটি শোনা করেছি কম্পিউটার, একটি 32 বিট আর্কিটেকচার হচ্ছে সত্যিই অভিনব কথা বলতে, যে শুধু এটি 32 বিট অ্যাড্রেস ব্যবহার করে. এবং সরাইয়া একটি প্রযুক্তিগত হিসাবে, আপনি কি কখনও বিস্ময়ের উদ্রেক করেছি কেন পুরোনো কম্পিউটার, আসলে আপনি যদি উপস্থিত RAM প্রচুর সঙ্গে স্যুপ তাদের করার চেষ্টা করে, শুধুমাত্র একটি সর্বোচ্চ হতে পারে র্যাম চার গিগাবাইট, ভাল যে আক্ষরিক, কারণ, আপনার পুরাতন কম্পিউটার পারা শুধুমাত্র 4 হিসাবে হিসাবে উচ্চ গণনা বিলিয়ন, 4 বিলিয়ন বাইট, কারণ এটি 32 বিট ব্যবহার করা হয় ঠিকানার জন্য সংখ্যা. কিন্তু কোনো ক্ষেত্রে, এই মধ্যে উদাহরণস্বরূপ, গল্প এর অনেক সহজ. টি শুধু আরেকটি পয়েন্টার, বা সত্যিই একটি গৃহস্থালি তারকা, ওরফে পংক্তি. এবং কিভাবে আমি এই ছবি আপডেট করতে চান না এখন কোড যে দ্বিতীয় লাইন দিয়ে, বিন্দু পরে, বিন্দু, বিন্দু? আমি যখন স্ট্রিং টি, এর সেমিকোলন সমান এই ছবি কিভাবে পরিবর্তন করে? হ্যাঁ? শ্রোতা: [শ্রবণাতীত]. ডেভিড জে MALAN: হ্যাঁ. ঠিক. আমি শুধু থেকে একটি তীর করা একই ঠিকানায় টি বাক্স, একই প্রথম চিঠি দিয়েছেন. বা টেকনিক্যালি, যদি এই লোক, 0x1 এখনও ছিল আমি এটা হিসাবে যদিও এখানে 0x1 এবং 0x1 এখানে. কিন্তু আবার, যারা বজায় রাখে ঠিকানা সম্পর্কে কি? এটা এখন যে বিষয়গুলি ধারণা. তাই এই এখানে কি ঘটছে হয়. অবশ্যই, যদি আপনি না টন বন্ধনী তাই অ্যারে স্বরলিপি, যা 0,, এর অবশ্যই এবং উন্মুক্তভাবে, এটা দেখে মনে হচ্ছে এখানে একটি অ্যারের আছে মত, কিন্তু এখন এই অদ্ভুত জিনিস আছে. যে প্রোগ্রামিং ভাষা জানা, সি,, আপনি এই বৈশিষ্ট্যটি উপলব্ধ যদ্দ্বারা, টি একটি এমনকি যদি পয়েন্টার, অথবা একটি পয়েন্টার, আপনি এখনও যে পরিচিত ব্যবহার করতে পারেন আরামদায়ক বর্গাকার বন্ধনী স্বরলিপি প্রথম উপাদান যেতে, দ্বিতীয় উপাদান, বা কোনো উপাদান বা যে পয়েন্টার প্রতি নির্দেশ করা হয় যে সম্ভবতঃ, কারণ, এটা , এই ক্ষেত্রে হিসাবে, হয় কিছু অ্যারে নির্দেশ. তাই কিভাবে আমরা এই ঠিক করব? এটি একটি যেখানে সত্যি, এই হল প্রথম নজরে একটু অপ্রতিরোধ্য. কিন্তু এখানে একটি নতুন এবং উন্নত সংস্করণ. সুতরাং প্রথম, আমি পেয়ে করছি CS50 লাইব্রেরি পরিত্রাণ, শুধু প্রকৃতপক্ষে যে এটা হয় তা প্রকাশ করার জন্য একটি গৃহস্থালি তারা, শুধু একটি প্রতিশব্দ. T এবং এছাড়াও একটি গৃহস্থালি তারকা. কিন্তু কি ঘটছে যে লাইন এর ডান দিকে টন একটি মান নির্ধারিত হয় যেখানে? যদি malloc কি? এটা কি strlen এর? Sizeof (গৃহস্থালি) কি? কেন নরক এই আছে লাইন চেহারা এত জটিল? এটা কি একটি উচ্চ পর্যায়ের করছেন? এটা কি টি সংরক্ষণ এর? হ্যাঁ? শ্রোতা: এটা বণ্টন একটি মেমরি স্পেস নির্দিষ্ট পরিমাণ. এটা সংরক্ষণ করতে আমি অনুমান, অক্ষর [শ্রবণাতীত]. ডেভিড জে MALAN: পারফেক্ট. পারফেক্ট. এটি একটি নির্দিষ্ট বণ্টন মেমরি স্পেস এর পরিমাণ সম্ভবতঃ, ভবিষ্যতে অক্ষর সঞ্চয়. এবং বিশেষ করে, যদি malloc সুতরাং কি ফিরে? শ্রোতা: [শ্রবণাতীত] রিটার্নিং? ডেভিড জে MALAN: যথাযথভাবে. যে মেমরি ঠিকানা ফিরে, যা বলছে এর অভিনব উপায়, ঠিকানা ফেরৎ যে মেমরি প্রথম বাইট. আমাকে মনে রাখবেন উপর ভার হয় কত স্মৃতি আমি আসলে বরাদ্দ বা জন্য malloc জিজ্ঞাসা. এখন যে কত হয়? ওয়েল, যদিও এখানে প্রথম বন্ধনী অনেক, যদি malloc শুধুমাত্র একটি একক যুক্তি লাগে. এবং আমি এর strlen উল্লেখ, তাই দিতে করছি আমার অনেক বাইট এর মধ্যে আছে, কিন্তু এক যোগ করুন. কেন? হ্যাঁ? শ্রোতা: ব্যাকস্ল্যাশ 0. ডেভিড জে MALAN: যথাযথভাবে. আমরা একটু গৃহস্থালি কাজ পেয়েছেন. একটি ব্যাকস্ল্যাশ আছে, কারণ তাই 0, আমরা ভাল মনে রাখবেন, যে চাই. অন্যথায়, আমরা চলুন একটি স্ট্রিং তৈরি করতে যে যে বিশেষ টারমিনেটর নেই. এদিকে, শুধু সুপার হতে পোঁদ, আমি sizeof (গৃহস্থালি) আছে ধরো কেউ আমার রান না CS50 প্রয়োগ করে কোড, কিন্তু হয়তো একটি ভিন্ন কম্পিউটার পুরাপুরি যেখানে চিহ্ন কনভেনশন দ্বারা, এক বাইট, কিন্তু দুই বাইট, বা যে চেয়ে বড় কিছু. এটা শুধু সুপার হতে হয়, ত্রুটি সুপার বিমুখ. যদিও বাস্তবে, এটা সম্ভবত 1 হতে যাচ্ছে. এখন এদিকে, আমি এগিয়ে যান এবং কপি স্ট্রিং, টি বন্ধনী আমি টন বন্ধনী এর সমান. আমি গত সপ্তাহে এর মুলতবি হবে সোর্স কোড যাচ্ছে তা দেখতে. কী takeaway, এবং কিন্তু কারণ আমি এখন সবুজ কোড করা , যে শেষ লাইন কারণ টি বন্ধনী 0, toupper, সমান এর প্রভাব রয়েছে ভিত্তি, যা স্ট্রিং? টন এবং / অথবা এর? কোড যে শেষ লাইন. কি কারণ শুধু, টি , এই সময় ঘটেছে আমি সামান্য যে শেষ ধাপে পূর্বাবস্থায় যদি, আমি malloc কল যখন, কি হয়, ঘটেছে আমি মূলত মেমরি একটি খণ্ড পেতে যে মূল হিসাবে একই আকার, যে গাণিতিক কারণ আমি. আমি অঙ্ক টন মধ্যে সংরক্ষণ করছি মেমরি যে তাল. এমনকি এই সুন্দর দেখায় যদিও এবং, সুন্দর সুন্দর এবং ফাঁকা, বাস্তবতা কি আমরা করব, আছে হয় এখানে, কলিং আবর্জনা মান রাখা. মেমরি যে তাল পারে খুব ভাল আগে ব্যবহার করা হয়েছে, কয়েক সেকেন্ড, কয়েক মিনিট আগে. তাই একেবারে সংখ্যা হতে পারে শুধু দুর্ঘটনা আছে বা অক্ষর,. কিন্তু তারা আমি, যতক্ষণ না বৈধ না হন নিজেকে এই মেমরি খণ্ড পূরণ প্রকৃত অক্ষর দিয়ে, আমি একটা লুপ আছে যে না. ঠিক আছে? সুতরাং এখন, শীর্ষবিন্দু এই তিনটি উদাহরণ যে আপাতদৃষ্টিতে, শেষ সময় ভাঙ্গা ছিল এই সোয়াপ উদাহরণস্বরূপ, এই ফাংশন অনুভূতি কাজ এটি একটি এবং খ আনা হয়. কিন্তু এটা কি অন্য অর্থে কাজ না করে? হ্যাঁ? শ্রোতা: [শ্রবণাতীত]. ডেভিড জে MALAN: যথাযথভাবে. আমি এই ফাংশন কল ছিল উদাহরণস্বরূপ another-- থেকে, , যেখানে প্রধান মত একটি ফাংশন থেকে আমি আমি একটি পরিবর্তনশীল, x এবং y আছে গত সপ্তাহে, একই কোড, এবং আমি x এবং y পাস অদলবদল, এবং তারপর Swap-- এই কল, অবশ্যই, সঠিক সংস্করণ আমরা সম্পর্কে কি see-- এটা কাজ করে নি. তাই ফিক্স কি? ওয়েল, তাই ঠিক করা পরিষ্কার, আমাকে এগিয়ে যান and-- দ্বিতীয় আমাকে এখানে এক দিন, এবং দেখতে আমি গত এক, দেখাতে পারেন যা আমি খুঁজে পেতে পারেন যদি এর দেখতে দিন in-- হবে এই বাস্তব fast-- ঠিক আছে, [শ্রবণাতীত]. ঠিক আছে, এটা আছে. তাই আমি ঠিক টাইপ করছি কমান্ড উপেক্ষা করা. আমি এটা উদ্ধার করতে চান শেষ মিনিটে একটি উদাহরণ শেষ সময়, থেকে যা এখন কোন অদল বদল বলা হয়. তাই কোন অদল বদল যেখানে আমরা বাকি শেষ সময় বন্ধ যদ্দ্বারা, আমি সক্রিয়া 1 x এবং 2 যাও y. আমি তারপর 1 এবং 2 ক্ষণস্থায়ী, অদলবদল কল. এবং তারপর এই ফাংশন কিছু অনুভূতি কাজ, কিন্তু এটা কোন স্থায়ী ছিল x এবং y উপর প্রভাব. তাই হাতের প্রশ্ন কিভাবে এখন, হয় আমরা আসলে এই সমস্যা ঠিক করব? হাতে সমাধান কি? ওয়েল, আজকের নতুন যা swap.c, মধ্যে, পার্থক্য কয়েক বিজ্ঞপ্তি. x এবং y একই. কিন্তু কি স্পষ্টতই লাইন 25 সম্পর্কে বিভিন্ন? যদি আপনি মনে রাখবেন, কি আছে নতুন এটি একটি দ্বিতীয় পূর্বে মত লাগছিল? শ্রোতা: [শ্রবণাতীত]. ডেভিড জে MALAN: হ্যাঁ. তাই ampersands একটি নতুন টুকরা বাক্য গঠন না শুধুমাত্র এই প্রোগ্রাম, কিন্তু আরো সাধারণভাবে CS50 মধ্যে. তারিখ থেকে, আমি মনে করি না আমরা কোনো উদাহরণ দেখা করেছি অথবা সত্যিই কোন তাদের সম্পর্কে কথা বলত হয়তো, যাও preemptively ছাড়া অন্য বিস্তারিত অধ্যায়, এই মত একটি ampersand. ওয়েল, এটা এম্পারসেন্ড এক সক্রিয় আউট নতুন বাক্য গঠন শেষ টুকরা আমরা জানতে চলুন. এটা মানে সব কিছু পরিবর্তনশীল এর ঠিকানা. কি ঠিকানায় এক্স বাস করে? কিন্তু Y কি অঙ্ক বাস করে? কারণ যদি আগে মৌলিক সমস্যা যে x এবং y পাস হচ্ছে ছিল আমরা সত্যিই কাজ করতে চান কপি হিসাবে একটি ভাণ্ডারী মত অদল বদল প্রদান করা হয় যেখানে x এবং আসলে Y যে বাড়ে মানচিত্র , যাতে RAM উপস্থিত হয় সোয়াপ যে মানচিত্র অনুসরণ করতে পারেন x বা y স্পট চিহ্নিত যেখানেই এবং যান এবং প্রকৃত মান পরিবর্তন 1 এবং 2 সেখানে. তাই সোয়াপ খুব সামান্য পরিবর্তন প্রয়োজন. এবং প্রথম নজরে, এই শক্তি গৃহস্থালির কাজ তারা একটি সামান্য অনুরূপ বলে মনে হচ্ছে. এবং প্রকৃতপক্ষে এটা. সুতরাং একটি তথ্য কি ধরনের একটি পয়েন্টার, এই হাইলাইট অংশ উপর ভিত্তি করে? সুতরাং এটা কোন int. সুতরাং একটি আর একটি int, এটা কোন int এর ঠিকানা. এবং একইভাবে, খ এখন যাচ্ছে কোন int এর ঠিকানা দিতে হবে. তাই আমি এখন প্রধান থেকে অদল বদল যখন কল, আমি সোয়াপ 1 এবং 2 দিতে যাচ্ছি না. আমি মত দিতে যাচ্ছি বলদ কিছু এবং ষাঁড় কিছু, হতে হবে যে দুই অ্যাড্রেস তাদের প্রকৃত অবস্থানে অদল বদল আমার কম্পিউটার এর মেমরি. সুতরাং এখন, আমার অবশিষ্ট বাস্তবায়ন একটি বাচ্চা পরিবর্তন প্রয়োজন. এখন কি স্পষ্টত আলাদা এই কোড তিনটি লাইনে? এই সব জঘন্য বড় আছে জায়গা উপর, ঠিক? সুতরাং এখানে কি করছেন? হ্যাঁ? শ্রোতা: এটা [শ্রবণাতীত] সম্ভবত না. ডেভিড জে MALAN: যথাযথভাবে. এই প্রসঙ্গ তাই এই ছিল না সেরা নকশা সিদ্ধান্ত, নিঃসন্দেহে, বছর আগে. এই প্রেক্ষাপটে, যেখানে আপনি শুধু একটি তারকা আছে, এবং আপনি একটি ডাটা টাইপ আছে না, int মত, অবিলম্বে বাম, এর পরিবর্তে আপনি পরিষ্কারভাবে, একটি সমান চিহ্ন আছে, এই প্রেক্ষাপটে, যখন আপনি বলে একটি তারকা, যে যেতে মানে একটি মধ্যে যে ঠিকানা. তাই কথা বলতে, ধন মানচিত্র অনুসরণ করুন. এবং ইতিমধ্যে, লাইন 37, এটা একই জিনিস মানে. ঠিকানা যান, এবং কি সেখানে রাখা? যাই হোক না কেন এ খ নির্দিষ্ট যে অবস্থান. অন্য কথায়, b যান. যে মূল্য পান. সমান প্রতি, একটি যান এবং সাইন ইন নিয়োগ অপারেটর, সেখানে যে মান করা. একইভাবে, কোন int, temp ঠিক কোন int হয়. কিছুই temp সম্পর্কে পরিবর্তন প্রয়োজন. এটা Annenberg এ থেকে মাত্র একটি অতিরিক্ত গ্লাস এর কিছু দুধ বা কমলার রস জন্য. কিন্তু আমি বলতে খ যেতে হবে না. যে গন্তব্যে যান এবং সেখানে temp মধ্যে মান করা. আমি তখন কি ঘটছে? আমি আসলে, এই সময় অদলবদল কল এই প্রথম ট্রে, এখানে মুখ্য প্রতিনিধিত্ব করে এই দ্বিতীয় ট্রে অদল বদল প্রতিনিধিত্ব করে, যখন আমি এবং চিহ্ন; x এবং চিহ্ন; Y পাস প্রধান অদলবদল থেকে, শুধু, পরিষ্কার করা এই স্ট্যাকের ফ্রেম প্রাপ্তির কি? হ্যাঁ? শ্রোতা: [শ্রবণাতীত]. ডেভিড জে MALAN: যথাযথভাবে. x এর ঠিকানা এবং y এর ঠিকানা. এবং আপনি এই মনে করতে পারেন পোস্টাল ঠিকানা মত. 33 অক্সফোর্ড স্ট্রীট এবং 35 অক্সফোর্ড স্ট্রিট, এবং আপনি দুটি ভবন স্থানান্তর করতে চান যারা অবস্থানে আছে. এটি একটি হাস্যকর ধারণা সাজানোর, কিন্তু যে আমরা ঠিকানা দ্বারা মানে সব. বিশ্বের যেখানে যা করতে পারেন আপনি ঐ দুটি ints হয় খুঁজে পেতে? বিশ্বের যেখানে আপনি করতে পারেন যারা দুই ভবন খুঁজে পেতে? সুতরাং পরিশেষে, যদি এই সব সময় আমি পরে আজ এর সোর্স কোড মধ্যে যান এবং কম্পাইল বিনিময় এবং রান ./swap, পরিশেষে, জন্য প্রথম সময় আমরা আসলে দেখতে না আমার মান প্রকৃতপক্ষে আছে সফলভাবে আনা হয়েছে. এবং এখন, এমনকি আমরা গ্রহণ করতে পারেন এই, বলে, GDB নোট. তাই আমাকে একই ফাইলের মধ্যে যান. আমাকে এগিয়ে যান এবং ./swap এর GDB চালানো. এবং এখন, অদলবদল, আমি যেতে চলেছি এগিয়ে এবং প্রধান একটি বিভাজক পয়েন্ট সেট. এবং এখন আমি যেতে চলেছি এগিয়ে এবং প্রোগ্রাম চালানো. এবং এখন আমরা আমার কোড দেখতে যে লাইনে বিরতি দেওয়া. আমি এগিয়ে এবং মুদ্রণ যান এক্স, আমি এখানে কি হবে? এটি একটি প্রশ্ন. আবার বলুন? শ্রোতা: [শ্রবণাতীত]. ডেভিড জে MALAN: র্যান্ডম সংখ্যা, হয়তো. হয়তো আমি ভাগ্যবান পেতে, এবং এটা 0 মত, চমৎকার এবং সহজ. কিন্তু হয়তো এটা কিছু র্যান্ডম সংখ্যা. এই ক্ষেত্রে, আমি ভাগ্যবান. এটা ঠিক 0 হতে হবে. কিন্তু, প্রকৃতপক্ষে ভাগ্য না পর্যন্ত, কারণ আমি পরবর্তী টাইপ করুন এবং তারপর মুদ্রণ এক্স যে হয়েছে কোড লাইন, লাইন 19, মৃত্যুদন্ড কার্যকর করা হয়েছে. এদিকে, আমি টাইপ করে পরবর্তী আবার, এবং এখন আমি 2 দেখতে যাচ্ছি, Y প্রিন্ট আউট. আমি পরের টাইপ এখন, যদি, এটা যাচ্ছে একটু বিভ্রান্তিকর পেতে, কারণ এখন, printf, প্রদর্শিত যাচ্ছে পর্দা তা, হিসাবে. x 1. এর আবার এই কাজ করা যাক. এবং এখন, এখানে যেখানে কিছু আকর্ষণীয় পেতে. আমি সোয়াপ বা এমনকি পদক্ষেপ কল করার আগে তা, এর একটু উঁকি নিতে. এক্স, আবার, 1. Y, অবশ্যই, দ্রুত বৈধতা হয় তাই না হার্ড আছে,, 2 বার করো. কিন্তু এম্পারসেন্ড এক্স কি? উত্তর, এটা কোন ধরনের ভীতু খুঁজছেন. কিন্তু বন্ধনীর মধ্যে কোন int তারা ঠিক হয় এই বলছে জিডিপি এর উপায় একটি ঠিকানা. এটা, এটি একটি একটি পয়েন্টার কোন int না কোন int, বা অন্যথায় একটি ঠিকানা হিসাবে পরিচিত. এই পাগল জিনিস কি? আমরা কিছু দেখা যায় না করেছি বেশ আগে যে মত. তাই এই আমার কম্পিউটার এর মধ্যে ঠিকানা এক্স বসবাস ঘটবে যেখানে মেমরি. এটা ষাঁড়-কিছু. এবং এই উন্মুক্তভাবে, কেন হয়, আমি তীর অঙ্কন শুরু করেছি, পরিবর্তে সংখ্যা, যারা সত্যিই বজায় রাখে কারণ আপনার কোন int একটি নির্দিষ্ট সময়ে যে বড় যে যে ঠিকানা. কিন্তু bffff0c4, এই সব প্রকৃতপক্ষে হেক্সাডেসিমেল সংখ্যা, চ মাধ্যমে 0 যা. তাই আমরা খুব বাস করছি যাচ্ছে না সেগুলো কি দীর্ঘ. কিন্তু আমি y প্রিন্ট আউট যদি, অবশ্যই, আমি 2 দেখুন. কিন্তু এম্পারসেন্ড y, আমি এই ঠিকানা দেখতে পাবেন. এবং খেয়াল করুন, অদ্ভুত জন্য, সরাইয়া x এবং y কতদূর কি? আপনি ঠিকানা অধিকাংশ উপেক্ষা করতে পারেন. চার বাইট. এবং সেই সঙ্গে সঙ্গতিপূর্ণ আমাদের তার আগে কোন int কিভাবে বড় হয় দাবি করে যে? চার বাইট. তাই সবকিছু এর আবরণের আপ মত দেখায় সুন্দরভাবে, আপনি মেমরি, আশা করি হতে পারে. সুতরাং এখন, শুধু দ্রুত এগিয়ে আসুন এই গল্প শেষ. , এর এগিয়ে যান এবং ধাপে টাইপ করুন সোয়াপ ফাংশন মধ্যে আকর্ষণীয় যাও. এখন আমি একটি টাইপ করুন, এটি, লক্ষ্য x এর ঠিকানা অভিন্ন. আমি খ টাইপ করুন, এটি অভিন্ন y এর ঠিকানা. তাই আমি যদি কি হবে , একটি ঠিকানায় যান বলে? সুতরাং একটি তারকা মুদ্রণ. তাই তারা এই প্রেক্ষাপটে, মানে সেখানে যান. Ampersand এর ঠিকানা কি মানে. তাই একটি উপায় 1 তারা. এবং মুদ্রণ তারকা ক্যাচ সম্পর্কে 2 দেয়. এবং আমাকে মুহূর্ত জন্য, অনুমান করা যাক, অন্তত কোড যে হতে পারে এখন চালানো আয় যে ভাবে মাধ্যমে আলোচনা করে. কিন্তু আমরা দীর্ঘ আগে এই ধারণা পরিদর্শন করব. সোয়াপ তাই এই সংস্করণ এখন সঠিক এবং পারবেন আমাদের এই বিশেষ তথ্য টাইপ অদলবদল. তাই কোন প্রশ্ন তারপর অদল বদল উপর? তারা উপর? ঠিকানা অন? এবং আপনি সঙ্গে দেখতে পাবেন, সমস্যা, বাছাই, 4 সেট কিন্তু সমস্যা 5, স্পষ্টভাবে, কিভাবে এই সেট কিছু দরকারী এবং পেতে আরো অনেক কিছু ফলে, তাদের সঙ্গে আরামদায়ক. এ সব কিছু? ঠিক আছে. সুতরাং malloc, এই ফাংশন আবার, হয় যে শুধু মেমরি, মেমরি বরাদ্দ বরাদ্দ. এবং কেন এই দরকারী? ওয়েল, এই সব সময়, আপনি malloc ব্যবহার করে. আপনি এখন কিভাবে বিবেচনা কাজ GetString, সম্ভবতঃ, এটা একটি খণ্ড কেউ জিজ্ঞাসা করা হয়েছে মেমরি, যে কোনো সময় যে ব্যবহারকারী ধরনের একটি স্ট্রিং মধ্যে, অবশ্যই আমরা কারণ জানেন না, CS50 কর্মীদের হিসাবে, কিভাবে বড় যারা স্ট্রিং যে মানুষের হতে পারে টাইপ করতে যাচ্ছি. সুতরাং এর, প্রথম সময় জন্য, শুরু করা যাক ছুলা ফিরে কিভাবে CS50 লাইব্রেরি কাজ করে, উদাহরণ কয়েক দ্বারা যে সেখানে আমাদের হতে হবে. আমি gedit খুলুন, যদি তাই হয় এবং,, scanf 0 খুলুন আমরা নিম্নলিখিত কোড দেখতে যাচ্ছেন. জন্য ওয়েবসাইটে পাওয়া scanf 0, আজ, কোড তুলনামূলকভাবে কয়েক লাইন আছে এখানে, 20 মাধ্যমে 14. এবং এটা কি করছে দেখুন. এটা কোন int, এক্স নামক ঘোষণা করে. এটা কিছু মত, সংখ্যা, দয়া করে বলেছেন. এবং এখন এটা, scanf% আমি, ও এক্স বলেছেন. তাই সেখানে নতুন কাপড় একটি গুচ্ছ আছে. কিন্তু, scanf, আপনি ধরনের মনে করতে পারেন এর printf বিপরীত হিসাবে. printf,, অবশ্যই, পর্দায় প্রিন্ট. ব্যবহারকারীর থেকে স্ক্যান, scanf সাজানোর কীবোর্ড কিছু সে টাইপ করা হয়েছে. % আমি printf, ভালো হয়. এই আশা মানে ব্যবহারকারী কোন int টাইপ করুন. এবং এখন, আপনি কেন আমি মনে করি না scanf ও এক্স ক্ষণস্থায়ী হতে পারে? যদি scanf জীবনের উদ্দেশ্য ব্যবহারকারীর কাছ থেকে কিছু পেতে হয়, এর অর্থ কি এখন, এটা ক্ষণস্থায়ী, ও এক্স? হ্যাঁ? শ্রোতা: [শ্রবণাতীত]. ডেভিড জে MALAN: যথাযথভাবে. যাই হোক না কেন আমি, মানবিক,, আমার ইনপুট টাইপ যে অবস্থানে সংরক্ষণ করা যাচ্ছে. এটা ঠিক, প্রত্যাহার, যথেষ্ট নয় ইতিমধ্যে আমরা দেখা করেছি, কারণ x এর মধ্যে পাস, যে কোনো সময় আপনি মাত্র একটি কাঁচা পরিবর্তনশীল পাস কোন int মত, কিছু অন্যান্য ফাংশন, নিশ্চিত, এটা যে পরিবর্তন করতে পারেন পরিবর্তনশীল, কিন্তু স্থায়ীভাবে. এটা মুখ্য প্রভাব থাকতে পারে না. এটা শুধুমাত্র তার নিজের স্থানীয় অনুলিপি পরিবর্তন করতে পারেন. কিন্তু যদি, এর পরিবর্তে, আপনি করবেন না আমার প্রকৃত int দিন, কিন্তু আপনি আমাকে নির্দেশ দিতে যে কোন int, এখন আমি,,, scanf হচ্ছে নিশ্চয়, আমি যে অনুসরণ করতে পারেন ঠিকানা এবং সেখানে একটি সংখ্যা করা তাই আপনি ভাল হিসাবে এটি এক্সেস আছে. আমি এই প্রোগ্রাম চালানো সুতরাং যখন, এর দেখতে দিন. Scanf 0 বিন্দু স্ল্যাশ করুন, 0 scanf. এবং আমি এখন একটি সংখ্যা টাইপ 50 ভালো, 50 জন্য ধন্যবাদ. আমি এখন মত একটি নম্বর টাইপ করুন নেতিবাচক 1, 1 নেতিবাচক. আমি এখন এইচএম, 1.5 মত একটি নম্বর টাইপ করুন. কেন আমার প্রোগ্রাম আমাকে উপেক্ষা না? ওয়েল, কারণ কেবল, আমি বলা এটা কোন int শুধুমাত্র আশা. ঠিক আছে. সুতরাং যে এই এক সংস্করণ. এর একটি খাঁজ আপ জিনিষ নিতে এবং এই ভাল হয় না যে প্রস্তাব করছি. এবং এখানে একটি খুব সহজ উদাহরণ মিথ্যা আমরা কোড লেখা শুরু করতে পারেন কিভাবে অন্য মানুষ শোষণ করতে পারে যে বা খারাপ জিনিসগুলি দ্বারা আপোষ. তাই লাইন 16, যাতে একই আত্মা আগে, কিন্তু আমি এটা এই সময় int ঘোষণা করছি না. আমি স্ট্রিং ওরফে, এটা গৃহস্থালি তারা ঘোষণা করছি. কিন্তু যে সত্যিই কি মানে? তাই আমি একটি address-- উল্লেখ না এবং যদি আমি ইচ্ছামত এটি আহ্বান করছি, বাফার, কিন্তু আমি simple-- হবে, এটি কল করতে পারেনি এবং তারপর আমি, এই কাজের আমার ব্যাখ্যা আপনি আগের উপর ভিত্তি করে, পারে যদি যুক্তি, scanf লাইন 18 কি করছে, পাস% এবং বাফার যদি, একটি ঠিকানা যা? আপনি আবেদন যদি scanf, কি সংস্করণ 0 সঠিক একই যুক্তি, এখানে কাজ করতে চেষ্টা করে যাচ্ছে, যখন ব্যবহারকারী ধরনের কিছু? হ্যাঁ? শ্রোতা: [শ্রবণাতীত]. ডেভিড জে MALAN: যথাযথভাবে. Scanf, যুক্তি আগে দ্বারা, স্ট্রিং নিয়ে যাচ্ছে মানুষের টাইপ , এটি এখন একটি স্ট্রিং in-- এটা সম্ভবতঃ, একটি সংখ্যা নয় সে cooperates-- যদি এবং এটা যে করা চেষ্টা করে যাচ্ছে যাই হোক না কেন ঠিকানায় মেমরি স্ট্রিং বাফার উল্লেখ করা হয়. এবং এই মহান, বাফার কারণ প্রকৃতপক্ষে একটি ঠিকানা হতে বোঝানো হয়. কিন্তু আমি এই প্রোগ্রাম একটি মধ্যে বগী দাবি গুরুতর ভাবে, মান কারণ কি ডিফল্ট বাফার? আমি কি সক্রিয়া আছে? মেমরি কি খণ্ড? আমি না, ডান? তাই আমি বরাদ্দ করেছি, যদিও একটি আর এর বলা হচ্ছে যে গৃহস্থালি তারা, এটি পরিবর্তে বলা হয়, তাই buffer-- এর পরিবর্তনশীল এর নাম আঁকা আমি না থাকে তাহলে এখন buffer-- এখানে GetString বা malloc বলা হয়, যে কার্যকরভাবে যে মানে বাফার কিছু আবর্জনা মান. এখন যে কি মানে? এটা আমি, scanf বলা আছে যে মানে ব্যবহারকারী থেকে একটি পংক্তি আশা. এবং আপনি জানেন কি? যাই হোক না কেন এই জিনিস নির্দেশ করা হয় চাচ্ছি এবং আমি প্রশ্ন চিহ্ন আঁকা, কিন্তু বাস্তবতা, এটি হতে যাচ্ছে OX1, 2, 3, ভালো কিছু অধিকার? এটা কিছু বাজে মান যে শুধু আগে থেকে সেখানে হতে হবে. তাই অন্য উপায় করা, এটা বাফার ঠিক হিসাবে যদিও মেমরি কিছু প্রতি নির্দেশ. আমি কি কোন ধারণা আছে. আমি এখন গেব টাইপ সুতরাং, যদি এটি হচ্ছে সেখানে গ্রাম একটি বি ই / 0 করা চেষ্টা করুন. কিন্তু কে যে কি জানে? এবং অতীতে, কোন আমরা স্পর্শ করতে চেষ্টা করেছি সময় অন্তর্গত নয় যে মেমরি আমাদের, কি হয়েছে? বা প্রায় প্রতি সময়. সেগমেন্টেশন ফল্ট, ডান? এটি যেখানে এই তীর, আমি কোন ধারণা আছে প্রতি নির্দেশ. এটি কিছু কিছু র্যান্ডম মান. এবং অবশ্যই, আপনি ব্যাখ্যা যদি একটি ঠিকানা হিসাবে একটি র্যান্ডম মান, আপনি যেতে চলুন কিছু র্যান্ডম গন্তব্য. তাই গেব ক্র্যাশ প্রকৃতপক্ষে পারে এখানে এই ক্ষেত্রে আমার প্রোগ্রাম. তাই আমরা যে প্রায় হিসাবে খারাপ কি করতে পারেন? এই তৃতীয় এবং বিবেচনা scanf চূড়ান্ত উদাহরণ. এই সংস্করণ কি অর্থে ভাল? আপনার সাথে যদি আরামদায়ক পূর্ববর্তী সমস্যা, এই ভাল. কেন? শ্রোতা: [শ্রবণাতীত]. ডেভিড জে MALAN: গুড. লাইন 16 তাই এই ক্ষেত্রে অর্থে, ভাল আমরা স্পষ্টভাবে যে কিছু মেমরি বণ্টন. আমরা malloc ব্যবহার করে না আমরা সপ্তাহে 2 ব্যবহার করছেন শুধু একটি অ্যারের ঘোষণা পদ্ধতির. এবং আমরা যে একটি পংক্তি আগে বলেন করেছি শুধু অক্ষরের একটি অ্যারের হয়, তাই এই সম্পূর্ণ বৈধ. কিন্তু এটা হিসাবে, অবশ্যই, এর আপনি 16,, নির্দিষ্ট আকার রাখবেন. তাই এই প্রোগ্রাম সম্পূর্ণ নিরাপদ, আমি টাইপ একটি অক্ষর স্ট্রিং, দুই অক্ষর স্ট্রিং, 15 অক্ষর স্ট্রিং. কিন্তু যত তাড়াতাড়ি আমি 16 টাইপ করা শুরু করে, 17, 18, 1000 অক্ষর স্ট্রিং, যেখানে স্ট্রিং আপ শেষ হয়ে যাচ্ছে? এটা আংশিকভাবে এখানে শেষ করা যাচ্ছে. কিন্তু তারপর কে কি অন্য জানে গণ্ডি অতিক্রম হয় এই বিশেষ অ্যারের? আমি করেছি হিসাবে যদিও এটা এখানে 16 বাক্সে ঘোষণা করেন. সুতরাং সমস্ত 16 আঁকা আউট, বরং আমরা করব আমি 16 টানা করেছি জাহির. কিন্তু আমি তখন একটি স্ট্রিং পড়তে চেষ্টা করে যে 50 টি অক্ষর, যেমন অনেক আর, আমি নির্বাণ শুরু করা যাচ্ছে না এ, বি, সি, ডি, X, Y, Z. এবং এই সম্ভবতঃ হয় অন্য কিছু করার মেমরির অংশে অন্তর্ভুক্ত যে, আবার, কারণ হতে পারে আমার প্রোগ্রাম, বিপর্যস্ত আমি জিজ্ঞাসা করেছি, কারণ মাত্র 16 বাইট চেয়ে বেশি কিছু. সুতরাং যারা বজায় রাখে? ভাল, এখানে CS50 লাইব্রেরি. এবং এই সবচেয়ে শুধু উপরে নির্দেশাবলী মত. CS50 লাইব্রেরি, এই সব সময়, লাইন 52 এই লাইন ছিল. আমরা typedef দেখা যায়, বা করেছি আপনি typedef দেখতে হবে শুধু একটি তৈরি করে যা, pset 4, মধ্যে প্রতিশব্দ গৃহস্থালির কাজ তারা আরো হতে পারে যদ্দ্বারা কেবল স্ট্রিং হিসেবে অভিহিত করা হয়. তাই এই এক কয়েক প্রশিক্ষণ চাকার আমরা ফণা নীচে গোপনে ব্যবহার করেছি. এদিকে, এখানে GetChar, ফাংশন. এখন দৃশ্যত, এটা কোন শরীর নেই. এবং সত্য, আমি রাখা স্ক্রলিং, আমি আসলে না কোনো বাস্তবায়নের দেখতে এই ফাংশন. একটি মানসিক সুস্থতা চেক, যে কেন হয়? শ্রোতা: [শ্রবণাতীত]. ডেভিড জে MALAN: হ্যাঁ. তাই এই হেডার ফাইল. এবং হেডার ফাইল এগুলির নমুনা থাকে, প্লাস কিছু অন্যান্য উপাদান, মনে হয়, typedefs মত. কিন্তু CS50.c, আমরা করেছি, যা সরাসরি আপনাকে দেওয়া না, কিন্তু CS50 প্রয়োগ করা হয়েছে সব এই সময়, গভীর তার ফোল্ডার এর ভিতরে, একটি সম্পূর্ণ আছে বিজ্ঞপ্তি এখানে কাজ করে গুচ্ছ. আসলে, এর স্ক্রল ডাউন. এখন জন্য, তাদের অধিকাংশই উপেক্ষা করা. কিন্তু getInt স্ক্রোল ডাউন এবং GetInt কিভাবে কাজ করে দেখুন. তাই এখানে getInt হয়. আপনি কি কখনও সত্যিই যত্ন যদি এবং কিভাবে পেতে এখানে int, কাজ করে তার ডকুমেন্টেশন হয়. এবং বিষয়ের মধ্যে এটা বলে আপনি বলেছেন মান রেঞ্জ এটি ফিরে আসতে পারেন না. এটি মূলত নেতিবাচক 2 বিলিয়ন ইতিবাচক 2 বিলিয়ন, বা দিতে নিতে. এবং এটা সব এই সক্রিয় আউট, সময়, আমরা করেছি, এমনকি যদিও আপনি এটি পরীক্ষা ছিল, যদি কিছু গোলমাল, এটা সব দেখা যাচ্ছে যে এই সময়,, getInt আছে একটি বিশেষ ফিরে হয়েছে , নাল, ধ্রুব না বরং, যা INT_MAX শুধু একজন প্রোগ্রামার এর কনভেনশন. এখানে মানে একটি বিশেষ মান. শুধু এই জন্য চেক করতে ভুলবেন না ক্ষেত্রে কিছু গোলমাল. কিন্তু আমরা কখনও বিরক্ত করেছি তারিখ থেকে যে, আবার, এই কারণ সহজ করে বোঝানো হয়. কিন্তু কিভাবে GetInt বাস্তবায়িত হবে? ওয়েল, এক, এটা কোন যুক্তি লাগে. আমরা জানি যে. এটা কোন int ফেরৎ. আমরা জানি যে. তাই কিভাবে এটি ফণা নীচে কাজ করে? তাই দৃশ্যত একটি অসীম আছে লুপ, এক অন্তত চেহারা. আমরা GetString ব্যবহার করছেন যে লক্ষ্য করুন. সুতরাং যে আকর্ষণীয়. getInt আমাদের নিজস্ব ফাংশন, কল GetString. এবং এখন কেন এই ক্ষেত্রে হতে পারে? কেন আমি আত্মরক্ষামূলক হচ্ছে না এখানে লাইন 165 সালে? কি লাইন ঘটতে পারে 164, ঠিক পরিষ্কার করা হয়? এটা আগে হিসাবে একই উত্তর. মেমরি আউট হতে পারে. কিছু GetString সঙ্গে সঙ্গে গোলমাল আমরা যে সব ব্যবস্থা করতে সক্ষম হতে পেয়েছেন. এবং কারণ আমি নাল ফিরে না যে টেকনিক্যালি, নাল একটি পয়েন্টার. getInt কোন int ফিরে আছে. তাই আমি ইচ্ছামত করেছি মূলত, সিদ্ধান্ত নিয়েছে 2 বিলিয়ন, যে যাচ্ছে, বা দিতে নিতে একটি বিশেষ মান হতে যে আমি না করতে পারেন আসলে ব্যবহারকারী থেকে পেতে. এটা আমি যাচ্ছি মাত্র এক মান একটি ত্রুটি কোড প্রতিনিধিত্ব অপব্যয়. সুতরাং এখন, জিনিষ একটু অভিনব পেতে. এবং এটি পুরোপুরি একই ফাংশন না আগে হিসাবে, কিন্তু এটা খুবই অনুরূপ. তাই আমি লাইন, এখানে ঘোষণা, লক্ষ্য 172, কোন int n এবং একটি গৃহস্থালি গ উভয়. এবং তারপর আমি, এই ভীতু লাইন ব্যবহার এটি সক্রিয় আউট, যা sscanf, কীবোর্ড থেকে একটি পংক্তি স্ক্যান না. এটি একটি বিদ্যমান স্ট্রিং দাঁড়িয়েছে ব্যবহারকারী ইতিমধ্যে টাইপ করা হয়েছে. তাই আমি ইতিমধ্যে getString, বলা যা আমি মেমরির মধ্যে একটি স্ট্রিং আছে. sscanf কি আপনি চাই একটি পার্সিং ফাংশন কল. এটা আমি করেছি স্ট্রিং এ দেখায় অক্ষর দ্বারা অক্ষর টাইপ করা এবং দরকারী কিছু আছে. স্ট্রিং লাইন মধ্যে সংরক্ষিত হয়. এবং আমি শুধুমাত্র দ্বারা যাচ্ছে জানি যে ঠিক আছে, ওহ, এখানে এবং বলছে ব্যাক আপ, আমি না এই সময়, কিন্তু লাইন বলা হয়. এবং এখন এই একটি সামান্য ভিন্ন. কিন্তু এই কার্যকরভাবে কারণে, মানে আমরা কিছুটা, আজ আমাদের হাতে তরঙ্গ করব আমরা চেক করা হয় ব্যবহারকারী টাইপ করে দেখুন এবং int এবং হয়ত অন্য অক্ষর. ব্যবহারকারী কোন int টাইপ করা, এটা আমি নই, কারণ, এন সঞ্চিত করা ঠিকানা দ্বারা এই ক্ষণস্থায়ী, আমরা আজ দেখা করেছি নতুন কৌতুক. ব্যবহারকারী টাইপ করা মত 123x মধ্যে, যে x একটি আপ শেষ হয়ে যাচ্ছে চরিত্র গ চিঠি. এখন এটা যে sscanf সক্রিয় আউট বুদ্ধির, আমাকে বলতে হবে, কিভাবে অনেক ভেরিয়েবল sscanf ছিল ভরাট সফলভাবে সক্ষম. এই যুক্তি দ্বারা, তাই যদি ফাংশন আমি,, getInt হয় বাস্তবায়ন করছি কিন্তু আমি চেক করছি, সম্ভাব্য ব্যবহারকারীর জন্য কোন int টাইপ করা আছে অন্য কিছু দ্বারা অনুসরণ, কি আমি sscanf এর চান ফিরতি মূল্য সত্যিই হবে? উদ্দেশ্য পেতে হয় শুধু ব্যবহারকারীর কাছ থেকে কোন int? সুতরাং sscanf আয় যদি 2, যে কি মানে? ব্যবহারকারী টাইপ কিছু ভালো, আক্ষরিক, শুধু আজেবাজে কথা, যা 123x,. এটা একটি ত্রুটি শর্ত, এবং আমি যে জন্য চেক করতে চান. তাই এই ধরনের যদি, দ্বারা এই যুক্তি, ফিরে sscanf কি, আপনি বলতে হবে? সুতরাং এটা, কারণ, 2 ফিরে যাচ্ছে 123, এখানে যেতে হবে এবং এক্স এখানে আপ শেষ হয়ে যাচ্ছে. কিন্তু আমি x ভরা পেতে চান না. আমি শুধুমাত্র সফল sscanf করতে চান তার ভেরিয়েবল প্রথম ভর্তি. তাই যে কেন আমি sscanf 1 ফিরে আসতে চান. এবং এই মাথার উপর একটি বিট যদি মুহূর্ত জন্য, যে সম্পূর্ণই সূক্ষ্ম. যদিও যে এক বুঝি getInt এবং GetString মান আমরা একটি একটি নরক করছেন যে এই যেমন চেক ত্রুটি অনেক যে তারিখ থেকে, আপনি অনেক সুন্দর করতে পারেন আপনার কীবোর্ড এ টাইপ কিছু, এবং আমরা তা ধরা হবে. এবং আমরা অবশ্যই, কর্মী, না নিশ্চিতভাবে হবে একটি বাগ উৎস হতে আপনার প্রোগ্রাম, আমরা কৌসুলি কারণ মূঢ় সব জন্য চেক একটি ব্যবহারকারী কি হতে পারে যে, , যখন একটি স্ট্রিং টাইপ মত আপনি কি সত্যিই কোন int চেয়েছিলেন. তাই আমরা আসবো now-- জন্য এই ফিরে long-- আগে কিন্তু এই সব সময়, GetString এবং GetInt আছে এই ব্যবহার করে ফণা নীচে হয়েছে মেমরি অ্যাড্রেস মৌলিক ধারণা. সুতরাং এখন, একটি এর কিছু করা যাক ব্যবহারকারী বান্ধব একটু বেশি. আপনি Binky অনলাইন শেষ থেকে, প্রত্যাহার হতে পারে সময়ের আমার মাউস তাই cooperate-- হবে আমরা এই কোড, যা ছিল সত্যি, মোটামুটি অর্থহীন. এই কোড কিছুই অর্জন দরকারী, কিন্তু এটা উদাহরণ যে অধ্যাপক Parlante উপস্থাপন করার জন্য ব্যবহৃত কি ছিল যাওয়া মেমরি জড়িত প্রোগ্রাম. তাই এর এই নতুন করে বলা যাক গল্প সুপার সংক্ষিপ্তভাবে. এই প্রথম দুই লাইন, মধ্যে ইংরেজি, আপনি কি বলতে হবে, না? শুধু যুক্তিসঙ্গতভাবে মানুষের, কিন্তু সামান্য পরিভাষা, একটি ছুরিকাঘাত নিতে. শ্রোতা: [শ্রবণাতীত]. ডেভিড জে MALAN: ঠিক আছে, আপনি প্রতিষ্ঠার করছি আপনার x এবং y ভেরিয়েবল ঠিকানা. নেই বেশ, x এবং y হয় না প্রথাগত অর্থে ভেরিয়েবল. x এবং y অ্যাড্রেস বা ঠিকানা সংরক্ষণ করবে. তাই আসুন এই আরো একবার চেষ্টা করুন. একটি খারাপ শুরু, যদিও. হ্যাঁ? শ্রোতা: [শ্রবণাতীত]. ডেভিড জে MALAN: গুড. আমি যে একটু ক্লিনার মনে করি. দুই পয়েন্টার, দুটি পূর্ণসংখ্যার ঘোষণা. এবং আমরা তাদের x এবং y আহ্বান করছি. অথবা আমরা যদি আঁকা এই একটি ছবি হিসাবে, আবার, বেশ সহজভাবে যে সব প্রত্যাহার আমরা যে প্রথম লাইন সঙ্গে করছেন এই মত একটি বক্স অঙ্কন করা হয়, এটা কিছু আবর্জনা মান সঙ্গে, এবং তারপর এটি x কলিং, এবং এই মত অন্য একটি বক্স, কিছু আবর্জনা মান সঙ্গে তা, Y কলিং এটি. আমরা দুই ঘোষণা করেছি পয়েন্টার যে শেষ পর্যন্ত কোন int এর ঠিকানা সংরক্ষণ করবে. সুতরাং যে সব আছে. Binky অনলাইন এই কি তাই যখন, মৃত্তিকা শুধু ভালো লাগছিল. এবং নিক শুধু ধরনের তীর আবৃত, যদিও তারা কোথাও প্রতি নির্দেশ করছি না বিশেষ করে, কারণ তারা ঠিক করছি আবর্জনা মান. তারা স্পষ্টভাবে সক্রিয়া না কোথাও বিশেষ. এখন পরের লাইন কোড, রিকল, এই ছিল. , যুক্তিসঙ্গতভাবে ব্যবহারকারী বান্ধব তাই কিন্তু কিছুটা প্রযুক্তিগত ইংরেজি, কোড করছেন এই লাইন কি? হ্যাঁ? শ্রোতা: [শ্রবণাতীত]. ডেভিড জে MALAN: পারফেক্ট. এটি চাঙ্গড় বণ্টন কোন int এর আকার যে মেমরি. এবং যে অর্ধেক উত্তর. আপনি ঠিক উত্তর মত প্রকাশের অর্ধেক. কি ঘটছে সমান সাইন বাম দিকে? হ্যাঁ? শ্রোতা: এবং নির্ধারণ এটি পরিবর্তনশীল x কিভাবে? ডেভিড জে MALAN: এবং নির্ধারণ এটি পরিবর্তনশীল x এর. সংক্ষিপ্তবৃত্তি, ডান দিকে বরাদ্দ তাই যথেষ্ট মেমরি কোন int সঞ্চয়. কিন্তু malloc বিশেষভাবে ঠিকানা ফেরৎ আপনি করেছি যা মেমরি যে তাল, এর শুধু x এর মধ্যে সংরক্ষণ করা হয় প্রস্তাবিত. তাই কি নিক Binky অনলাইন সঙ্গে শেষ সময় হয় তিনি যে পয়েন্টার আউট টেনেছেন, মাটি, একটি মেমরি সাদা খণ্ড এখন নির্দেশ যে কোন int এর সাইজ সমান. এবং প্রকৃতপক্ষে, যে সেসব চার বাইট প্রতিনিধিত্ব করতে. কোড এখন, পরের লাইন এই কি, তারা এক্স 42 পায়. তাই 42 উপর সহজবোধ্য ডান দিকে, জীবনের অর্থ. বাম দিকে, তারা এক্স মানে কি? এটা ঠিক আছে gone-- যে খুব থাকতে পারে. ঠিক আছে. শ্রোতা: মূলত, [শ্রবণাতীত] যান ডেভিড জে MALAN: গুড. শ্রোতা: [শ্রবণাতীত]. ডেভিড জে MALAN: যথাযথভাবে. বাম দিকে এক্স যান. এক্স ঠিকানা. এটা 33 অক্সফোর্ড স্ট্রিট, বা OX1 মত. এবং তারা এক্স যে যেতে মানে ঠিকানা এবং কি সেখানে রাখা? 42. তাই প্রকৃতপক্ষে, যে নিক ঠিক কি. তিনি দ্বারা শুরু মূলত, মানসিকভাবে একটি আঙুল নির্দেশ এক্স, তীর অনুসরণ ডান হাত সাদা বাক্স পার্শ্ব, এবং সেখানে 42 নম্বর নির্বাণ. কিন্তু তারপর জিনিষ পেয়েছিলাম একটি সামান্য বিপজ্জনক, ডান? Binky এর তার মাথা হারান সম্পর্কে. তারা Y মানে কি, 13, দুর্ভাগ্য সমান? তাই তারা Y মানে y মধ্যে ঠিকানা যান. কিন্তু y মধ্যে ঠিকানা কি? সমস্ত অধিকার, এটা আবর্জনা মান, ডান? আমি একটি প্রশ্ন চিহ্ন হিসাবে এটি সৃষ্টি. নিক আপ কার্ল তীর হিসাবে এটা সৃষ্টি. এবং যত তাড়াতাড়ি আপনি চেষ্টা হিসেবে সেখানে যেতে বলে, তারকা Y না, কিন্তু একটি বৈধ আছে না ঠিকানা, এটা কিছু বাজে অবস্থান, ক্র্যাশ প্রোগ্রাম করে যাচ্ছে. এবং Binky এর মাথা যাচ্ছে এটা করেনি, এখানে উড়ে আসা বন্ধ. শেষ পর্যন্ত, এই প্রোগ্রাম তাই শুধু ফ্ল্যাট আউট ত্রুটি ছিল. এটি একটি বগী প্রোগ্রাম ছিল. এবং এটা সংশোধন করা প্রয়োজন. এবং একমাত্র উপায়, সত্যিই, এটা ঠিক করা হতে পারে, উদাহরণস্বরূপ, এই লাইন, এমনকি আমরা পেতে না, যা কারণ প্রোগ্রাম খুব শীঘ্রই ক্র্যাশ করেছে. কিন্তু আমরা এই স্থির ছিল, কি প্রভাব Y x সমান আছে করছেন না? ওয়েল, এটা মূলত এ y পয়েন্ট যাই হোক না কেন মান x নির্দেশ করা হয়. নিক এর গল্প তাই, বা Binky এর গল্প, উভয় x এবং y প্রতি নির্দেশ হয়েছে মেমরি সাদা খণ্ড, তাই যে, অবশেষে, যখন আপনি Y আবার 13 এর সমান তারকা না, আপনি 13 নির্বাণ শেষ যথাযথ অবস্থান. তাই এই লাইন পুরোপুরি হয় বৈধ, এই এক ছাড়া, এটা আপনি আগে ঘটেছে আসলে Y কিছু মান নির্ধারিত হয়. এখন সৌভাগ্যক্রমে, আপনি করবেন না সব মাধ্যমে কারণ আছে আপনার নিজের উপর বিষয় এই ধরণের. আমাকে এগিয়ে যান এবং খুলুন এখানে একটি টার্মিনাল উইন্ডোর এবং শুধুমাত্র একটি মুহূর্ত জন্য, খুলুন, একটি সুপার ছোট প্রোগ্রাম যে এছাড়াও বাছাই করা অর্থহীন. এটা অরুপ. এটা দরকারী কিছু অর্জন করে না. কিন্তু সমস্যা প্রকট না মেমরি, তাই এর কটাক্ষপাত করা যাক. মুখ্য, সুপার সহজ. এটা দৃশ্যত একটি ফাংশন কল, চ, এবং তারপর 0 প্রদান করে. এটা জগাখিচুড়ি এই ধরনের কঠিন. তাই প্রধান এ পর্যন্ত বেশ ভাল. তাই চ সমস্যাযুক্ত. এবং শুধু অনেক না করা এটি নামকরণ মধ্যে প্রচেষ্টা এখানে, কোড ফোকাস রাখা. চ দুই লাইন আছে. এবং এর এখন কি ঘটছে তা দেখতে. তাই এক হাত এখানে এবং আমাকে করা পূর্ববর্তী সঙ্গে এই সামঞ্জস্যপূর্ণ এক হাত উদাহরণস্বরূপ, বাম দিকে হয় ইংরেজি, কি করছেন? এটা হচ্ছে ÑÑ শ্রোতা: একটি পয়েন্টার নির্মাণ. ডেভিড জে MALAN: একটি পয়েন্টার নির্মাণ কোন int এবং কলিং এটি x. তাই ঐ বাক্সে এক তৈরি হচ্ছে আমি স্পর্শ পর্দায় রাখা অঙ্কন. এবং এখন, ডান হাত পাশ, না malloc, অবশ্যই, মেমরি একটি খণ্ড বণ্টন করা হয়. এবং শুধু পরিষ্কার হবে, কিভাবে অনেক মেমরি দৃশ্যত এটা বণ্টন, আপনি যদি ঠিক এখানে কোন ধরনের গণিত না? সুতরাং এটি 40 বাইট. এবং আমি জানি যে আমি একটি জানেন শুধুমাত্র কারণ কোন int, CS50 প্রয়োগ উপর, অন্তত, চার বাইট. তাই 10 বার 4 40. তাই এই একটি এক্স সংরক্ষণ করা হয়, ঠিকানা 40 ints মধ্যে প্রথম যে ফিরে স্থান বরাদ্দ করা হয়েছে, ফিরে যাও, ফিরে যাও, ফিরে যাও. এবং যে malloc সম্পর্কে কি কি. এটা একটা সামান্য মেমরি লাগবে না এখানে, এখানে একটু, একটু এখানে. এটি আপনি মেমরি এক খণ্ড দেয় contiguously, অপারেটিং থেকে সিস্টেম. এখন এই সম্পর্কে কি, এক্স বন্ধনী 10 0 সমান? কোড নির্বিচারে লাইন. এটা দরকারী কিছু অর্জন করে না. কিন্তু এটা আকর্ষণীয় এক্স বন্ধনী 10-- কারণ? হ্যাঁ? শ্রোতা: [শ্রবণাতীত]? ডেভিড জে MALAN: এক্স বন্ধনী 10 নাল হতে হবে না. নাল বিস্তারিত খেলার মধ্যে আসে স্ট্রিং সঙ্গে, একটি স্ট্রিং এর শেষে. কিন্তু একটি ভাল চিন্তা. কত বড়, এমনকি, এই অ্যারে আমি 40 বাইট বরাদ্দ করেছি যদিও? এটা ঠিক, নয় মাধ্যমে 0? এটা মোট 10 ints হয় না. 40 বাইট, কিন্তু 10 ints হয়, 0 মাধ্যমে 0 ইন্ডেক্স. তাই যে x বন্ধনী 10 কি হয়? এটা আসলে কিছু অজানা আবর্জনা মান. এটা আমার অন্তর্গত নয় এমন মেমরি. আমি যে স্পর্শ করা উচিত নয় বাইট নম্বর 41, 42, 43, 44. আমি খুব বেশী দূরে সামান্য যাচ্ছি. এবং প্রকৃতপক্ষে, আমি চালানো এই প্রোগ্রাম, এটি খুব ভাল বিপর্যস্ত হতে পারে. তবে কখনও কখনও, আমরা ভাগ্যবান পাবেন. তাই শুধু প্রকট আপাততঃ এবং উন্মুক্তভাবে, যদি আপনি আগে না জানি এটিকে এর এই চালানো যাক না. এটা আসলে বিপর্যস্ত না. কিন্তু আমি এই পরিবর্তন যদি উদাহরণস্বরূপ, 1000 মত হতে সত্যিই এই করতে ইচ্ছাকৃত, এর দেখতে দিন আমরা পেতে পারেন যদি এটি এই সময় বিপর্যস্ত. ঠিক আছে, এটা বিপর্যস্ত না. কিভাবে 100,000 সম্পর্কে? এর এটি পুনর্নির্মাণ করা যাক, এবং এখন এটি পুনরায় আরম্ভ করুন. ঠিক আছে. ছি ছি. ঠিক আছে. তাই দৃশ্যত, আবার, এই মেমরি অংশ, তাই কথা বলতে, তাই আমরা করতে পারেন, যুক্তিসঙ্গতভাবে বড় আবার এবং আবার পেতে ভাগ্যবান. কিন্তু শেষ পর্যন্ত, একবার আপনি হাস্যকর পেতে এবং সত্যিই, পর্দা পর্যন্ত যেতে আউট আপনি, যে সত্যিই মেমরি স্পর্শ সত্যিই আপনি অন্তর্গত নয়. কিন্তু অকপটে, এই বাগ ধরণের যাচ্ছে কঠিন এবং কঠিন হতে আপনার নিজের উপর চিন্তা করা. কিন্তু সৌভাগ্যক্রমে, প্রোগ্রামার হিসাবে, আমরা আমাদের জন্য এই কাজ করার অনুমতি দেয়. তাই এই সম্ভবত,, এক Ugliest প্রোগ্রাম, GDB এর আউটপুট চেয়ে আরও uglier. কিন্তু এটা সবসময় একটি লাইন আছে বা সুপার দরকারী যে দুই. Valgrind সাহায্য করে যে একটি প্রোগ্রাম আপনি একটি প্রোগ্রাম ডিবাগ না, জন্মগতভাবে, কিন্তু মেমরি সংক্রান্ত খুঁজে সমস্যা, বিশেষভাবে. এটি স্বয়ংক্রিয়ভাবে আপনার জন্য আপনার কোড চালানো হবে আপনি এবং অন্তত দুটি জিনিস জন্য, দেখুন. এক, আপনি কিছু করবেন স্পর্শ মেমরি মত আপতিক যে আপনি অন্তর্গত না? এটা আপনি সেই ক্ষেত্রে এটি সাহায্য করবে. এবং দুই, এটা সাহায্য করবে আপনি কিছু বলা খুঁজে মেমরি ডিস্ক্রিপ্টরের লিক সম্বন্ধে সূচিত, আমরা যা সম্পূর্ণ উপেক্ষা করা, naively,, কিছু সময়ের জন্য এবং উদাসীন. কিন্তু এটি সব দেখা যাচ্ছে, এই সময়, যখনই আপনি GetString বলা করেছি আমাদের প্রোগ্রাম অনেক, আপনি অপারেটিং বলছি মেমরি সিস্টেম, কিন্তু আপনি যদি কোন টনক আছে কখনও এটি প্রদান ফিরে, করছেন unalloc, বা বিনামূল্যে, এটা বলা হচ্ছে না. না, কারণ আমরা কখনও করেছি তাই আপনাকে জিজ্ঞাসা করা. কিন্তু এই সব সময়, প্রোগ্রাম আপনি সি লেখা হয়েছে করেছি মেমরি লিক করা হয়েছে, অপারেটিং জিজ্ঞাসা আরো এবং আরো জন্য সিস্টেম স্ট্রিং এবং যে কোন বস্তু জন্য মেমরি, কিন্তু তা ফিরে হস্তান্তর না. এবং এখন এই একটি বিট একটি অতিসরলীকরণ, কিন্তু আপনি কি কখনও করেছি যদি আপনার ম্যাক চালানো বা বেশ কিছু সময়, খোলার জন্য আপনার পিসি প্রোগ্রাম প্রচুর, হয়তো, প্রোগ্রাম বন্ধ এবং এমনকি যদিও আপনার কম্পিউটার ক্র্যাশ করেনি, এটা, তাই অনেক ধীর হচ্ছে এটা সত্যিই হিসাবে যদিও মেমরি অনেক ব্যবহার করে বা সম্পদ, যদিও, যদি আপনি না এমনকি কীবোর্ড স্পর্শ, যে be-- কিন্তু always-- পারে পারে প্রোগ্রাম আপনি চলমান করছি যে হতে নিজেদের মেমরি তথ্য ফাঁসের আছে. এবং তারা আরো এবং অপারেটিং সিস্টেম জিজ্ঞাসা রাখা আরো মেমরি, কিন্তু এটি সম্পর্কে বিস্মরণ, আসলে, এটা ব্যবহার করে না কিন্তু সুতরাং মেমরি দূরে গ্রহণ এটি করতে চান হতে পারে যে অন্যান্য প্রোগ্রাম থেকে. সুতরাং যে একটি সাধারণ ব্যাখ্যা. এখন এখানে যেখানে Valgrind-এর এর আউটপুট সম্পূর্ণ হয় যারা কম নৃশংস এবং একইভাবে আরো আরামদায়ক. কিন্তু আকর্ষণীয় স্টাফ এখানে ডান আপ হয়. এটা আমার একটি অবৈধ লেখার বলছে আকার চার, এই প্রোগ্রাম ঘটবে বিশেষ করে, memory.c মধ্যে লাইন 21 এ. আমি এইচএম, সেখানে প্রকৃতপক্ষে, 21 রেখায় যান আকার চার একটি অবৈধ লেখার. কেন আকার চার? ওয়েল, এই সংখ্যা এবং anything-- হতে পারে কোন int হয়. সুতরাং এটি চার বাইট. তাই আমি চার বাইট করছি নির্বাণ যেখানে তারা অন্তর্গত না. এটা কি Valgrind-এর আসলে আমাকে বলছে. তাছাড়া, এটা করবে না হিসাবে আমরা দেখতে পাবেন, আমাকে বলুন, আপনি এই ভবিষ্যতে pset মধ্যে চালানো, এবং যদি আপনি যা প্রকৃতপক্ষে মেমরি, ফাঁস করেছি আমি বলা করেছি, কারণ আমি আছে যদি malloc, কিন্তু আমি আসলে না বিনামূল্যে, এই ক্ষেত্রে, বলা হয়, যা অবশেষে আমরা দেখতে পাবেন যদি malloc বিপরীত. তাই এখন, আমি একটি চূড়ান্ত উদাহরণ মনে করি. তাই এই এক একটি সামান্য আরো রহস্যময়, কিন্তু এটি সম্ভবত সবচেয়ে বড় কারণ , মেমরি সঙ্গে সতর্কতা অবলম্বন করা আবশ্যক এবং কারণ যে অনেক প্রোগ্রাম এবং এমনকি এই দিন / অথবা ওয়েব সার্ভার,, কোথাও খারাপ না দ্বারা অধিগৃহীত হয় ইন্টারনেট একরকম যারা আপনার সার্ভারে বাজে প্যাকেট পাঠানোর আপনার অ্যাকাউন্ট আপোষ করার চেষ্টা করছে, বা আপনার তথ্য গ্রহণ করা, বা শুধু সাধারণত একটি মেশিন নিতে. বাফার ওভারফ্লো, হিসাবে নাম, মানে দাড়ায় না কোন int, কিন্তু একটি বাফার উছল. এবং একটি বাফার শুধু একটি অভিনব উপায় বলছে এটি একটি মেমরি গুচ্ছ. এবং প্রকৃতপক্ষে, আমি একটি স্ট্রিং বলা পরিবর্তে এর বাফার, আগে. এটি একটি বাফার যদি না, ইউটিউব অর্থে মত, অথবা আপনি একটি ভিডিও পর্যবেক্ষণ করছেন যে কোন সময়, আপনি শব্দ বাফার উপলব্ধ করা হয়, দেখা হতে পারে বিন্দু,, বিন্দু বিন্দু. এটা অবিশ্বাস্যভাবে বিরক্তিকর. এবং যে শুধু মানে আপনার ভিডিও প্লেয়ার যে প্রচুর ডাউনলোড করার চেষ্টা করা হয় বাইট বাইট, প্রচুর ইন্টারনেট থেকে একটি ভিডিও থেকে. কিন্তু ধীর, তাই এটা চেষ্টা তাদের একটি গুচ্ছ ডাউনলোড করতে যাতে একটি বাফার, একটি ধারক, ভরাট আপনি যে এটা পরে করতে পারেন যথেষ্ট বাইট আছে আপনি ভিডিও প্রদর্শন ক্রমাগত pausing ছাড়া. কিন্তু এটি আপনি করতে পারেন, সক্রিয় আউট এই বড় একটি বাফার আছে. কিন্তু এই অনেক তথ্য রাখতে চেষ্টা এটা, এবং খুব খারাপ জিনিস ঘটতে পারে. সুতরাং উদাহরণস্বরূপ, এর যাক একটি উদাহরণ এই চূড়ান্ত টিজার. এই অন্য প্রোগ্রাম যে, প্রথম নজরে, সুপার দরকারী কিছু না. এটি একটি প্রধান ফাংশন আছে এর যে চ, যে ফাংশন কল. এবং যে ফাংশন, চ, এখানে আছে, একটি গৃহস্থালি অ্যারে, আকার 12, সি বলা হয়. এবং তারপর এটি এই ব্যবহার করে নতুন ফাংশন strncpy বলা হয়. এটা, এই সহজ সঙ্গে, দেখা যাচ্ছে যে কোড সহজ লাইন, মাত্র দুই লাইন, আমরা, আমার সম্পূর্ণ প্রোগ্রাম করেছেন এবং সেইজন্য, আমার সমগ্র কম্পিউটার, এবং আমার ইউজার অ্যাকাউন্ট, এবং আমার হার্ড কেউ সম্ভাব্য প্রবন ড্রাইভ যারা জানে এবং চালানোর জন্য যথেষ্ট ভাল একটি নির্দিষ্ট কমান্ড লাইন সঙ্গে এই প্রোগ্রাম যুক্তি. অন্য কথায়, যদি এই খারাপ লোক টাইপ করে argvargv [1] এর ভিতরে রাখে কীবোর্ড একটি খুব বিশেষ পেরেছিলেন এ স্ট্রিং, না বর্ণমালা, 123, কিন্তু মূলত, এক্সিকিউটেবল প্রতিনিধিত্বকারী বাইনারি চিহ্ন কোড, তিনি লিখেছেন যে একটি প্রোগ্রাম, যা এই সহজ প্রোগ্রাম, সঙ্গে প্রোগ্রাম হাজার হাজার প্রতিনিধি যে, অনুমান করা, একইভাবে প্রবন তিনি শেষ পর্যন্ত সব মুছে দিতে পারেন আমার হার্ড ড্রাইভে ফাইল, একটি পেতে তিনি করতে পারেন, যাতে প্রম্পট জ্বলজ্বলে তাদের নিজস্ব কমান্ড টাইপ করুন নিজেকে সব ফাইল ইমেইল করুন. আমি কি করতে পারেন যে কিছু, তিনি সে এই কোড দিয়ে করতে পারেন. আমরা এখনো পুরোপুরি এই সমাধান হবে না. এবং আসলে, এটা যাচ্ছে একটু ছবি জড়িত ভালো, আমরা শীঘ্রই আসবো যা সব ভাল বুঝতে. কিন্তু আজকের জন্য, এর শেষ দিন , একটি সামান্য আরো আশা করছি, কি বোধগম্য XKCD তামাশা, আমরা পরবর্তী সময়ে পুনরায় শুরু পর্যন্ত. ঠিক আছে. বুধবার আপনি দেখুন. [সঙ্গীত বাজানো] স্পিকার: এবং এখন, গভীর Daven Farnham দ্বারা চিন্তা,. স্মৃতি একটি গাদা মধ্যে জাম্পিং ভালো হয় রবিবার বিকালে সুবর্ণ পাতা. বায়ু প্রবাহিত, ঊর্ধ্বে নিক্ষেপণ আপনার উহু hair--, আমি দিন when-- মিস [হাস্য]