Malloc Nedir ve C de Malloc Kullanımı

Malloc Nedir ve C de Malloc Kullanımı

Bir C programı içerisinde, dizilerin boyutu ve kaç elemanlı olduğu program başında belirtilirse, derleyici o dizi için gereken bellek alanını (bölgesini) program sonlanıncaya kadar saklı tutar ve bu alan başka bir amaç için kullanılamaz . Bu türden diziler statik dizi olarak isimlendirilir. Statik dizinin boyutu programın çalışması esnasında (run time) değiştirilemez.

Fakat, programın çalışırken bir dizinin boyutu ve eleman sayısı bazı yöntemler kullanılarak değiştirilebilir. Bu tür dizilere dinamik dizi denir. Dinamik diziler için gereken bellek bölgesi, derleyici tarafından işletim sisteminden istenir, kullanılır ve daha sonra istenirse bu bölge boşaltırılır. Bu bölümde, dinamik dizi kavramı ve dinamik bellek yönetimi anlatılacaktır.dinamik diziler işaretçi kullanılarak ve standart kütüphanedeki malloc(), calloc(), realloc() ve free() fonksiyonlarının yardımıyla ile oluşturulur veya boşaltılır.

Dinamik Bellek FonksiyonuAçıklama
void *malloc(size_t eleman_sayısı);Bellekte herbiri size_t tipinde olan eleman_sayısı kadar yer (bellek bloğu) ayırır. Bu yer verilmezse geriye NULL gönderir.
void *calloc(size_t eleman_sayısı, size_t nbayt);Bellekte herbiri nbayt kadar yer işgal edecek eleman_sayısı kadar boş yer ayırır ve bütün bitleri sıfırlar. Bu yer ayrılamazsa geriye NULL gönderir.
void *realloc(void *ptr, size_t nbayt);ptr işaretçisi ile gösterilen bellek bloğunu, nbayt kadar büyüterek veya küçülterek değiştirir. Bu iş gerçekleşmezse geriye NULL gönderir.
void free(void *ptr);Daha önce ayrılan adresi ptr‘de saklanan bellek alanının boşaltır.

Arkadaşlar Aşağıda örnek olarak C programlama dilinde malloc kullanımı ile yapılmış diziye girilen elemanların ortalamasını bulan bir uygulama örneği vardır.

#include <stdio.h>
#include <stdlib.h>
int main(){
int n,i; 
float *x, toplam, ort;
while(1) {
 /* dizinin eleman sayısı okunuyor */
printf("\nEleman sayısını girin: ");
scanf("%d",&n);
 /* eleman sayısı <= 0 ise dögüden çık */
if( n<=0 ) break; /* bellekten yer isteniyor */
x = (float *) malloc( sizeof(float)*n ); 
/* istenen yer ayrıldı mı? */
if( x == NULL ){ puts("Yetersiz bellek alanı");
exit(1);
}
/* elemanlar tek tek belleğe yazılıp toplamları hesaplanıyor */
for(toplam =0.0, i=0; i<n; i++){
printf("%d. eleman: ",i+1);
scanf("%f",&x[i]);
toplam += x[i];
}
ort = toplam / n;
printf("Ortalama = %f\n",ort);
/* ayrılan alan boşaltılıyor */
free(x); }
return 0;
}

Çıktı :

Eleman sayısını girin: 2
1. eleman: 4
2. eleman: 6
Ortalama = 5.000000

Eleman sayısını girin: 4
1. eleman: 2
2. eleman: 3
3. eleman: 1
4. eleman: 5
Ortalama = 2.750000

Eleman sayısını girin: 0