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

C++-এ malloc() কেন কাস্ট চায় কিন্তু C-এ চায় না?


C ভাষায়, void পয়েন্টারগুলো ইমপ্লিসিটলি অবজেক্ট পয়েন্টার টাইপে কনভার্ট হয়। malloc() ফাংশন C89 স্ট্যান্ডার্ডে void * ফেরত দেয়। C-এর পূর্বের ভার্সনে malloc() char * ফেরত দিত। C++ ভাষায়, ডিফল্টভাবে malloc() int মান ফেরত দেয়। তাই, পয়েন্টারগুলো এক্সপ্লিসিট কাস্টিং দিয়ে অবজেক্ট পয়েন্টারে কনভার্ট করতে হয়।

C ভাষায় মেমরি aloket করার সিনট্যাক্স নিচে দেওয়া হল।

pointer_name = malloc(size);

এখানে,

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

size − aloket করা মেমরির সাইজ বাইটে।

C ভাষায় malloc() এর একটি উদাহরণ নিচে দেওয়া হল।

উদাহরণ

#include <stdio.h>
#include <stdlib.h>

int main() {
    int n = 4, i, *p, s = 0;
    p = 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 : 2 28 12 32
Sum : 74

উপরের C ভাষার উদাহরণে, যদি আমরা এক্সপ্লিসিট কাস্টিং করি, তবে কোনো এরর দেখাবে না।

C++ ভাষায় মেমরি aloket করার সিনট্যাক্স নিচে দেওয়া হল।

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

এখানে,

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

cast-type − যে ডাটা টাইপে malloc() দিয়ে aloket করা মেমরি কাস্ট করতে চান।

size − aloket করা মেমরির সাইজ বাইটে।

C++ ভাষায় malloc() এর একটি উদাহরণ নিচে দেওয়া হল।

উদাহরণ

#include <iostream>
using namespace std;

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

আউটপুট

Enter elements of array : 28 65 3 8
Sum : 104

উপরের C++ উদাহরণে, যদি আমরা এক্সপ্লিসিট কাস্টিং না করি, তবে প্রোগ্রাম নিচের এররটি দেখাবে।

error: invalid conversion from 'void*' to 'int*' [-fpermissive] p = malloc(n * sizeof(int));

  1. বাইসেকশন মেথড (Bisection Method) C++ প্রোগ্রাম

  2. C++-এ মার্কভ 매ট্রিক্স প্রোগ্রাম

  3. C++-এ পিরামিডের ভলিউম বের করার প্রোগ্রাম

  4. C++-এ কুইকসর্ট (QuickSort) প্রোগ্রাম