কম্পিউটার টিউটোরিয়াল

সি/সি++-এ malloc() বনাম new()


malloc()

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

সি++ ভাষায় malloc()-এর সিনট্যাক্স:

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

এখানে,

  • pointer_name − পয়েন্টারকে দেওয়া যেকোনো নাম।
  • cast-type − যে ডেটা টাইপে malloc() দ্বারা অ্যালোকেটেড মেমরি কাস্ট করতে চান।
  • size − বাইটে অ্যালোকেটেড মেমরির আকার।

সি ভাষায় 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);

new()

new অপারেটর হিপে মেমরি অ্যালোকেশনের জন্য অনুরোধ করে। যদি পর্যাপ্ত মেমরি উপলব্ধ থাকে, তবে এটি মেমরি পয়েন্টার ভেরিয়েবলে ইনিশিয়ালাইজ করে এবং এর অ্যাড্রেস রিটার্ন করে।

সি++ ভাষায় new অপারেটরের সিনট্যাক্স:

pointer_variable = new datatype;

মেমরি ইনিশিয়ালাইজ করার সিনট্যাক্স:

pointer_variable = new datatype(value);

ব্লক মেমরি অ্যালোকেট করার সিনট্যাক্স:

pointer_variable = new datatype[size];

সি++ ভাষায় new অপারেটরের উদাহরণ:

উদাহরণ

#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 new() ব্যবহার করে মান দিয়ে ইনিশিয়ালাইজ করা হয়েছে এবং ptr3 new() ফাংশন দ্বারা অ্যালোকেটেড মেমরি ব্লক সংরক্ষণ করছে।

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. AA ট্রি: C/C++-তে ব্যালেন্সড ট্রি ডেটা স্ট্রাকচার

  4. C++-এ new এবং delete অপারেটর