CodeBlanks Logo Icon CodeBlanks

Dinamik dizi

  • C kursu
  • Orta seviye
  • Ders 7/116
  • 5 dk

malloc ile dinamik dizi oluşturmayı öğrenirsin.

Dinamik dizi

Bir dinamik dizi, çalışma anında yığın (heap) belleğinde ayrılan bir dizidir. C'de malloc fonksiyonu bunun için kullanılır; dönüş türü void *'dır.

Örnek: int *arr = malloc(3 * sizeof(int));. Bu, üç int için yer ayırır ve başlangıç adresini arr'a atar. arr[0], arr[1], arr[2] artık geçerli elemanlardır. malloc için <stdlib.h> başlık dosyasını eklemelisin. Ayırılan bellek, kullanımdan sonra free ile iade edilir.

malloc ile dizi kullanımı

malloc ile ayrılan dizi, normal bir dizi gibi kullanılır. arr[i] yazımı hem okuma hem yazma için geçerlidir. Dikkat etmen gereken iki nokta vardır.

Birincisi, malloc başarısız olursa NULL döndürür; büyük ayırmalarda bunu kontrol etmelisin. İkincisi, ayrılan bellek başlatılmamış olabilir; yani çöp değerler içerebilir. Bu yüzden kullanmadan önce elemanları kendin atamalısın. İşin bitince free(arr); ile belleği iade edersin; aksi halde sızıntı oluşur.

Uygulama Dinamik dizi oluştur ve yazdır

int *arr = malloc(3 * sizeof(int)); ile üç elemanlı bir dizi ayır. Elemanlara sırasıyla 1, 2, 3 ata. Bir for döngüsü ile her elemanı printf("%d ", arr[i]) biçiminde yazdır; sonra printf("\n") ile satır sonu ekle. Son olarak free(arr); ile belleği iade et.

Başlangıç kodu

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

// arr icin malloc ile yer ayir
// elemanlara 1, 2, 3 ata
// for ile yazdir ve free ile iade et

int main(void) {
    return 0;
}

Örnek çözüm

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

int main(void) {
    int *arr = malloc(3 * sizeof(int));
    arr[0] = 1;
    arr[1] = 2;
    arr[2] = 3;
    for (int i = 0; i < 3; i++) printf("%d ", arr[i]);
    printf("\n");
    free(arr);
    return 0;
}

Beklenen çıktı

1 2 3

Soru ve cevaplar

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

1 malloc için hangi başlık dosyası gerekir?

  • <stdio.h>
  • <stdlib.h> Doğru cevap
  • <string.h>
  • <math.h>

Açıklama: malloc, free, realloc ve calloc stdlib.h içinde bildirilmiştir.

2 Üç int için malloc çağrısı

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

Açıklama: malloc, başlatılmamış bellek ayırır.

3 malloc parçalarını eşle

Kavram Anlamı
malloc Ayırma fonksiyonu
3 * sizeof(int) Boyut ifadesi
void * Dönüş türü
free(arr) Bellek iadesi

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