10-dars. Dinamik xotira bilan ishlash
Darsning Maqsadlari:
- Dinamik xotira tushunchasini o'rganish.
malloc,calloc,realloc, vafreefunksiyalarini to'liq tushunish.- Ularning e'lon qilinishi va ishlatish usullarini o'rganish.
Dinamik Xotira
Dasturlashda xotira bilan ishlash muhim ahamiyatga ega. Dinamik xotira — bu dastur bajarilishi davomida kerak bo'lganda xotira ajratish imkoniyatini ta'minlaydi. Buning yordamida biz dasturimizda o'zgaruvchilar sonini dinamik ravishda boshqarishimiz mumkin.
Malloc
malloc (memory allocation) — bu funksiyadan foydalanib, kerakli xotira miqdorini ajratamiz. Buning sintaksisi quyidagicha:
void* malloc(size_t size);
size— ajratilishi kerak bo'lgan xotira hajmi (baytlarda).mallocfunksiyasi ajratilgan xotira joyining manzilini qaytaradi.
Misol
int *arr;
arr = (int*)malloc(5 * sizeof(int)); // 5 ta int uchun xotira ajratamiz
malloc funksiyasi ajratilgan xotira joyini to'ldirmaydi, ya'ni unda eski ma'lumotlar bo'lishi mumkin. Shuning uchun, uni ishlatishdan oldin, xotirani tozalash kerak.
Calloc
calloc — bu funksiyadan foydalanib, xotira ajratish va uni nolga to'ldirish mumkin. Buning sintaksisi quyidagicha:
void* calloc(size_t num, size_t size);
num— ajratiladigan elementlar soni.size— har bir elementning o'lchami (baytlarda).
Misol
int *arr;
arr = (int*)calloc(5, sizeof(int)); // 5 ta int uchun xotira ajratamiz va nolga to'ldiramiz
calloc har bir elementni nolga to'ldiradi, shuning uchun malloc dan farqli o'laroq, eski ma'lumotlar bo'lmaydi.
Realloc
realloc — mavjud xotira joyini o'zgartirish uchun ishlatiladi. Bu funksiyaning sintaksisi quyidagicha:
void* realloc(void* ptr, size_t size);
ptr— o'zgartirilishi kerak bo'lgan xotira manzili.size— yangi xotira hajmi (baytlarda).
Misol
int *arr;
arr = (int*)malloc(5 * sizeof(int)); // Dastlab 5 ta int ajratamiz
arr = (int*)realloc(arr, 10 * sizeof(int)); // 10 ta int ga o'zgartiramiz
realloc funksiyasi xotira joyini o'zgartiradi va agar kerak bo'lsa, yangi joyda xotira ajratadi. Eski joyni avtomatik ravishda tozalaydi, shuning uchun foydalanuvchi buni alohida qilishiga hojat yo'q.
Free
free — bu funksiyadan foydalanib, ajratilgan xotira joyini bo'shatamiz. Bu juda muhim, chunki bo'shatilmagan xotira oqishlariga olib kelishi mumkin. Sintaksisi:
void free(void* ptr);
Misol
free(arr); // Ajratilgan xotira joyini bo'shatamiz
Har doim free funksiyasidan foydalanishni unutmang, aks holda dasturda xotira oqishlari bo'lishi mumkin.
Xulosa
Dinamik xotira dasturlashda juda muhim rol o'ynaydi. malloc, calloc, realloc, va free funksiyalari orqali biz xotira bilan qanday ishlashimizni bilib oldik. Ushbu funksiyalarni to'g'ri va samarali ishlatish dasturimizning barqarorligini ta'minlaydi.
Savollar:
mallocvacalloco'rtasidagi farq nima?- Qanday hollarda
reallocfunksiyasidan foydalanish kerak? - Xotira oqishlarini oldini olish uchun qanday choralar ko'rishimiz mumkin?
freefunksiyasi nima uchun zarur?