আপনি যে মেমরিটি ব্যবহার করতে হবে তার সঠিক আকারটি যদি আপনি না জানেন তবে আপনার গতিশীল বরাদ্দ প্রয়োজন ( malloc)। উদাহরণস্বরূপ হতে পারে যখন কোনও ব্যবহারকারী আপনার অ্যাপ্লিকেশনটিতে একটি ফাইল খুলবে। আপনাকে ফাইলের বিষয়বস্তু মেমরির মধ্যে পড়তে হবে, তবে অবশ্যই আপনি ফাইলটির আকার আগেই জানেন না, যেহেতু ব্যবহারকারী রানটাইমের সময় স্পটটিতে ফাইলটি নির্বাচন করে। সুতরাং মূলত আপনার প্রয়োজন mallocযখন আপনি অগ্রিম কাজ করছেন যে ডেটা আকার জানেন না। অন্তত এটি ব্যবহারের অন্যতম প্রধান কারণ malloc। আপনার উদাহরণটিতে একটি সাধারণ স্ট্রিং সহ যা আপনি ইতিমধ্যে সংকলনের সময়টির আকারটি জানেন (প্লাস আপনি এটি সংশোধন করতে চান না), এটি গতিশীলরূপে বরাদ্দ করতে খুব বেশি অর্থবোধ করে না।
সামান্য সামান্য অফ-টপিক, তবে ... আপনাকে ব্যবহার করার সময় মেমরি ফাঁস তৈরি না করার জন্য আপনাকে খুব যত্নবান হতে হবে malloc। এই কোডটি বিবেচনা করুন:
int do_something() {
uint8_t* someMemory = (uint8_t*)malloc(1024);
if ( ) return -1;
free(someMemory);
return result;
}
আপনি কি দেখতে পান যে এই কোডটিতে কী সমস্যা আছে? তার মাঝে একটি শর্তাধীন প্রত্যাবর্তন বিবৃতি mallocএবং free। এটি প্রথমে ঠিক মনে হতে পারে তবে এটি সম্পর্কে চিন্তা করুন। যদি কোনও ত্রুটি হয় তবে আপনি বরাদ্দ করা মেমরিটি ছাড়াই আপনি ফিরে যাচ্ছেন। এটি মেমরি ফাঁসের একটি সাধারণ উত্স।
অবশ্যই এটি খুব সহজ উদাহরণ, এবং ভুলটি এখানে দেখতে খুব সহজ, তবে পয়েন্টার, mallocগুলি, freeএস এবং সমস্ত ধরণের ত্রুটি পরিচালনার সাহায্যে শত শত লাইন কোড লিটারের কল্পনা করুন । জিনিসগুলি সত্যই দ্রুত অগোছালো হয়ে উঠতে পারে। প্রযোজ্য ক্ষেত্রে আমি সি -++ এর চেয়ে বেশি আধুনিক সি +++ পছন্দ করি এটির একটি কারণ, তবে এটি সম্পূর্ণ নোটার বিষয়।
সুতরাং আপনি যখনই ব্যবহার করবেন malloc, সর্বদা নিশ্চিত করুন যে আপনার মেমরিটি freeযতটা সম্ভব সম্ভব be
malloc()পারেন না যে তারা ব্যর্থ হতে পারে!