BG MVC Model View Controller eğitim serisi yayında...

Ana sayfa > Programlama > C Programlama > C standart kütüphanesi > <stdlib.h> > realloc

realloc() fonksiyonu

Bildirim

void* realloc(void *ptr, size_t size);

Açıklama

Daha önce malloc(), calloc() veya realloc() fonksiyonu ile tahsis edilen belleğin boyutunu, boyutu byte olarak ifade edilen size parametre değeri kadar, değiştirir.

Yeniden bellek tahsis işlemi ptr parametresi ile gösterilen bellek adresi büyütülerek veya küçültülerek yapılabilir. Bellek alanı genişletilirse, tahsis edilen önceki bellek içeriği değişmeden kalır ve eklenen bellek içeriğine herhangi bir değer atanmaz.

Yeterli bellek yoksa, eski bellek bloğu serbest bırakılmaz ve NULL bir işaretçi geri döndürülür.

Parametreler

ptr: Yeniden tahsis edilecek bellek bölgesini gösterir.

size: Tahsis edilecek belleğin yeni boyutunu byte olarak gösterir.

Dönüş değeri

Başarı durumunda tahsis edilen belleğin başlangıç adresini geri döndürür. Bu bellek adresi ptr ile gösterilen bellek adresinden farklı olabilir. Bellek sorunlarını engellemek için, gerekli işlemler yapıldıktan sonra, bu işaretçi free() veya realloc() fonksiyonu ile boşaltılmalıdır.

Hata durumunda, NULL bir işaretçi geri döndürülür. Bu durumda, geçerliliğini devam ettiren önceki işaretçi free() veya realloc() fonksiyonu ile boşaltılmalıdır.

Örnek


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

int main(void)
{
    int *ip, id;

    ip = (int *) malloc(5 * sizeof(int));

    for (id=0; id<5; id++) {
         *(ip+id) = id+1;
         printf("%p adresindeki değer: %d\n", (ip+id), *(ip+id));
    }

    ip = (int *) realloc(ip, 10 * sizeof(int));

    printf("Genişletilmiş bellek değerleri:\n");

    for (  ; id<10; id++) { /* Burada id değişken değeri 5 olarak başlar. */
         *(ip+id) = id+1;
         printf("%p adresindeki değer: %d\n", (ip+id), *(ip+id));
    }

    free(ip);
}

Yukarıdaki örnekte, program aşağıdaki satırları ekrana yazar:

00CB1540 adresindeki değer: 1
00CB1544 adresindeki değer: 2
00CB1548 adresindeki değer: 3
00CB154C adresindeki değer: 4
00CB1550 adresindeki değer: 5
Genişletilmiş bellek değerleri:
00CB1554 adresindeki değer: 6
00CB1558 adresindeki değer: 7
00CB155C adresindeki değer: 8
00CB1560 adresindeki değer: 9
00CB1564 adresindeki değer: 10

Yukarıdaki program, malloc() fonksiyonunu kullanarak 5 adet int değer için bellek tahsisi yapar ve her bellek adresine int bir değer atayarak bellek adreslerini ve bu adreslere atadığı değerleri ekrana yazar. Daha sonra, realloc() fonksiyonuyla tahsis edilen bellek miktarını 10 int değer alacak kadar genişletir ve yeni atadığı değerleri ve bellek adreslerini ekrana yazar.