Notes in Hindi

free() Function in Hindi

/ BCA / Programming with C and CPP

free() Function in C Explained in Hindi

free() Function in Hindi

Introduction of free() Function in Hindi

C भाषा में जब हम dynamic memory allocation करते हैं, जैसे कि malloc(), calloc() या realloc() का उपयोग करके memory allocate करते हैं, तब वह memory manually allocate होती है। इसका मतलब यह है कि वह memory तब तक RAM में बनी रहती है जब तक हम उसे खुद से release नहीं कर देते। इसी काम के लिए C language में free() function दिया गया है।

यदि हम उस allocated memory को release नहीं करेंगे तो हमारी application में memory leak हो सकता है, जिससे system की performance पर असर पड़ेगा। इसलिए हर programmer के लिए free() function का सही उपयोग जानना बहुत जरूरी होता है।

Understanding free() Function in Hindi

free() function का उपयोग dynamically allocated memory को deallocate करने के लिए किया जाता है। यह function stdlib.h header file में define किया गया होता है। जब हम malloc() या calloc() से memory allocate करते हैं, तब हमें एक pointer return होता है जो उस memory को point करता है। उसी pointer को free() function में pass करके memory को release किया जाता है।

  • Syntax: free(pointer_name);
  • Header File: #include <stdlib.h>

Example of free() Function

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

int main() {
  int *ptr;
  ptr = (int *)malloc(5 * sizeof(int));

  if (ptr == NULL) {
    printf("Memory not allocated");
    return 1;
  }

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

  for (int i = 0; i < 5; i++) {
    printf("%d ", ptr[i]);
  }

  free(ptr); // Memory को free करना
  return 0;
}

ऊपर के उदाहरण में हमने 5 integers के लिए memory allocate की और बाद में free() function का use करके उसे deallocate कर दिया।

Releasing Memory using free() Function in Hindi

जब हम memory को allocate करते हैं, तब वह heap memory में store होती है। इस heap memory को OS तब तक release नहीं करता जब तक हम manually उसे release न करें। इसी कारण से हमें हर dynamic memory allocation के बाद उस memory को free() function द्वारा release करना चाहिए। यह एक best practice है जो memory leak को रोकने में मदद करता है।

What happens if we don’t use free()?

  • Memory continuously use होती रहती है।
  • System की performance धीरे-धीरे खराब होती है।
  • Program crash भी हो सकता है अगर बहुत ज्यादा memory leak हो जाए।

Multiple Pointers और free()

अगर आपने एक से ज्यादा pointers से memory allocate की है, तो हर pointer को अलग-अलग free() करना होगा। एक ही pointer को दो बार free() नहीं करना चाहिए, वरना undefined behavior हो सकता है।

int *p1 = malloc(10 * sizeof(int));
int *p2 = malloc(20 * sizeof(int));

free(p1);
free(p2); // दोनों को अलग-अलग free किया गया है

Important Points:

  • free() function सिर्फ dynamically allocated memory पर काम करता है।
  • Statically allocated memory (जैसे arrays) को free नहीं किया जा सकता।
  • अगर pointer NULL है, तो free(NULL) करने से कोई error नहीं आती।

Wrong Use of free()

int a = 10;
int *ptr = &a;
free(ptr); // ❌ गलत तरीका: यह static memory है, इसे free नहीं किया जा सकता

Best Practices of free() Function in Hindi

  • 1. Memory allocation के बाद हमेशा check करें:
    if (ptr == NULL) से check करें कि memory मिली है या नहीं।
  • 2. Memory को use करने के बाद उसे free करें:
    जैसे ही pointer का काम खत्म हो जाए, उसे free कर दें।
  • 3. Pointer को NULL set करें:
    Memory free करने के बाद pointer को NULL set कर दें ताकि accidental access ना हो।
    free(ptr); ptr = NULL;
  • 4. Double Freeing से बचें:
    एक ही pointer को दो बार free() नहीं करना चाहिए।
  • 5. Complex data structures में हर memory block को individually free करें:
    जैसे अगर आपने nested memory allocate की है (2D array, Linked List), तो हर level को अलग-अलग free() करें।

Table: Static vs Dynamic Memory

Feature Static Memory Dynamic Memory
Memory Allocation Compile Time Run Time
Control Compiler करता है Programmer को control होता है
Reusability Fixed Size Flexible Size
Free करने की जरूरत नहीं हां, free() जरूरी है

free() Function और Memory Leak

यदि आप dynamically allocate की गई memory को free नहीं करते तो वो memory आपके program के end तक occupied रहती है, चाहे उसका use हो या नहीं। यही memory leak कहलाता है। जब memory leak ज़्यादा हो जाती है, तो program slow या crash होने लगता है। इसलिए हर malloc(), calloc(), या realloc() के बाद, आपको free() का use जरूर करना चाहिए।

Nested Allocation में free() कैसे करें?

मान लीजिए आपने एक 2D array के लिए memory allocate की है:

int **arr = malloc(rows * sizeof(int *));
for (int i = 0; i < rows; i++) {
  arr[i] = malloc(cols * sizeof(int));
}

for (int i = 0; i < rows; i++) {
  free(arr[i]);
}
free(arr);

ऊपर दिए गए उदाहरण में पहले हर row को individually free किया गया और बाद में main array को। यही सही तरीका होता है nested memory को free करने का।

Summary in Points

  • free() function C language में dynamically allocated memory को release करने के लिए प्रयोग होता है।
  • यह function stdlib.h में define होता है।
  • Memory leak से बचने के लिए हर allocation के बाद सही जगह पर free() जरूरी है।
  • Free करने के बाद pointer को NULL set कर देना चाहिए।
  • Static memory को free नहीं किया जा सकता।

FAQs

free() function C भाषा में एक standard library function है जिसका उपयोग dynamically allocate की गई memory को manually deallocate करने के लिए किया जाता है। यह memory leak से बचाने में मदद करता है और stdlib.h header file में मौजूद होता है।

जब हम malloc() से memory allocate करते हैं, तो वह heap में जाती है और तब तक reserved रहती है जब तक उसे manually free() से release न किया जाए। अगर हम free() नहीं करेंगे तो memory leak हो सकता है जिससे program slow या crash हो सकता है।

नहीं, free() function केवल dynamically allocate की गई memory पर ही काम करता है। यदि आप किसी static या automatic variable पर free() का प्रयोग करेंगे तो undefined behavior होगा और यह program crash कर सकता है।

एक ही pointer को दो बार free() करना एक serious programming error होता है जिसे double free error कहा जाता है। यह undefined behavior पैदा कर सकता है और कई बार segmentation fault या crash का कारण बन सकता है। इसलिए हमेशा memory को free() करने के बाद pointer को NULL कर देना चाहिए।

free() function का उपयोग करने के बाद हमेशा उस pointer को NULL set कर देना चाहिए ताकि accidental memory access से बचा जा सके। इससे double free जैसी error से भी बचा जा सकता है और debugging भी आसान हो जाती है।

Please Give Us Feedback