Notes in Hindi

realloc() Function in Hindi

/ BCA / Programming with C and CPP

realloc() Function in Hindi

What is realloc() Function in Hindi

Introduction of realloc() Function

जब हम C या C++ जैसी भाषाओं में dynamic memory allocation करते हैं, तो हम ज़्यादातर तीन functions का उपयोग करते हैं: malloc(), calloc(), और realloc()। इनमें से realloc() function का उपयोग तब किया जाता है जब हमें पहले से allocate की गई memory को resize करना हो – यानी उसे बढ़ाना या घटाना हो।

इसे समझने के लिए एक real-life उदाहरण लेते हैं — मान लीजिए आपने 2 लोगों के बैठने की कुर्सियाँ बुक की थीं (2 blocks memory), लेकिन अब आपको 4 लोगों को बैठाना है, तो आपको और कुर्सियाँ जोड़नी होंगी। यही काम computer memory में realloc() function करता है।

Purpose of realloc()

  • पहले से allocate की गई memory को नया size देने के लिए।
  • Memory को दुबारा allocate करके उसमें पुराना data सुरक्षित रखना।
  • Program के समय के अनुसार memory की जरूरत बदलने पर उपयोगी होता है।

Header File

#include <stdlib.h>

realloc() function को use करने के लिए आपको stdlib.h header file को include करना होता है।

Syntax and Example of realloc() Function in Hindi

Syntax of realloc() Function

void *realloc(void *ptr, size_t new_size);
  • ptr: वो pointer है जो पहले से malloc() या calloc() के जरिए memory allocate कर चुका है।
  • new_size: नए memory block का size (bytes में) जिसे हम assign करना चाहते हैं।
  • return value: यह function एक नया pointer लौटाता है जो नई memory को point करता है। अगर memory allocate नहीं हो पाती तो NULL return करता है।

Simple Example of realloc() Function

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

int main() {
  int *ptr;
  int i;

  ptr = (int*) malloc(2 * sizeof(int));
  if (ptr == NULL) {
    printf("Memory not allocated.\n");
    exit(0);
  } else {
    ptr[0] = 10;
    ptr[1] = 20;
    printf("Before realloc:\n");
    for (i = 0; i < 2; i++)
      printf("%d ", ptr[i]);

    ptr = realloc(ptr, 4 * sizeof(int));
    ptr[2] = 30;
    ptr[3] = 40;
    printf("\nAfter realloc:\n");
    for (i = 0; i < 4; i++)
      printf("%d ", ptr[i]);

    free(ptr);
  }
  return 0;
}

Output

Before realloc:
10 20
After realloc:
10 20 30 40

Resizing Memory Block using realloc() Function in Hindi

Memory Resize कैसे काम करता है?

  • जब हम realloc() का उपयोग करते हैं, तो system कोशिश करता है कि existing memory block को नया size दे दे।
  • अगर पुरानी जगह में sufficient space नहीं होता, तो यह नया memory block allocate करता है और पुराना data उसमें copy कर देता है।
  • फिर पुराना block free कर दिया जाता है और नया pointer return होता है।

Important Points

  • अगर realloc() NULL return करता है तो इसका मतलब है कि नया memory allocation असफल रहा है।
  • हमेशा realloc से return हुआ नया pointer original pointer में assign करें, जैसे:
    ptr = realloc(ptr, new_size);
  • अगर आप सीधे पुराने pointer को realloc करते हैं और realloc fail हो जाता है, तो आपका original data भी खो सकता है। इसलिए एक temporary pointer में पहले store करना अच्छा तरीका है:
int *temp;
temp = realloc(ptr, new_size);
if (temp != NULL) {
  ptr = temp;
} else {
  // Error handling
}

Example: User-defined size

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

int main() {
  int *ptr, n, i;

  printf("Enter number of elements: ");
  scanf("%d", &n);

  ptr = (int*) malloc(n * sizeof(int));
  if (ptr == NULL) {
    printf("Memory allocation failed");
    exit(1);
  }

  for (i = 0; i < n; i++) {
    ptr[i] = i + 1;
  }

  printf("Original array:\n");
  for (i = 0; i < n; i++) {
    printf("%d ", ptr[i]);
  }

  printf("\nEnter new size: ");
  scanf("%d", &n);
  ptr = realloc(ptr, n * sizeof(int));

  for (i = 0; i < n; i++) {
    ptr[i] = i + 1;
  }

  printf("Resized array:\n");
  for (i = 0; i < n; i++) {
    printf("%d ", ptr[i]);
  }

  free(ptr);
  return 0;
}

Use Cases of realloc()

  • जब user से input के आधार पर memory size बार-बार बदलता हो।
  • जब हमें dynamic array बनाना हो और elements की संख्या पहले से तय न हो।
  • Memory का efficient उपयोग करने के लिए।

Advantages of realloc()

  • Memory को waste होने से बचाता है।
  • Program flexible और dynamic बनता है।
  • जितनी जरूरत हो, उतनी ही memory use होती है।

Disadvantages of realloc()

  • अगर सही तरीके से handle न किया जाए तो memory leak हो सकता है।
  • Old pointer overwrite हो सकता है अगर realloc fail हो जाए।
  • Performance थोड़ी सी slow हो सकती है अगर बार-बार realloc करना पड़े।

Note:

  • realloc() केवल malloc() या calloc() से allocate की गई memory पर ही काम करता है।
  • free() का उपयोग करके memory को program के अंत में जरूर free करें।

FAQs

realloc() function का उपयोग पहले से allocate की गई memory block का size बदलने के लिए किया जाता है। यह memory को बड़ा या छोटा कर सकता है और पुराना data सुरक्षित रखता है जब तक कि नई memory सफलतापूर्वक allocate हो जाए।
realloc() का syntax है: void *realloc(void *ptr, size_t new_size); जहाँ ptr पहले से allocated memory block का pointer होता है और new_size नए memory block का size होता है।
realloc() पहले कोशिश करता है कि existing memory को नया size दे दे। यदि संभव न हो तो यह नई memory allocate करता है, पुराने data को उसमें copy करता है और पुरानी memory को free कर देता है। फिर नया pointer return करता है।
यदि realloc() memory allocate नहीं कर पाता है तो यह NULL return करता है। इसलिए realloc से return हुए pointer को पहले एक temporary pointer में store करना चाहिए ताकि original memory का loss न हो।
नहीं, realloc() केवल उन memory blocks पर काम करता है जो पहले malloc() या calloc() द्वारा allocate किए गए हैं। बिना पहले memory allocate किए, realloc() undefined behavior दिखा सकता है।

Please Give Us Feedback