Dynamic Memory Allocation in Hindi
/ BCA / Programming with C and CPP
Dynamic Memory Allocation in C Explained in Hindi
Dynamic Memory Allocation in Hindi
Introduction to Dynamic Memory Allocation
Dynamic Memory Allocation का अर्थ होता है – program के चलते समय (runtime पर) memory को allocate करना। यानी जब हमारा program चल रहा होता है तब हम जरूरत के हिसाब से memory को assign करते हैं और जब जरूरत खत्म हो जाती है तो उसे वापस system को दे देते हैं।
C language में जब हम किसी variable को बनाते हैं जैसे int a; तब वह memory statically allocate होती है, यानी पहले से तय हो जाती है। लेकिन अगर हमें user से input लेकर बाद में memory बनानी हो या बड़ी size की array बनानी हो, जिसका size हमें पहले से ना पता हो – तब हमें Dynamic Memory Allocation की जरूरत होती है।
Why use Dynamic Memory Allocation?
- जब memory की जरूरत run time पर decide करनी हो।
- जब data structures जैसे linked list, tree, graph बनाना हो।
- जब memory की wastage से बचना हो।
- जब बड़ी size की array बनानी हो पर उसका size user input से तय करना हो।
Steps in Dynamic Memory Allocation in Hindi
Dynamic memory allocation के लिए C language में हमें चार main functions दिए गए हैं जो <stdlib.h> header file में होते हैं:
malloc()– memory allocate करता है।calloc()– memory allocate करता है और initialize भी करता है 0 से।realloc()– पहले से allocated memory का size बदलने के लिए।free()– allocated memory को release करने के लिए।
Using malloc() and calloc() Functions in Hindi
malloc() function
malloc() का पूरा नाम है "Memory Allocation". यह function runtime पर एक block की memory allocate करता है।
यह function void pointer return करता है जिसे हम typecast करके किसी भी data type के pointer में बदल सकते हैं।
Syntax:
ptr = (cast_type *) malloc(size_in_bytes);
Example:
int *ptr;
ptr = (int *) malloc(5 * sizeof(int));
इस example में हमने 5 integers के लिए memory allocate की है।
अगर sizeof(int) = 4 bytes है, तो total 5 × 4 = 20 bytes allocate होंगे।
अगर memory allocation successful नहीं होता तो malloc() NULL return करता है।
calloc() function
calloc() का पूरा नाम है "Contiguous Allocation". यह भी memory allocate करता है लेकिन ये सारे blocks को 0 से initialize कर देता है।
malloc() के विपरीत, calloc दो parameters लेता है – कितने blocks चाहिए और हर block का size क्या होगा।
Syntax:
ptr = (cast_type *) calloc(number_of_blocks, size_of_each_block);
Example:
int *ptr;
ptr = (int *) calloc(5, sizeof(int));
इसमें भी 5 integers के लिए memory allocate होगी और सभी values default 0 होंगी।
Freeing Memory using free() in Hindi
जब हम dynamically memory allocate करते हैं, तो वो memory तब तक occupy रहती है जब तक program खत्म न हो जाए या हम उसे manually free न करें।
अगर हम उस memory को free नहीं करते हैं तो उसे "memory leak" कहते हैं, जिससे performance खराब हो सकती है।
free() Function क्या करता है?
- allocated memory को release करता है।
- उस pointer को वापस null कर देना अच्छा practice होता है।
- free करने के बाद उसी pointer को फिर से use करना खतरे भरा होता है।
Syntax:
free(pointer_name);
Example:
int *ptr;
ptr = (int *) malloc(5 * sizeof(int));
free(ptr);
ptr = NULL;
ऊपर के उदाहरण में, पहले memory allocate की गई और फिर उसे release कर दिया गया और pointer को null कर दिया गया ताकि accidental access से बचा जा सके।
Reallocating Memory with realloc() in Hindi
realloc() का प्रयोग तब किया जाता है जब हमें पहले से allocated memory का size बढ़ाना या घटाना हो। इससे हम पुराने data को बचाते हुए memory का size बदल सकते हैं।
यह function पुराने pointer के data को नए memory block में copy कर देता है और उसी data को नई size के साथ return करता है।
Syntax:
ptr = realloc(old_pointer, new_size);
Example:
int *ptr;
ptr = (int *) malloc(5 * sizeof(int));
ptr = (int *) realloc(ptr, 10 * sizeof(int));
ऊपर के उदाहरण में पहले 5 integers के लिए memory allocate की गई थी और बाद में उसे 10 integers के लिए बढ़ा दिया गया। पुराने 5 values safe रहती हैं।
Comparison Table: malloc vs calloc
| Property | malloc() | calloc() |
|---|---|---|
| Initialization | Memory uninitialized रहती है | Memory 0 से initialize होती है |
| Parameters | 1 – total size in bytes | 2 – blocks और block size |
| Return Type | void pointer | void pointer |
Important Tips for Students
- हर memory allocation के बाद check करें कि pointer NULL तो नहीं है।
- Memory को भूल से भी free() करने के बाद access न करें।
- Pointer को free करने के बाद NULL जरूर करें।
- Dynamic memory का use तब करें जब size runtime पर पता चले।
Practice Code Example:
#include <stdio.h>
#include <stdlib.h>
int main() {
int *arr;
int n, i;
printf("कितने numbers चाहिए? ");
scanf("%d", &n);
arr = (int *) malloc(n * sizeof(int));
if (arr == NULL) {
printf("Memory allocation failed\\n");
return 1;
}
for (i = 0; i < n; i++) {
arr[i] = i + 1;
}
printf("Entered numbers: ");
for (i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
free(arr);
arr = NULL;
return 0;
}
FAQs
malloc() function का उपयोग runtime पर memory allocate करने के लिए किया जाता है। यह memory allocate करके एक void pointer return करता है जिसे हम किसी भी data type में typecast कर सकते हैं।
malloc() सिर्फ memory allocate करता है लेकिन उसे initialize नहीं करता जबकि calloc() memory allocate करने के साथ-साथ उसे 0 से initialize भी करता है। इसके अलावा malloc() एक parameter लेता है जबकि calloc() दो parameters लेता है – block की संख्या और हर block का size।
free() function previously allocated dynamic memory को release करता है यानी system को वापस दे देता है। यह memory leak से बचाता है और हमें memory को efficient तरीके से manage करने में मदद करता है।
realloc() function का उपयोग तब किया जाता है जब पहले से allocated memory block का size बढ़ाना या घटाना हो। यह पुराने data को सुरक्षित रखते हुए नया memory block assign करता है जिससे memory का पुनः उपयोग हो सके।