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

সি-এ calloc() বনাম malloc()


calloc()

calloc() ফাংশন står for contiguous allocation। এটি malloc()-এর মতো কাজ করে কিন্তু একই আকারের একাধিক মেমরি ব্লক অ্যালোকেট করে।

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

void *calloc(size_t number, size_t size);

এখানে,

  • number − অ্যালোকেট করার অ্যারে এলিমেন্ট সংখ্যা।
  • size − বাইটে অ্যালোকেটেড মেমরির আকার।

সি ভাষায় calloc()-এর উদাহরণ:

উদাহরণ

#include <stdio.h>
#include <stdlib.h>
int main() {
    int n = 4, i, *p, s = 0;
    p = (int*) calloc(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 24 35 12
Sum : 73

উপরের প্রোগ্রামে মেমরি ব্লক calloc()-এ 의해 অ্যালোকেট করা হয়েছে। যদি পয়েন্টার ভেরিয়েবল NULL হয় তবে মেমরি অ্যালোকেশন নেই। যদি পয়েন্টার NULL না হয় তবে ইউজারকে অ্যারের চারটি এলিমেন্ট ইনপুট দিতে হবে এবং তারপর এলিমেন্টগুলোর যোগফল ক্যালকুলেট করা হবে।

p = (int*) calloc(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); }

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);

  1. ফ্রিওয়্যার বনাম শেয়ারওয়্যার: পার্থক্য কী?

  2. ফ্লাডিং (Flooding) বনাম ফিক্সড রাউটিং (Fixed Routing) অ্যালগরিদমের তুলনা

  3. সেটিংস এবং সিঙ্কিং: ফায়ারফক্স বনাম ক্রোম

  4. উইন্ডোজ ফোনে HERE, মাইক্রোসফট এবং উইন্ডোজ ম্যাপস তুলনা: সুবিধা, অসুবিধা এবং অফলাইন নেভিগেশন