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
#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
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ı
int *arr = ____(3, sizeof(int));
int *arr = calloc(3, sizeof(int));
Açıklama: calloc iki argümanla sıfırlı bellek ayırır.