সি ল্যাঙ্গুয়েজে, ভ্যায়েড পয়েন্টারগুলিকে অবজেক্ট পয়েন্টার টাইপে পরোক্ষভাবে রূপান্তর করা হয়। C89 স্ট্যান্ডার্ডে malloc() ফাংশন void * প্রদান করে। C এর পূর্ববর্তী সংস্করণে, malloc() char* প্রদান করে। C++ ভাষায়, ডিফল্টভাবে malloc() int মান প্রদান করে। সুতরাং, স্পষ্ট কাস্টিং ব্যবহার করে পয়েন্টারগুলিকে অবজেক্ট পয়েন্টারে রূপান্তর করা হয়।
C ভাষায় মেমরি বরাদ্দ করার সিনট্যাক্স নিচে দেওয়া হল।
pointer_name = malloc(size);
এখানে,
পয়েন্টার_নাম − পয়েন্টারকে দেওয়া যেকোনো নাম।
আকার − বাইটে বরাদ্দ করা মেমরির আকার।
নিম্নলিখিতটি সি ভাষায় 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++ ভাষায় মেমরি বরাদ্দ করার সিনট্যাক্স নিচে দেওয়া হল।
pointer_name = (cast-type*) malloc(size);
এখানে,
পয়েন্টার_নাম − পয়েন্টারকে দেওয়া যেকোনো নাম।
কাস্ট-টাইপ − যে ডেটাটাইপটিতে আপনি malloc().
দ্বারা বরাদ্দ করা মেমরি কাস্ট করতে চানআকার − বাইটে বরাদ্দ করা মেমরির আকার।
নিম্নলিখিতটি 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));