Dynamic Memory, realloc(), calloc()

Kategori: C , 25 Haziran 2019 , JanFranco


Düşünelim ki, kullanıcının, işi bitene kadar integer değerler gireceği bir program yazacağız. malloc fonksiyonu ile büyük bir yer tahsil ettik ancak kullanıcının işi bitmedi ve değerler girmeye devam ediyor. Burada program hata vererek sonlanacaktır. Bizim bu açtığımız alana, yeni bir alan eklememiz gerekiyor. Bunu da realloc fonksiyonu ile yapabiliriz. realloc fonksiyonu şu şekilde tanımlanır:


realloc(<data>, <size>);

Bir örnek görelim:

int main(){

    int *p, i, size = 5;

    p = malloc(sizeof(int)*size);

    for(i=0; i<100; i++){
        if(i == size){
            size += 5;
            p = realloc(p, sizeof(int)*size);
        }
        p[i] = i;
        printf("%d\n", i);
    }

    return 0;
}

Burada görüldüğü gibi 5 integer tutabilecek bir alanı malloc ile tahsil ettik.. Bu alana realloc fonksiyonunu kullanarak 100 integer yerleştirdik. Son olarak calloc fonksiyonunu göreceğiz. calloc fonksiyonu malloc ile hemen hemen aynı işi yapar. Tek farkı, alanı tahsil ettikten sonra tüm değerleri 0 yapar. Aşağıdaki şekilde tanımlanır:


calloc(<size>, <type>);

Örnek kullanım:

int *p;

p = calloc(10, sizeof(int));


Sonraki Yazı: typedef
Yorumlar

Henüz bir yorum bulunmuyor.
Yorum bırakın