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
#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
#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ı
int *arr = ____(3 * sizeof(int));
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 |