1 00:00:00,000 --> 00:00:00,499 2 00:00:00,499 --> 00:00:01,395 [সঙ্গীত বাজাচ্ছি] 3 00:00:01,395 --> 00:00:05,590 4 00:00:05,590 --> 00:00:07,940 >> ডগ লয়েড: ঠিক আছে, তাই একটি প্রস্তাব এখানে শুরু করার আগে. 5 00:00:07,940 --> 00:00:11,660 আপনি ভিডিওতে দেখা না করে থাকেন আপনাকে প্রথমে তার চাইতে পারেন পয়েন্টার. 6 00:00:11,660 --> 00:00:15,860 এই ভিডিওটি কারণ অন্য পয়েন্টার সঙ্গে কাজ করার উপায়. 7 00:00:15,860 --> 00:00:17,574 >> সুতরাং এটি কথা বলার যাচ্ছে কিছু ধারণা সম্পর্কে 8 00:00:17,574 --> 00:00:19,490 আমরা যে আবরণ ভিডিও পয়েন্টার, এবং আমরা করছি 9 00:00:19,490 --> 00:00:21,948 এখন তাদের অংশগুলোকে যাচ্ছে, তারা ইতিমধ্যেই অভিমানী 10 00:00:21,948 --> 00:00:23,090 সাজানোর বোঝা. 11 00:00:23,090 --> 00:00:25,440 সুতরাং যে শুধু আপনার ন্যায্য সতর্কবার্তা যে আপনি এই ভিডিও দেখা করছি 12 00:00:25,440 --> 00:00:27,814 এবং যদি দেখা যায় নি পয়েন্টার ভিডিও, এটা হতে পারে সাজানোর 13 00:00:27,814 --> 00:00:29,610 আপনার মাথার উপর একটি সামান্য বিট উড়ে. 14 00:00:29,610 --> 00:00:32,080 আর তাই এটি কার্যকর হতে পারে যাতে এটি পাহারা. 15 00:00:32,080 --> 00:00:34,710 >> সুতরাং আমরা ইতিমধ্যে এক দেখা যায় পথ, পয়েন্টার সাথে কাজ করতে 16 00:00:34,710 --> 00:00:37,810 যা আমরা একটি ঘোষণা হয় পরিবর্তনশীল, এবং তারপর আমরা 17 00:00:37,810 --> 00:00:42,160 একটি পয়েন্টার অন্য ভেরিয়েবল ডিক্লেয়ার পরিবর্তনশীল, এটা স্থানটিকে. 18 00:00:42,160 --> 00:00:44,870 সুতরাং আমরা তৈরি করেছি একটি একটি নামের সাথে পরিবর্তনশীল, আমরা করেছি 19 00:00:44,870 --> 00:00:48,480 একটি নামের সঙ্গে দ্বিতীয় পরিবর্তনশীল তৈরি এবং আমরা দ্বিতীয় পরিবর্তনশীল যে নির্দেশ 20 00:00:48,480 --> 00:00:50,220 যে প্রথমে. 21 00:00:50,220 --> 00:00:52,370 এই ধরণের একটি সমস্যা যদিও, তবে তা এ জন্যে 22 00:00:52,370 --> 00:00:54,650 ঠিক জানা আমাদের প্রয়োজন কত স্মৃতি আমরা আছেন 23 00:00:54,650 --> 00:00:57,600 মুহূর্তে প্রয়োজন যাচ্ছে আমাদের প্রোগ্রাম কম্পাইল করা হয়. 24 00:00:57,600 --> 00:00:58,220 >> কেন হল? 25 00:00:58,220 --> 00:01:03,338 আমরা নাম দিতে সক্ষম হতে হবে, কারণ অথবা সম্ভব ভেরিয়েবল সব চিহ্নিত 26 00:01:03,338 --> 00:01:04,129 আমরা সম্মুখীন হতে পারে. 27 00:01:04,129 --> 00:01:07,910 আমরা হতে পারে যে একটি অ্যারের থাকতে পারে তথ্য অনেক ধরে রাখতে সক্ষম, 28 00:01:07,910 --> 00:01:10,110 কিন্তু এটি এখনও নয় যথেষ্ট ঠিক সুনির্দিষ্ট. 29 00:01:10,110 --> 00:01:12,640 আমরা কি জানি না, যদি, আমরা কি কোন ধারণা আছে 30 00:01:12,640 --> 00:01:14,370 কত আমরা কম্পাইল সময়ে হবে? 31 00:01:14,370 --> 00:01:17,020 অথবা কি আমাদের প্রোগ্রাম যদি আমি ইচ্ছা করতাম সত্যিই একটি দীর্ঘ সময় জন্য চালানো, 32 00:01:17,020 --> 00:01:19,810 বিভিন্ন ব্যবহারকারীর গ্রহণ তথ্য, এবং আমরা করতে পারেন না সত্যিই 33 00:01:19,810 --> 00:01:23,170 আমরা কিনা অনুমান 1,000 ইউনিট প্রয়োজন যাচ্ছে? 34 00:01:23,170 --> 00:01:26,060 >> এটা আমরা করতে পারেন চাই না কমান্ড লাইন থেকে বলতে 35 00:01:26,060 --> 00:01:28,040 কতগুলি আইটেম লিখুন আপনি আপনার প্রয়োজন হবে মনে. 36 00:01:28,040 --> 00:01:31,100 ভাল যে অনুমান ভুল কি তাহলে? 37 00:01:31,100 --> 00:01:34,300 ডাইনামিক মেমরি বরাদ্দ সাজানোর আমাদের পথ পারবেন 38 00:01:34,300 --> 00:01:36,867 এই বিশেষ সমস্যা কাছাকাছি পেতে. 39 00:01:36,867 --> 00:01:38,700 আর ভাবে এটা আছে পয়েন্টার ব্যবহার করে হয়. 40 00:01:38,700 --> 00:01:42,140 >> আমরা পয়েন্টার ব্যবহার করতে পারেন পরিবর্তনশীল এক্সেস পাবেন 41 00:01:42,140 --> 00:01:45,710 যে বরাদ্দ মেমরি, মেমরি আপনার প্রোগ্রাম হিসেবে বরাদ্দ চলছে. 42 00:01:45,710 --> 00:01:48,290 এটা কম্পাইল সময়ে বরাদ্দ না. 43 00:01:48,290 --> 00:01:51,570 যখন আপনি পরিবর্তনশীল বরাদ্দ মেমরি এটি একটি পুল থেকে আসে 44 00:01:51,570 --> 00:01:53,795 মেমরি গাদা হিসেবে পরিচিত. 45 00:01:53,795 --> 00:01:56,420 আমরা করেছি পূর্বে সমস্ত মেমরির কোর্সে সঙ্গে কাজ করা 46 00:01:56,420 --> 00:01:59,920 একটি পুল থেকে আসছে হয়েছে মেমরি স্ট্যাকের হিসাবে পরিচিত. 47 00:01:59,920 --> 00:02:02,470 একটি ভালো উপায় সাধারণত যাও mind-- এবং এই নিয়ম রাখা 48 00:02:02,470 --> 00:02:04,720 সবসময় সত্য না রাখা কিন্তু অনেক সুন্দর প্রায় 49 00:02:04,720 --> 00:02:09,940 সবসময় true-- কোন যে ঝুলিতে সময় আপনি একটি পরিবর্তনশীল নাম এটা দিতে 50 00:02:09,940 --> 00:02:12,090 সম্ভবত স্ট্যাক বসবাস. 51 00:02:12,090 --> 00:02:14,650 এবং যে কোনো সময় আপনি না একটি ভেরিয়েবলের একটি নাম দিতে, 52 00:02:14,650 --> 00:02:19,160 আপনি ডাইনামিক মেমরি সঙ্গে কাজ করতে পারেন যা বরাদ্দ, গাদা উপর বসবাস. 53 00:02:19,160 --> 00:02:22,190 >> এখন আমি ধরনের হিসাবে এই উপস্থাপন করছি মেমরি এই দুটি পুল আছে তাহলে. 54 00:02:22,190 --> 00:02:24,740 কিন্তু আপনি এই দেখা হতে পারে সাধারণত যা ডায়াগ্রাম, 55 00:02:24,740 --> 00:02:27,290 একটি উপস্থাপনা কি মেমরি, দেখে মনে হচ্ছে 56 00:02:27,290 --> 00:02:30,373 এবং আমরা সম্পর্কে সব যত্ন যাচ্ছেন না উপরের এবং নীচের অংশে কাপড়. 57 00:02:30,373 --> 00:02:33,580 কি আমরা যত্নশীল এই অংশ এখানে মাঝখানে, গাদা এবং স্ট্যাকের. 58 00:02:33,580 --> 00:02:35,570 আপনি দেখতে পারেন এই চিত্রটি এ খুঁজছেন, 59 00:02:35,570 --> 00:02:38,390 এইসব আসলে দুটি নয় মেমরি পৃথক পুল. 60 00:02:38,390 --> 00:02:42,757 এটি মেমরি এক শেয়ার্ড পুলের যেখানে আপনি এই চাক্ষুষ মধ্যে, শুরু 61 00:02:42,757 --> 00:02:44,590 আপনি নীচে শুরু এবং আপ ভর্তি শুরু 62 00:02:44,590 --> 00:02:48,040 স্ট্যাকের সঙ্গে নীচে, এবং আপনার কাছ থেকে উপরের শুরু এবং আপ ভর্তি শুরু 63 00:02:48,040 --> 00:02:50,072 গাদা সঙ্গে উপর থেকে নিচে. 64 00:02:50,072 --> 00:02:51,780 কিন্তু এটি সত্যিই হয় একই পুল, এটা ঠিক 65 00:02:51,780 --> 00:02:56,050 বিভিন্ন দাগ, বিভিন্ন স্থানে মেমরি বরাদ্দ করা হচ্ছে যে. 66 00:02:56,050 --> 00:02:59,060 এবং যদি আপনি রান আউট করতে পারেন হয় না থাকার মেমরি 67 00:02:59,060 --> 00:03:01,240 গাদা সব পথ যেতে নীচে, অথবা আছে 68 00:03:01,240 --> 00:03:05,440 স্ট্যাক, উপরের সব পথ যেতে বা গাদা এবং স্ট্যাকের হচ্ছে 69 00:03:05,440 --> 00:03:06,740 একে অপরের বিরুদ্ধে মিলিত হন. 70 00:03:06,740 --> 00:03:09,500 যারা সব শর্ত হতে পারে যে আপনার প্রোগ্রাম কারণ 71 00:03:09,500 --> 00:03:11,030 মেমরি ফুরিয়ে. 72 00:03:11,030 --> 00:03:11,952 সুতরাং, এটা মনে রেখো. 73 00:03:11,952 --> 00:03:13,660 আমরা সম্পর্কে কথা বলতে হলে গাদা এবং স্ট্যাকের 74 00:03:13,660 --> 00:03:17,880 আমরা সত্যিই বিষয়ে কথা হয় মেমরি একই সাধারণ খণ্ড, শুধু 75 00:03:17,880 --> 00:03:21,930 যে মেমরি বিভিন্ন অংশ. 76 00:03:21,930 --> 00:03:24,910 >> তাই আমরা পরিবর্তনশীল কিভাবে পেতে পারি প্রথমেই মেমরি বরাদ্দ? 77 00:03:24,910 --> 00:03:27,740 আমাদের প্রোগ্রাম পেতে কীভাবে এটি চলমান হিসাবে মেমরি? 78 00:03:27,740 --> 00:03:32,660 পাশাপাশি সি নামক একটি ফাংশন প্রদান malloc, মেমরি নির্দিষ্টকারীর, যা 79 00:03:32,660 --> 00:03:36,810 আপনি একটি কল করতে, এবং যে আপনি পাস কতগুলি আপনি চান যে মেমরি বাইট. 80 00:03:36,810 --> 00:03:39,940 আপনার প্রোগ্রাম চালানো সম্ভব হলে তাই এবং আপনি একটি পূর্ণসংখ্যা রানটাইম চান, 81 00:03:39,940 --> 00:03:46,040 আপনি চার বাইট mallock পারে মেমরি, যদি malloc চার বন্ধনী. 82 00:03:46,040 --> 00:03:48,540 >> mallock মধ্য দিয়ে যেতে হবে গাদা মাধ্যমে খুঁজছেন, 83 00:03:48,540 --> 00:03:50,750 আমরা পরিবর্তনশীল কারণ মেমরি বণ্টন, 84 00:03:50,750 --> 00:03:53,500 এবং এটি আপনি ফিরে আসতে হবে যে মেমরি একটি পয়েন্টার. 85 00:03:53,500 --> 00:03:56,180 এটা আপনি যে মেমরি দিতে না এটি একটি নাম দিতে না, 86 00:03:56,180 --> 00:03:57,950 এটা যদি আপনি এটি একটি পয়েন্টার দেয়. 87 00:03:57,950 --> 00:04:00,780 আবার আমি বলেন, কেন এবং যাতে এটা হতে পারে যে গুরুত্বপূর্ণ 88 00:04:00,780 --> 00:04:03,770 পয়েন্টার ভিডিওটি দেখেছেন আমরা এই মধ্যে খুব বেশী দূরে পেতে আগে. 89 00:04:03,770 --> 00:04:05,940 সুতরাং malloc যাচ্ছে একটি পয়েন্টার আপনাকে ফেরত দিতে. 90 00:04:05,940 --> 00:04:08,950 >> Mallock আপনি কোন দিতে না পারেন, তাহলে মেমরি আপনি রান আউট করেছি, কারণ, 91 00:04:08,950 --> 00:04:10,645 এটি একটি নাল পয়েন্টার আপনি ফিরিয়ে দিবে. 92 00:04:10,645 --> 00:04:15,282 আমরা তাহলে কী মনে করবেন না চেষ্টা করুন এবং একটি নাল পয়েন্টার dereference? 93 00:04:15,282 --> 00:04:17,019 আমরা ঠিক আছে, একটি seg দোষ ভোগে? 94 00:04:17,019 --> 00:04:18,060 যে সম্ভবত ভাল না. 95 00:04:18,060 --> 00:04:21,579 >> তাই প্রত্যেক সময় আপনি একটি কল করা সবসময় সবসময় আপনি malloc করতে 96 00:04:21,579 --> 00:04:25,270 পরীক্ষা করতে হবে কিনা বা না আপনার ফিরে নাল দিয়েছেন পয়েন্টার. 97 00:04:25,270 --> 00:04:28,800 যদি তা না হয়, আপনি আপনার প্রোগ্রাম শেষ করতে হবে আপনি ডি-রেফারেন্স চেষ্টা এবং যদি কারণ 98 00:04:28,800 --> 00:04:31,360 আপনি যাচ্ছেন নাল পয়েন্টার একটি সেগমেন্টেশন ফল্ট ভোগে করতে 99 00:04:31,360 --> 00:04:34,380 এবং আপনার প্রোগ্রাম যাহাই হউক না কেন বিপর্যস্ত যাচ্ছে. 100 00:04:34,380 --> 00:04:37,190 সুতরাং কিভাবে স্ট্যাটিক্যালি আমরা না একটি পূর্ণসংখ্যা প্রাপ্ত? 101 00:04:37,190 --> 00:04:37,730 >> int x এর. 102 00:04:37,730 --> 00:04:40,010 আমরা সম্ভবত যে কাজ করেছি বার একটি গুচ্ছ, ডান? 103 00:04:40,010 --> 00:04:43,480 এই নামে একটি ভেরিয়েবল তৈরি করে স্ট্যাকের উপর বসবাস যে এক্স. 104 00:04:43,480 --> 00:04:46,190 কিভাবে আমরা পরিবর্তনশীল একটি পূর্ণসংখ্যা প্রাপ্ত না? 105 00:04:46,190 --> 00:04:50,010 Int তারকা px এর malloc 4 সমান. 106 00:04:50,010 --> 00:04:53,050 >> বা আরো সঠিকভাবে আমরা int তারকা px এর বলতে চাই 107 00:04:53,050 --> 00:04:57,680 , int এর malloc আকার সমান শুধু কিছু কম নিক্ষেপ 108 00:04:57,680 --> 00:04:59,740 আমাদের প্রোগ্রাম প্রায় ম্যাজিক সংখ্যার. 109 00:04:59,740 --> 00:05:04,140 এটি আমাদের জন্য প্রাপ্ত যাচ্ছে গাদা থেকে মেমরির চার বাইট, 110 00:05:04,140 --> 00:05:06,720 এবং পয়েন্টার আমরা পেতে তা ফিরে px এর বলা হয়. 111 00:05:06,720 --> 00:05:08,430 এবং তারপর আমরা করেছি, ঠিক যেমন আমরা পূর্বে সম্পন্ন 112 00:05:08,430 --> 00:05:13,966 পারেন px এর ডি-রেফারেন্স করতে যে মেমরি অ্যাক্সেস. 113 00:05:13,966 --> 00:05:15,590 কিভাবে আমরা ব্যবহারকারী থেকে একটি পূর্ণসংখ্যা পেতে পারি? 114 00:05:15,590 --> 00:05:17,970 আমরা int x int- পেতে সমান বলতে পারেন. 115 00:05:17,970 --> 00:05:19,930 যে বেশ সহজবোধ্য. 116 00:05:19,930 --> 00:05:24,030 আমরা একটি অ্যারের তৈরি করতে চান তাহলে কি স্ট্যাকের উপর যে বাস ফ্লোট X? 117 00:05:24,030 --> 00:05:28,210 যে নাম stack_array-- ভাসা আমাদের অ্যারে বর্গাকার বন্ধনী x এর. 118 00:05:28,210 --> 00:05:32,419 যে আমাদের একটি অ্যারের জন্য তৈরি হবে স্ট্যাকের উপর যে বাস ফ্লোট এক্স. 119 00:05:32,419 --> 00:05:34,960 আমরা floats একটি অ্যারের তৈরি করতে পারেন যে খুব, গাদা উপর বসবাস. 120 00:05:34,960 --> 00:05:37,330 সিনট্যাক্স একটি চেহারা হতে পারে , আরো কষ্টকর সামান্য 121 00:05:37,330 --> 00:05:41,740 কিন্তু আমরা ভাসমান বলতে পারেন তারকা heap_array সমান 122 00:05:41,740 --> 00:05:44,360 যদি malloc X বার float এর সাইজ. 123 00:05:44,360 --> 00:05:48,160 আমি রাখা যথেষ্ট রুম দরকার X বিন্দু মান ভাসমান. 124 00:05:48,160 --> 00:05:51,560 তাই আমি এটা 100 প্রয়োজন বলে ফ্লোট, বা 1,000 ফ্লোট. 125 00:05:51,560 --> 00:05:54,810 সুতরাং যে ক্ষেত্রে এটি হবে 100 ফ্লোট জন্য 400 বাইট, 126 00:05:54,810 --> 00:05:59,080 বা 1,000 ফ্লোট জন্য 4,000 বাইট, প্রতিটি ভাসমান লাগে কারণ 127 00:05:59,080 --> 00:06:01,230 স্থান চার বাইট. 128 00:06:01,230 --> 00:06:05,110 >> এই কাজ করার পর আমি ব্যবহার করতে পারেন heap_array চৌকো বন্ধনী সিনট্যাক্স. 129 00:06:05,110 --> 00:06:08,970 শুধু আমি stack_array যেভাবে আমি পৃথকভাবে তার উপাদান অ্যাক্সেস করতে পারেন 130 00:06:08,970 --> 00:06:11,590 ব্যবহার heap_array শূন্য, heap_array এক. 131 00:06:11,590 --> 00:06:15,800 কিন্তু আমরা তা করতে পারে কারণ প্রত্যাহার কারণ সি একটি অ্যারের নাম 132 00:06:15,800 --> 00:06:19,990 সত্যিই একটি পয়েন্টার যে অ্যারে এর প্রথম উপাদান. 133 00:06:19,990 --> 00:06:23,480 আমরা একটি ঘোষণা করছি যে তাই এখানে স্ট্যাকের উপর floats অ্যারে 134 00:06:23,480 --> 00:06:24,810 আসলে একটু বিভ্রান্তিকর. 135 00:06:24,810 --> 00:06:27,600 আমরা সত্যিই আছে সেখানে কোড দ্বিতীয় লাইন 136 00:06:27,600 --> 00:06:32,360 এছাড়াও একটি খণ্ড একটি পয়েন্টার তৈরি আমরা তখন সঙ্গে কিছু কাজ যে স্মৃতি. 137 00:06:32,360 --> 00:06:35,620 >> এখানে বড় সমস্যা সাথে এর পরিবর্তনশীল যদিও মেমরি বরাদ্দ, 138 00:06:35,620 --> 00:06:38,360 এটা সত্যিই কেন এবং এই হল কিছু ভাল অভ্যাস বিকাশ গুরুত্বপূর্ণ 139 00:06:38,360 --> 00:06:39,800 যখন আপনি এটি দিয়ে কাজ করছি. 140 00:06:39,800 --> 00:06:43,060 স্ট্যাটিক্যালি ঘোষণা ভিন্ন মেমরি, আপনার মেমরি 141 00:06:43,060 --> 00:06:46,790 স্বয়ংক্রিয়ভাবে ফিরে না হয় আপনার ফাংশন সম্পন্ন করা হয় যখন আপনি সিস্টেম. 142 00:06:46,790 --> 00:06:49,280 আমরা প্রধান আছে, এবং যদি তাই হয় প্রধান একটি ফাংশন কল 143 00:06:49,280 --> 00:06:53,860 F, F শেষ এটা যখন করছেন যাই হোক না কেন এবং প্রোগ্রাম নিয়ন্ত্রণ ফেরৎ 144 00:06:53,860 --> 00:06:58,810 ফিরে, প্রধান সব মেমরি ব্যবহৃত যে চ ফিরিয়ে দেওয়া হয়. 145 00:06:58,810 --> 00:07:01,250 এটি পুনরায় ব্যবহার করা যাবে অন্য কিছু প্রোগ্রাম দ্বারা 146 00:07:01,250 --> 00:07:04,250 বা অন্য কিছু ফাংশন যে প্রধান পরে বলা হয়. 147 00:07:04,250 --> 00:07:06,970 এটা আবার সেই একই মেমরি উপর ব্যবহার করতে পারেন. 148 00:07:06,970 --> 00:07:09,620 >> আপনি যদি পরিবর্তনশীল যদিও মেমরি বরাদ্দ 149 00:07:09,620 --> 00:07:14,380 আপনি স্পষ্টভাবে জানাতে হবে আপনি এটি সঙ্গে সম্পন্ন যে সিস্টেম. 150 00:07:14,380 --> 00:07:18,370 এটা যা করতে পারে, এটা আপনার জন্য সম্মুখের রাখা হবে আপনি চলমান আউট একটি সমস্যা হতে 151 00:07:18,370 --> 00:07:19,290 মেমরি. 152 00:07:19,290 --> 00:07:22,179 এবং আসলে আমরা কখনো কখনো পড়ুন একটি মেমরি লিক এই হিসাবে. 153 00:07:22,179 --> 00:07:24,970 এবং কখনও কখনও এই মেমরি তথ্য ফাঁসের আসলে সত্যিই বিধ্বংসী হতে পারে 154 00:07:24,970 --> 00:07:27,020 সিস্টেমের কর্মক্ষমতা জন্য. 155 00:07:27,020 --> 00:07:31,120 >> আপনি একটি ঘন ইন্টারনেট ব্যবহারকারী হন তাহলে আপনি, নির্দিষ্ট ওয়েব ব্রাউজার ব্যবহার করতে পারে 156 00:07:31,120 --> 00:07:35,630 এবং আমি এখানে নাম নাম, কিন্তু না করতে কিছু ওয়েব ব্রাউজার আছে আউট আছে 157 00:07:35,630 --> 00:07:39,150 আসলে থাকার জন্য কুখ্যাত হয় সংশোধন না যে মেমরি তথ্য ফাঁসের. 158 00:07:39,150 --> 00:07:44,570 আর যদি আপনার ব্রাউজার সাপোর্ট খোলা ছেড়ে যদি একটা সময় খুব দীর্ঘ সময়ের জন্য, দিন 159 00:07:44,570 --> 00:07:48,060 এবং দিন, অথবা সপ্তাহের, আপনি মাঝে মাঝে আপনার সিস্টেম যে লক্ষ্য করা হতে পারে 160 00:07:48,060 --> 00:07:49,790 সত্যিই ধীরে ধীরে, সত্যিই চলমান হয়. 161 00:07:49,790 --> 00:07:54,640 আর এর কারণ যে হয় ব্রাউজার, মেমরি বরাদ্দ করেছে 162 00:07:54,640 --> 00:07:57,320 কিন্তু তারপর সিস্টেম বলা না যে এটা দিয়ে কাজ করে. 163 00:07:57,320 --> 00:08:01,000 আর তাই যে কম মেমরি ছেড়ে আপনার অন্য সব প্রোগ্রামের জন্য উপলব্ধ 164 00:08:01,000 --> 00:08:04,480 কারণ আপনি, শেয়ার আছে যে ওয়েব ব্রাউজার leaking-- 165 00:08:04,480 --> 00:08:06,755 প্রোগ্রাম মেমরি লিক করছে. 166 00:08:06,755 --> 00:08:08,880 আমরা ফিরে মেমরি দিতে না কিভাবে আমরা এটা দিয়ে পেরেছ? 167 00:08:08,880 --> 00:08:10,838 ওয়েল সৌভাগ্যবশত এটি একটি এটা খুব সহজ উপায়. 168 00:08:10,838 --> 00:08:11,710 আমরা শুধু এটা বিনামূল্যে. 169 00:08:11,710 --> 00:08:15,020 ফ্রি নামক একটি ফাংশন আছে, এটি মেমরি থেকে একটি পয়েন্টার গ্রহণ 170 00:08:15,020 --> 00:08:16,010 এবং আমরা যেতে ভাল. 171 00:08:16,010 --> 00:08:18,310 >> সুতরাং আসুন আমরা এ করছি বলা যাক আমাদের প্রোগ্রাম মাঝখানে, 172 00:08:18,310 --> 00:08:21,970 আমরা 50 অক্ষর malloc করতে চান. 173 00:08:21,970 --> 00:08:25,710 আমরা যে একটি অ্যারের malloc করতে চান 50 অক্ষর ধারণ করতে সক্ষম. 174 00:08:25,710 --> 00:08:29,109 আর আমরা ফিরে একটি পয়েন্টার পেতে হলে যে, যে পয়েন্টার এর নামের শব্দ হয়. 175 00:08:29,109 --> 00:08:30,900 আমরা যাই হোক না কেন না শব্দ দিয়ে কি করতে যাচ্ছি, 176 00:08:30,900 --> 00:08:33,440 এবং তারপর আমরা যখন আমরা শুধু এটা বিনামূল্যে সম্পন্ন. 177 00:08:33,440 --> 00:08:37,460 আর এখন আমরা যারা 50 ফিরে আছে ফিরে সিস্টেম মেমরি বাইট. 178 00:08:37,460 --> 00:08:40,147 অন্য কিছু ফাংশন ব্যবহার করতে পারেন. 179 00:08:40,147 --> 00:08:43,480 আমরা একটি সহন সম্পর্কে চিন্তা করতে হবে না মেমরি লিক আমরা শব্দ মুক্ত করেছে. 180 00:08:43,480 --> 00:08:46,639 আমরা ফিরে মেমরি দিয়েছি, তাই আমরা এটা নিয়ে কাজ সম্পন্ন করেছেন. 181 00:08:46,639 --> 00:08:48,430 সুতরাং তিনটি আছে যে উচিত গোল্ডেন নিয়ম 182 00:08:48,430 --> 00:08:51,700 আপনি যখনই মনে রাখতে হবে পরিবর্তনশীল মেমরি বণ্টন 183 00:08:51,700 --> 00:08:52,990 malloc সঙ্গে. 184 00:08:52,990 --> 00:08:56,480 মেমরি প্রতি ব্লক যে আপনি malloc মুক্ত করা হবে 185 00:08:56,480 --> 00:08:58,430 আপনার প্রোগ্রাম আগে চলমান সম্পন্ন না. 186 00:08:58,430 --> 00:09:02,029 এখন আবার, গৃহ বা এ আইডিই এই ধরণের জন্য যাইহোক ঘটবে 187 00:09:02,029 --> 00:09:04,820 পৌছে দিতে যখন এই যে কোনভাবে ঘটবে আপনার প্রোগ্রাম বাতিল করা হলে, 188 00:09:04,820 --> 00:09:06,880 সব স্মৃতি প্রকাশ করা হবে. 189 00:09:06,880 --> 00:09:10,750 কিন্তু এটা সাধারণত ভাল কোডিং এর অনুশীলন সবসময়, যখন আপনি কাজ করছেন, 190 00:09:10,750 --> 00:09:13,810 আপনি mallocd আছে কি মুক্ত. 191 00:09:13,810 --> 00:09:16,690 >> তাই বলা হয়, শুধুমাত্র কিছু যে আপনি mallocd মুক্ত করা উচিত করেছি. 192 00:09:16,690 --> 00:09:19,880 আপনি স্ট্যাটিক্যালি ঘোষণা করে একটি পূর্ণসংখ্যা, int x এর সেমিকোলন, 193 00:09:19,880 --> 00:09:23,500 যে স্ট্যাকের উপর বসবাস, আপনি তারপর X মুক্ত করতে চাই না. 194 00:09:23,500 --> 00:09:25,970 আপনি করেছি, যাতে কিছু mallocd মুক্ত করতে হবে. 195 00:09:25,970 --> 00:09:28,960 >> এবং সর্বশেষে, দুইবার না ফ্রি কিছু না. 196 00:09:28,960 --> 00:09:31,170 যে হতে পারে অন্য অদ্ভুত পরিস্থিতি. 197 00:09:31,170 --> 00:09:33,530 আপনি করেছি, যাতে সবকিছু mallocd মুক্ত করা হয়েছে. 198 00:09:33,530 --> 00:09:36,000 আপনি করেছি যে শুধু কিছু যদি malloc মুক্ত করতে হবে. 199 00:09:36,000 --> 00:09:38,730 এবং দুইবার না ফ্রি কিছু না. 200 00:09:38,730 --> 00:09:43,660 >> সুতরাং আসুন এখানে একটি উদাহরণ দিয়ে যেতে দেওয়া কিছু পরিবর্তনশীল বরাদ্দ কি 201 00:09:43,660 --> 00:09:46,122 মেমরি মিশ্র অনুরূপ হতে পারে কিছু স্ট্যাটিক মেমরির মধ্যে. 202 00:09:46,122 --> 00:09:47,080 এখানে কি ঘটতে পারে? 203 00:09:47,080 --> 00:09:48,913 আপনি অনুসরণ করতে পারেন দেখুন বরাবর এবং কি অনুমান 204 00:09:48,913 --> 00:09:51,720 হিসাবে আমরা যেতে ঘটতে যাচ্ছে কোড সব এই লাইনের মাধ্যমে. 205 00:09:51,720 --> 00:09:53,980 >> তাই আমরা int এম বলতে. 206 00:09:53,980 --> 00:09:54,840 এখানে কি হয়? 207 00:09:54,840 --> 00:09:56,339 আচ্ছা এই বেশ সহজবোধ্য. 208 00:09:56,339 --> 00:09:59,650 আমি এম নামক একটি পূর্ণসংখ্যা পরিবর্তনশীল তৈরি. 209 00:09:59,650 --> 00:10:01,400 আমি এটি সবুজ রঙ যে রঙ কারণ 210 00:10:01,400 --> 00:10:03,730 আমি কথা বলছি যখন আমি ব্যবহার করে সম্পর্কে পূর্ণসংখ্যা ভেরিয়েবল. 211 00:10:03,730 --> 00:10:05,160 এটি একটি বক্স. 212 00:10:05,160 --> 00:10:08,400 এটা আপনি করতে পারেন এম বলা হয়, এবং এর এটি ভেতরে দোকান ইন্টিজার. 213 00:10:08,400 --> 00:10:12,400 >> আমি তখন একটি int তারকা বলি? 214 00:10:12,400 --> 00:10:13,530 ভাল যে প্রায় অনুরূপ. 215 00:10:13,530 --> 00:10:15,780 আমি একটি বাক্সে একটি বলা তৈরি করছি. 216 00:10:15,780 --> 00:10:19,100 এটি ধারণ কোন int করতে সক্ষম বড়, ইন্টিজার পয়েন্টার. 217 00:10:19,100 --> 00:10:21,570 তাই আমি পাশাপাশি এটা সবুজ পর ভাব করছি. 218 00:10:21,570 --> 00:10:24,140 >> আমি এটা কিছু আছে জানি একটি পূর্ণসংখ্যা সঙ্গে কাজ করতে, 219 00:10:24,140 --> 00:10:25,852 কিন্তু এটি একটি পূর্ণসংখ্যা না নিজেই. 220 00:10:25,852 --> 00:10:27,310 কিন্তু এটা অনেক সুন্দর একই ধারণা. 221 00:10:27,310 --> 00:10:28,101 আমি একটি বাক্স তৈরি করেছি. 222 00:10:28,101 --> 00:10:30,070 এই অধিকার উভয় এখন স্ট্যাক বাস. 223 00:10:30,070 --> 00:10:32,520 আমি তাদের উভয় নাম দিয়েছি. 224 00:10:32,520 --> 00:10:36,750 >> কোন int তারকা বি int এর malloc আকার সমান. 225 00:10:36,750 --> 00:10:38,560 এই এক একটি সামান্য চতুর হতে পারে. 226 00:10:38,560 --> 00:10:44,110 কয়েক সেকেন্ড সময় নিন এবং আপনি কি আমার মনে হয় এই চিত্রটি উপর ঘটতে আশা করবে. 227 00:10:44,110 --> 00:10:50,210 কোন int তারকা বি int এর malloc আকার সমান. 228 00:10:50,210 --> 00:10:51,940 >> আচ্ছা এই মাত্র এক বাক্স তৈরি করে না. 229 00:10:51,940 --> 00:10:53,800 এটি আসলে দুটি বক্স তৈরি করে. 230 00:10:53,800 --> 00:10:58,670 এবং এটা এছাড়াও স্থাপন, বন্ধন একটি সম্পর্কের মধ্যে একটি বিন্দু. 231 00:10:58,670 --> 00:11:02,240 আমরা এক ব্লক বরাদ্দ করেছি গাদা মেমরি. 232 00:11:02,240 --> 00:11:05,940 লক্ষ্য করুন উপরের ডান বক্সে যে একটি নাম আছে তা নয়. 233 00:11:05,940 --> 00:11:06,760 >> আমরা এটা mallocd. 234 00:11:06,760 --> 00:11:08,050 গাদা উপর বিদ্যমান. 235 00:11:08,050 --> 00:11:10,090 কিন্তু বি একটি নাম আছে. 236 00:11:10,090 --> 00:11:11,950 এটি বি নামক একটি পয়েন্টার পরিবর্তনশীল. 237 00:11:11,950 --> 00:11:13,910 যে স্ট্যাকের উপর বসবাস. 238 00:11:13,910 --> 00:11:18,250 >> সুতরাং এটি একটি মেমরি টুকরা অন্য যে এক পয়েন্ট. 239 00:11:18,250 --> 00:11:21,840 বি অঙ্ক রয়েছে মেমরি যে ব্লক. 240 00:11:21,840 --> 00:11:23,757 এটা অন্যথায় একটি নাম নেই. 241 00:11:23,757 --> 00:11:24,590 কিন্তু এটা স্থানটিকে. 242 00:11:24,590 --> 00:11:29,760 তাই আমরা int তারকা বি সমান বলে যখন int এর malloc আকার, ঠিক আছে যে, 243 00:11:29,760 --> 00:11:33,490 popped আপ যে তীর সেখানে ডান দিকে, যে গোটা ব্যাপারটাই, 244 00:11:33,490 --> 00:11:36,740 আমি এটি প্রদর্শিত হবে আবার কি ঘটবে. 245 00:11:36,740 --> 00:11:39,341 যে সব ঘটবে কোড যে একক লাইন. 246 00:11:39,341 --> 00:11:41,340 এখন আমরা একটু বেশি পাবেন আবার সহজবোধ্য. 247 00:11:41,340 --> 00:11:43,330 একটি এম্পারসেন্ড এম সমান. 248 00:11:43,330 --> 00:11:46,280 আপনি কি একটি প্রত্যাহার না এম্পারসেন্ড মিটার সমান? 249 00:11:46,280 --> 00:11:48,920 এটা একটা এম এর ঠিকানা পায়. 250 00:11:48,920 --> 00:11:54,150 অথবা, আরও diagrammatically করা এম একটি পয়েন্ট. 251 00:11:54,150 --> 00:11:56,360 >> একটি বি সমান. 252 00:11:56,360 --> 00:11:57,560 ঠিক আছে, তাই এখানে অন্য এক. 253 00:11:57,560 --> 00:11:59,230 একটি বি সমান. 254 00:11:59,230 --> 00:12:02,260 কি ঘটতে যাচ্ছে চিত্রটি এই সময়? 255 00:12:02,260 --> 00:12:04,330 >> ওয়েল প্রত্যাহার নিয়োগ অপারেটর কাজ 256 00:12:04,330 --> 00:12:08,960 মান বরাদ্দ করে ডান বাম মান. 257 00:12:08,960 --> 00:12:14,820 মি সুতরাং পরিবর্তে একটি নির্দেশ, একটি এখন বি পয়েন্ট যে একই জায়গায় স্থানটিকে. 258 00:12:14,820 --> 00:12:18,900 একটি, একটি বো দিকে নির্দেশ করে না যেখানে বি পয়েন্ট পয়েন্ট. 259 00:12:18,900 --> 00:12:25,280 >> একটি সরু যে বো তাহলে would একটি এম্পারসেন্ড বি সমান হয়েছে. 260 00:12:25,280 --> 00:12:28,150 কিন্তু এর পরিবর্তে একটি মাত্র বি সমান এর মানে হল যে ও বি এখন 261 00:12:28,150 --> 00:12:31,770 একই ঠিকানায় কারণ ইশারা বি ভেতরে শুধু একটি ঠিকানা থাকে. 262 00:12:31,770 --> 00:12:35,004 এবং এখন একটি ভেতরে একই ঠিকানা. 263 00:12:35,004 --> 00:12:37,170 এম সম্ভবত, 10 সমান সবচেয়ে সহজবোধ্য জিনিস 264 00:12:37,170 --> 00:12:38,690 আমরা অল্প কাজ করেছি. 265 00:12:38,690 --> 00:12:40,460 বক্সে 10 রাখুন. 266 00:12:40,460 --> 00:12:45,640 রাশি বি এম সমান প্লাস 2, থেকে প্রত্যাহার আমাদের পয়েন্টার ভিডিও কি তারকা বি মানে. 267 00:12:45,640 --> 00:12:50,230 আমরা dereference B এবং রাখা চলুন যে মেমরি অবস্থানে কিছু মান. 268 00:12:50,230 --> 00:12:51,860 এই ক্ষেত্রে 12 সালে. 269 00:12:51,860 --> 00:12:55,300 >> সুতরাং যখন আমরা একটি বিন্দু ডি-রেফারেন্স আমরা শুধু তীর নিচে ভ্রমণ প্রত্যাহার. 270 00:12:55,300 --> 00:12:58,205 বা অন্য উপায় করা, আমরা যে মেমরি ঠিকানায় যান 271 00:12:58,205 --> 00:12:59,580 এবং আমরা কিছু উপায়ে তা নিপূণভাবে. 272 00:12:59,580 --> 00:13:00,830 আমরা সেখানে কিছু মান করা. 273 00:13:00,830 --> 00:13:03,960 এই ক্ষেত্রে তারা বি ইন এম সমান প্লাস 2 শুধু হয় 274 00:13:03,960 --> 00:13:08,230 পরিবর্তনশীল যান, বি দ্বারা জোরাল মেমরি যান, বি দ্বারা জোরাল 275 00:13:08,230 --> 00:13:11,750 এবং 12, সেখানে এম প্লাস 2 করা. 276 00:13:11,750 --> 00:13:14,970 >> এখন আমি বি মুক্ত. 277 00:13:14,970 --> 00:13:16,490 আমি বি মুক্ত হলে কি হবে? 278 00:13:16,490 --> 00:13:18,800 আমি ফ্রি মানে আমি কি বলেছিলাম. 279 00:13:18,800 --> 00:13:21,920 আমি বি মুক্ত যখন আমি কি বলার অপেক্ষা রাখে না? 280 00:13:21,920 --> 00:13:23,410 >> আমি এটা দিয়ে কাজ আছে, কাজ করছি? 281 00:13:23,410 --> 00:13:25,702 আমি মূলত মেমরি ছেড়ে দিতে. 282 00:13:25,702 --> 00:13:26,910 আমি সিস্টেমে এটি ফিরিয়ে দিতে. 283 00:13:26,910 --> 00:13:33,010 আমি এই আর প্রয়োজন হয় না কি আমি ঠিক আছে, তাদের বলছি? 284 00:13:33,010 --> 00:13:37,390 >> এখন আমি যদি বলি তারা একটি 11 আপনি সম্ভবত পারেন সমান 285 00:13:37,390 --> 00:13:40,460 ইতিমধ্যে খারাপ যে কিছু বলতে ঠিক আছে, এখানে ঘটতে যাচ্ছে? 286 00:13:40,460 --> 00:13:44,160 আর আমি যে সম্ভবত চেষ্টা প্রকৃতপক্ষে যদি একটি সেগমেন্টেশন ফল্ট ভুগতে হবে. 287 00:13:44,160 --> 00:13:47,140 এখন যেহেতু, যদিও মেমরি পূর্বে যে তাল 288 00:13:47,140 --> 00:13:50,220 আমি ছিল যে ছিল কিছু এই সময়ে অ্যাক্সেস, 289 00:13:50,220 --> 00:13:54,590 এখন আমি মেমরি অ্যাক্সেস করছি যে আমার অ্যাক্সেস করার জন্য আইনি নয়. 290 00:13:54,590 --> 00:13:57,330 >> এবং হিসাবে আমরা সম্ভবত হবে আমরা মেমরি অ্যাক্সেস যখন, প্রত্যাহার 291 00:13:57,330 --> 00:14:00,000 আমরা স্পর্শ করতে অনুমিত করছি না যে, যে সবচেয়ে সাধারণ কারণ হচ্ছে 292 00:14:00,000 --> 00:14:01,860 একটি সেগমেন্টেশন এর দোষ. আর তাই আমার প্রোগ্রাম 293 00:14:01,860 --> 00:14:05,170 আমি এই কাজ করতে চেষ্টা যদি বিপর্যস্ত হবে. 294 00:14:05,170 --> 00:14:09,910 তাই আবার এটা ভাল পেতে একটা ভাল ধারণা অনুশীলন এবং ভাল অভ্যাস বদ্ধমূল 295 00:14:09,910 --> 00:14:12,920 malloc এবং বিনামূল্যে সঙ্গে যখন কাজ, তাই আপনি সেগমেন্টেশন ভোগেন না যে 296 00:14:12,920 --> 00:14:15,310 আপনি ব্যবহার, এবং যে ফল্ট আপনার পরিবর্তনশীল বরাদ্দ 297 00:14:15,310 --> 00:14:17,370 মেমরি দায়িত্বের. 298 00:14:17,370 --> 00:14:20,300 >> আমি ডগ লয়েড আছি এই CS50. 299 00:14:20,300 --> 00:14:21,947