Özet - Bellek yönetimi
- C kursu
- Orta seviye
- Ders 12/116
- 5 dk
malloc, realloc ve free'yi birleştirerek dinamik bir yığın yazarsın.
Dinamik yığın tasarımı
Bu özette malloc, realloc ve free'yi birleştirerek dinamik bir yığın (stack) yazacaksın. Yığın, son giren ilk çıkar (LIFO) veri yapısıdır.
Yığın, arka planda bir int * dizi ve bir size sayacı tutar. push, realloc ile diziyi bir eleman büyütür ve yeni değeri sona ekler. pop, son elemanı döndürür ve size'ı azaltır. Küçültme için realloc yapmak zorunlu değildir; sadece boyutu azaltmak yeter. İş bitince free ile belleği iade edersin.
Uygulama Dinamik yığın yaz
Global int *stack = NULL; ve int size = 0; tanımla. void push(int v) yaz; int *tmp = realloc(stack, (size + 1) * sizeof(int)); ile büyüt, if (tmp) ise stack = tmp; stack[size] = v; size++; yap. int pop(void) yaz; if (size == 0) return -1;, sonra size--; return stack[size];. main içinde push(10); push(20); push(30); çağır, printf("%d\n", pop()) ile iki kez pop yazdır, sonra printf("%d\n", stack[0]) ile kalanı yazdır. free(stack); ile iade et.
Başlangıç kodu
#include <stdio.h>
#include <stdlib.h>
// global stack ve size tanimla
// push ve pop fonksiyonlarini yaz
// main icinde push/pop cagir ve free ile iade et
int main(void) {
return 0;
}Örnek çözüm
#include <stdio.h>
#include <stdlib.h>
int *stack = NULL;
int size = 0;
void push(int v) {
int *tmp = realloc(stack, (size + 1) * sizeof(int));
if (tmp) {
stack = tmp;
stack[size] = v;
size++;
}
}
int pop(void) {
if (size == 0) return -1;
size--;
return stack[size];
}
int main(void) {
push(10);
push(20);
push(30);
printf("%d\n", pop());
printf("%d\n", pop());
printf("%d\n", stack[0]);
free(stack);
return 0;
}Beklenen çıktı
30 20 10
Özet
Bu grupta dinamik bellek yönetimini öğrendin. malloc başlatılmamış, calloc sıfırlı bellek ayırır; realloc bloğu yeniden boyutlandırır; free iade eder. Sızıntı ve dangling pointer en yaygın hatalardır.
Bunları birleştirerek push/pop işlemleri olan dinamik bir yığın yazdın. realloc ile büyütme, free ile iade bir araya gelince güvenli ve esnek bir veri yapısı elde ettin. Sonraki gruplarda göreceğin ileri dize işleme ve kütüphane projeleri bu temelleri kullanır.
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Yığın parçalarını eşle
| Kavram | Anlamı |
|---|---|
push |
Eleman ekle |
pop |
Eleman çıkar |
realloc |
Diziyi büyüt |
free |
Belleği iade et |
2 Dinamik yığında push hangi bellek fonksiyonunu kullanır?
- free
- printf
- realloc Doğru cevap
- sizeof
Açıklama: push, diziyi bir eleman büyütmek için realloc kullanır.