CodeBlanks Logo Icon CodeBlanks

Bellek yönetimi

  • C kursu
  • Başlangıç
  • Ders 115/116
  • 6 dk

malloc ve free ile dinamik bellek yönetimi eklersin.

malloc ile dinamik Book

Sabit bir dizi yerine, malloc ile çalışma zamanında bir Book ayırabilirsin. Bu, kataloğun boyutunu dinamik belirlemeyi sağlar.

struct Book *b = malloc(sizeof(struct Book));
strcpy(b->title, "Suç ve Ceza");
b->year = 1866;
free(b);

Burada b bir işaretçidir; heap'teki Book'u gösterir. Üyelere -> operatörüyle erişirsin (nokta değil). İşin bitince free ile belleği geri verirsin. Bu, dinamik katalogların temelidir.

strcpy ile başlık atama

Bir char dizisine doğrudan atama yapamazsın; strcpy ile karakterleri kopyalarsın. <string.h> başlığı gerekir.

strcpy(b->title, "Suç ve Ceza");
b->year = 1866;

Burada strcpy ikinci dizeyi birincisine kopyalar. year ise bir int olduğu için doğrudan = ile atanır. Bu ayrım, C'de dize ve tamsayı atamalarının farklı olmasından kaynaklanır.

Uygulama malloc ile Book ayır ve yazdır

<stdlib.h> ve <string.h> başlıklarını ekle. malloc(sizeof(struct Book)) ile bir Book ayır; strcpy ile başlığı "Suç ve Ceza" yap; b->year = 1866 ata. print_book(*b) ile yazdır; free(b) ile belleği bırak.

Başlangıç kodu

main.c
#include <stdio.h>

struct Book {
    char title[32];
    int year;
};

void print_book(struct Book b) {
    printf("%s %d\n", b.title, b.year);
}

// malloc ile bir Book ayır; strcpy ile başlık ata; print_book ile yazdır; free ile bırak
int main(void) {
    return 0;
}

Örnek çözüm

main.c
#include <stdlib.h>
#include <string.h>
struct Book *b = malloc(sizeof(struct Book));
strcpy(b->title, "Suç ve Ceza");
b->year = 1866;
print_book(*b);
free(b);

Beklenen çıktı

Suç ve Ceza 1866

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Boşluğu doldur: işaretçi üye erişimi

Soru
b____ = 1866;
Cevap
b->year = 1866;

Açıklama: b->year ile işaretçinin üyesine erişilir.

2 İfade ve anlam eşleştir

Kavram Anlamı
b->title Başlık üyesi
b->year Yıl üyesi
malloc Heap ayırır
free Heap bırakır

3 malloc ile ayrılan bir Book'u serbest bırakmak için hangi fonksiyon çağrılır?

  • delete
  • release
  • free Doğru cevap
  • destroy

Açıklama: free ile malloc ile ayrılan heap belleği geri verilir.

Başlangıç bölümündeki tüm dersler