CodeBlanks Logo Icon CodeBlanks

calloc ve realloc

  • C kursu
  • Başlangıç
  • Ders 104/116
  • 5 dk

calloc ve realloc ile bellek yönetimini öğrenirsin.

calloc: sıfırlı bellek ayırma

calloc da malloc gibi heap'ten bellek ayırır; ama ayrılan alanı sıfırlar. <stdlib.h> ile gelir.

int *arr = calloc(3, sizeof(int));
// arr[0], arr[1], arr[2] hepsi 0

İki argüman alır: eleman sayısı ve her elemanın boyutu. malloc tek argümanla toplam bayt alırken, calloc iki parçaya böler. Sıfırlı başlatmak özellikle dizi ve sayaçlar için kullanışlıdır; çöp veriden kaynaklanacak sürprizleri önler.

realloc ile yeniden boyutlandırma

realloc daha önce ayrılmış bir belleği büyütür veya küçültür. İçeriği korur; yeni alan varsa işlemi yeni yerde yapar.

int *arr = malloc(2 * sizeof(int));
arr[0] = 1;
arr[1] = 2;
arr = realloc(arr, 4 * sizeof(int));
arr[2] = 3;
arr[3] = 4;

Burada dizi önce 2 elemanlıdır; realloc ile 4 elemanlı hale gelir. İlk iki eleman korunur, son iki ise açıkça atanır. realloc eski adresi geçersiz kılabilir; bu yüzden dönen değeri mutlaka aynı işaretçiye ata.

Uygulama calloc ile sıfırlı dizi yazdır

calloc ile 3 elemanlı bir int dizisi ayır (ilk değerleri sıfır olur). printf ile üç elemanı yazdır. Son olarak free ile belleği bırak.

Başlangıç kodu

main.c
#include <stdio.h>
#include <stdlib.h>

int main(void) {
    /* calloc ile 3 int ayır; printf ile elemanları yazdır; free ile bırak */
    return 0;
}

Örnek çözüm

main.c
int *arr = calloc(3, sizeof(int));
printf("%d %d %d\n", arr[0], arr[1], arr[2]);
free(arr);

Beklenen çıktı

0 0 0

Soru ve cevaplar

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

1 calloc ve malloc arasındaki temel fark nedir?

  • calloc belleği sıfırlar, malloc sıfırlamaz Doğru cevap
  • calloc daha yavaştır
  • calloc daha hızlıdır
  • calloc free gerektirmez

Açıklama: calloc belleği sıfırlar; malloc eski veriyi bırakır.

2 Fonksiyon ve özellik eşleştir

Kavram Anlamı
malloc Sıfırlamaz
calloc Sıfırlar
realloc Yeniden boyutlandırır
free Bırakır

3 Boşluğu doldur: calloc çağrısı

Soru
int *arr = ____(3, sizeof(int));
Cevap
int *arr = calloc(3, sizeof(int));

Açıklama: calloc iki argümanla sıfırlı bellek ayırır.

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