Foundations — Dynamic memory — malloc, calloc, realloc, free
5.1.14 · D1· Coding › C Programming › Dynamic memory — malloc, calloc, realloc, free
Ek bhi line jaise int *a = malloc(n * sizeof(*a)); padhne se pehle, tumhe uska har ek piece khud se samajhna hoga. Chalte hain ek-ek cheez banate hain, ek ke upar ek. Yahan kuch bhi assume nahi kiya gaya — agar parent ne kuch use kiya, toh hum use yahan define karte hain.
1. A byte — memory ka atom
Picture: socho ek street pe identical mailboxes ki katar khadi hain. Har mailbox ek byte hai. Har ek ek chhoti value rakh sakta hai.

Topic ko yeh kyun chahiye: parent mein har function — malloc, calloc, realloc — bytes mein kaam karta hai. Jab tum malloc(20) likhte ho, tum keh rahe ho "mujhe 20 aisi boxes ek katar mein do." Jab tak tum nahi jaante byte hai kya, tum "mujhe kitne bytes chahiye?" nahi samajh sakte.
2. An address — byte ka house number
Picture: upar wali figure mein har mailbox ke neeche likha number. Mailbox byte hai; uske neeche wala number address hai.
Topic ko yeh kyun chahiye: malloc ek address return karta hai — tumhare naye block ke pehle byte ka address. Woh returned number hi tumhara tumhari memory se ek-maatra connection hai.
3. A pointer — ek variable jo address store karta hai
Picture: ek arrow. Pointer apne box mein baitha hai; ek plain number ki jagah woh ek arrow rakhta hai jo us box tak pahunchta hai jise woh name karta hai.

C mein pointer ka type star ke saath likhte hain:
Topic ko yeh kyun chahiye: malloc ek address return karta hai; tumhe use kahin store karna hoga rakhne ke liye. Woh kahin ek pointer hai. Zyada detail Pointers in C mein hai.
4. A type aur uski size — ek cheez kitni wide hoti hai?
Picture: ek int ek mailbox nahi hai, yeh adjacent mailboxes ka ek group hai (commonly 4) jo ek bade number ko rakhne ke liye saath pakde hain. Ek char usually bas 1 box hota hai.

Topic sizeof(*p) kyun likhta hai: *p ka matlab hai "woh cheez jise p point karta hai," toh sizeof(*p) hai "ek element ki size." Agar baad mein p ka type badlo, yeh line automatically sahi sawaal poochti rahegi.
5. An array — same-type boxes ki katar, aur pointers se iska relation
Picture: wahi mailbox street, lekin ab 5 equal int-wide cells mein grouped, index 0 se 4 tak labelled.
Topic ko yeh kyun chahiye: dynamic memory ka poora point hi yeh hai ki ek aisa array banao jiska length tumhe runtime tak pata nahi tha. Tumhe malloc se ek address milta hai, use pointer mein store karte ho, aur a[i] ko exactly ek real array ki tarah use karte ho.
6. Stack vs heap — memory ke do neighbourhoods
Picture: memory street ke do alag regions. Stack boxes automatically clean up ho jaate hain jab tum ek room chhod ke jaate ho; heap boxes tab tak rented rehte hain jab tak tum khud key wapas nahi karte.

7. NULL — woh address jo kuch point nahi karta
Picture: ek pointer arrow jo edge se baahar empty space mein point kar raha hai — jaanboojhkar kahin nahi.
8. void * aur casting — ek generic, typeless address
Picture: wahi arrow pehle jaisa, lekin ab koi label nahi yeh batane ke liye ki woh kis type ke box par land ho raha hai — ek blank tag.
9. Memory leaks — rented boxes kabhi wapas nahi liye
Picture: ek arrow (tumhara ek-maatra pointer) overwrite ho jaata hai, jabki jis box ko woh name karta tha woh float karta chala jaata hai, ab bhi "in use" marked, koi arrow usse nahi pahunchta.
Topic ko yeh kyun chahiye: yahi woh danger hai free ke peeche, v = realloc(v, ...) ke peeche, aur p = NULL set karne ke peeche. Leaks pakadne ke tools Memory Leaks and Valgrind mein hain.
Yeh topic ko kaise feed karte hain
Equipment checklist
Self-test: right side cover karo aur jawab do.
Byte kya hai?
Address kya hai?
Pointer kya hai?
* ke do uses ka kya matlab hai?
int *a mein iska matlab "pointer" hai; expression *a mein iska matlab "dereference — pointed-at value fetch karo."sizeof(*p) kya compute karta hai?
p jis ek element ko point karta hai usme hain."n objects of type T" ko bytes mein convert karo.
n * sizeof(*p).Stack aur heap memory mein kya fark hai?
free karte ho).NULL kya hai aur malloc use kab return karta hai?
malloc use tab return karta hai jab woh request satisfy nahi kar sakta.void * kya hai aur malloc ek kyun return karta hai?
malloc raw bytes mein deal karta hai aur tumhara type nahi jaanta.Memory leak kya hai?
free nahi kar sakte kyunki tumne uske har pointer kho diye.