C লাইব্রেরি মেমরি বরাদ্দকরণ ফাংশন void *malloc(size_t size) অনুরোধ করা মেমরি বরাদ্দ করে এবং এটিতে একটি পয়েন্টার ফেরত দেয়।
মেমরি বরাদ্দ ফাংশন
মেমরি দুটি উপায়ে বরাদ্দ করা যেতে পারে যেমন নীচে ব্যাখ্যা করা হয়েছে −
একবার কম্পাইলের সময় মেমরি বরাদ্দ করা হলে, এটি কার্যকর করার সময় পরিবর্তন করা যাবে না। হয় অপর্যাপ্ততার সমস্যা হবে নয়তো স্মৃতির অপচয় হবে।
সমাধান হল মেমরিকে গতিশীলভাবে তৈরি করা, অর্থাৎ প্রোগ্রাম চালানোর সময় ব্যবহারকারীর প্রয়োজন অনুযায়ী।
ডায়নামিক মেমরি ম্যানেজমেন্টের জন্য ব্যবহৃত স্ট্যান্ডার্ড লাইব্রেরি ফাংশনগুলি নিম্নরূপ -
- malloc ( )
- calloc ( )
- realloc ( )
- মুক্ত ( )
Malloc() ফাংশন
রানটাইমে বাইটে মেমরির একটি ব্লক বরাদ্দ করার জন্য এই ফাংশনটি ব্যবহার করা হয়। এটি একটি অকার্যকর পয়েন্টার প্রদান করে, যা বরাদ্দকৃত মেমরির মূল ঠিকানা নির্দেশ করে।
malloc() এর সিনট্যাক্স নিম্নরূপ −
void *malloc (size in bytes)
উদাহরণ 1
নিম্নলিখিত উদাহরণটি malloc() ফাংশনের ব্যবহার দেখায়।
int *ptr; ptr = (int * ) malloc (1000); int *ptr; ptr = (int * ) malloc (n * sizeof (int));
দ্রষ্টব্য - এটি NULL প্রদান করে, যদি মেমরি বিনামূল্যে না হয়।
উদাহরণ প্রোগ্রাম
ডায়নামিক মেমরি বরাদ্দকরণ ফাংশন প্রদর্শনের জন্য সি প্রোগ্রামটি নীচে দেওয়া হল - malloc()।
#include<stdio.h> #include<stdlib.h> void main(){ //Declaring variables and pointer// int numofele,i; int *p; //Reading elements as I/p// printf("Enter the number of elements in the array: "); scanf("%d",&numofele); //Declaring malloc function// p = (int *)malloc(numofele * (sizeof(int))); //Reading elements into array of pointers// for(i=0;i<numofele;i++){ p[i]=i+1; printf("Element %d of array is : %d\n",i,p[i]); } }
আউটপুট
যখন উপরের প্রোগ্রামটি কার্যকর করা হয়, তখন এটি নিম্নলিখিত ফলাফল তৈরি করে -
Enter the number of elements in the array: 4 Element 0 of array is : 1 Element 1 of array is : 2 Element 2 of array is : 3 Element 3 of array is : 4
উদাহরণ 2
ডায়নামিক মেমরি বরাদ্দকরণ ফাংশন -
ব্যবহার করে উপাদানগুলি প্রদর্শন করার জন্য C প্রোগ্রামটি নিম্নরূপপ্রথম পাঁচটি ব্লক খালি হওয়া উচিত, দ্বিতীয় পাঁচটি ব্লকে যুক্তি থাকা উচিত।
#include<stdio.h> #include<stdlib.h> void main(){ //Declaring variables and pointers,sum// int numofe,i,sum=0; int *p; //Reading number of elements from user// printf("Enter the number of elements : "); scanf("%d",&numofe); //Calling malloc() function// p=(int *)malloc(numofe*sizeof(int)); /*Printing O/p - We have to use if statement because we have to check if memory has been successfully allocated/reserved or not*/ if (p==NULL){ printf("Memory not available"); exit(0); } //Printing elements// printf("Enter the elements : \n"); for(i=0;i<numofe;i++){ scanf("%d",p+i); sum=sum+*(p+i); } printf("\nThe sum of elements is %d",sum); free(p);//Erase first 2 memory locations// printf("\nDisplaying the cleared out memory location : \n"); for(i=0;i<numofe;i++){ printf("%d\n",p[i]);//Garbage values will be displayed// } }
আউটপুট
যখন উপরের প্রোগ্রামটি কার্যকর করা হয়, তখন এটি নিম্নলিখিত ফলাফল তৈরি করে -
Enter the number of elements : 5 Enter the elements : 12 10 24 45 67 The sum of elements is 158 Displaying the cleared out memory location : 7804032 0 7799120 0 67