কম্পিউটার

C/C++ এ malloc() বনাম new()


malloc()

ফাংশন malloc() বাইটের অনুরোধকৃত আকার বরাদ্দ করতে ব্যবহৃত হয় এবং এটি বরাদ্দকৃত মেমরির প্রথম বাইটে একটি পয়েন্টার প্রদান করে। ব্যর্থ হলে এটি নাল পয়েন্টার প্রদান করে।

এখানে C++ ভাষায় malloc() এর সিনট্যাক্স রয়েছে,

pointer_name = (cast-type*) malloc(size);

এখানে,

পয়েন্টার_নাম − পয়েন্টারকে দেওয়া যেকোনো নাম।

কাস্ট-টাইপ − যে ডেটাটাইপটিতে আপনি malloc().

দ্বারা বরাদ্দ করা মেমরি কাস্ট করতে চান

আকার − বাইটে বরাদ্দ করা মেমরির আকার।

এখানে C ভাষায় malloc() এর একটি উদাহরণ,

উদাহরণ

#include <stdio.h>
#include <stdlib.h>
int main() {
   int n = 4, i, *p, s = 0;
   p = (int*) malloc(n * sizeof(int));
   if(p == NULL) {
      printf("\nError! memory not allocated.");
      exit(0);
   }
   printf("\nEnter elements of array : ");
   for(i = 0; i < n; ++i) {
      scanf("%d", p + i);
      s += *(p + i);
   }
   printf("\nSum : %d", s);
   return 0;
}

এখানে আউটপুট,

Enter elements of array : 32 23 21 8
Sum : 84

উপরের প্রোগ্রামে, চারটি ভেরিয়েবল ঘোষণা করা হয়েছে এবং তাদের মধ্যে একটি হল একটি পয়েন্টার ভেরিয়েবল *p যা malloc দ্বারা বরাদ্দ করা মেমরি সংরক্ষণ করছে। আমরা উপাদানের যোগফল প্রিন্ট করছি।

int n = 4, i, *p, s = 0;
p = (int*) malloc(n * sizeof(int));
if(p == NULL) {
   printf("\nError! memory not allocated.");
   exit(0);
}
printf("\nEnter elements of array : ");
for(i = 0; i < n; ++i) {
   scanf("%d", p + i);
   s += *(p + i);
}
printf("\nSum : %d", s);

নতুন()

নতুন অপারেটর হিপে মেমরি বরাদ্দের জন্য অনুরোধ করে। পর্যাপ্ত মেমরি পাওয়া গেলে, এটি পয়েন্টার ভেরিয়েবলে মেমরি চালু করে এবং তার ঠিকানা ফেরত দেয়।

এখানে C++ ভাষায় নতুন অপারেটরের সিনট্যাক্স রয়েছে,

pointer_variable = new datatype;

এখানে মেমরি শুরু করার জন্য সিনট্যাক্স রয়েছে,

pointer_variable = new datatype(value);

এখানে মেমরির একটি ব্লক বরাদ্দ করার জন্য সিনট্যাক্স রয়েছে,

pointer_variable = new datatype[size];

এখানে C++ ভাষায় নতুন অপারেটরের একটি উদাহরণ দেওয়া হল,

উদাহরণ

#include <iostream>
using namespace std;
int main () {
   int *ptr1 = NULL;
   ptr1 = new int;
   float *ptr2 = new float(223.324);
   int *ptr3 = new int[28];
   *ptr1 = 28;
   cout << "Value of pointer variable 1 : " << *ptr1 << endl;
   cout << "Value of pointer variable 2 : " << *ptr2 << endl;
   if (!ptr3)
   cout << "Allocation of memory failed\n";
   else {
      for (int i = 10; i < 15; i++)
      ptr3[i] = i+1;

      cout << "Value to store in block of memory: ";
      for (int i = 10; i < 15; i++)
      cout << ptr3[i] << " ";
   }
   return 0;
}

আউটপুট

Value of pointer variable 1 : 28
Value of pointer variable 2 : 223.324
Value to store in block of memory: 11 12 13 14 15

উপরের প্রোগ্রামে, তিনটি পয়েন্টার ভেরিয়েবলকে ptr1, ptr2 এবং ptr3 হিসাবে ঘোষণা করা হয়েছে। পয়েন্টার ভেরিয়েবল ptr1 এবং ptr2 নতুন() ব্যবহার করে মান দিয়ে শুরু করা হয়েছে এবং ptr3 নতুন() ফাংশন দ্বারা মেমরির বরাদ্দকৃত ব্লক সংরক্ষণ করছে।

ptr1 = new int;
float *ptr2 = new float(223.324);
int *ptr3 = new int[28];
*ptr1 = 28;

  1. C/C++ এ putwchar() ফাংশন

  2. C/C++ এ memcpy()

  3. C/C++ এ AA গাছ?

  4. C++ এ নতুন এবং ডিলিট অপারেটর