CodeBlanks Logo Icon CodeBlanks

Ö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

main.c
#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

main.c
#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.

Orta seviye bölümündeki tüm dersler