Dinamik Bellek Yönetimi: malloc, free (C) ve new, delete (C++)

crazy_coder

Moderatör
Katılım
20 Şub 2026
Mesajlar
204
Tepkime puanı
0
Puanları
16

Dinamik Bellek Yönetimi: Heap Üzerinde Hakimiyet​


Statik bellekte (Stack) boyutlar sabittir ve program derlenirken bilinmelidir. Dinamik bellekte (Heap) ise boyutlar çalışma zamanında (runtime) belirlenir.



1. C Dünyası: malloc ve free​


C dilinde bellek yönetimi, fonksiyonlar aracılığıyla manuel olarak yapılır. Bellek ayrılırken ne kadar byte yer istediğimizi belirtmemiz gerekir.


  • []malloc (Memory Allocation): Belirtilen byte kadar yer ayırır ve başlangıç adresini void* tipinde döner.
    []free: Ödünç alınan belleği sisteme geri verir.

C:
// 5 adet tam sayı için yer ayır (5 * 4 byte = 20 byte)
int ptr = (int) malloc(5 * sizeof(int));

if (ptr != NULL) {
ptr[0] = 10; // Kullanım
free(ptr);   // Belleği boşalt (ZORUNLU!)
}



2. C++ Dünyası: new ve delete​


C++, bellek yönetimini birer operatör haline getirerek daha güvenli ve okunabilir kılmıştır. new operatörü sadece yer ayırmakla kalmaz, nesnelerin Constructor (yapıcı metotlarını) da çağırır.


  • []new: Nesne veya dizi için yer ayırır.
    []delete: Tek bir nesneyi siler.
  • delete[]: new[] ile ayrılan bir diziyi siler.

C++:
int* sayi = new int;       // Tek bir int ayır
*sayi = 100;

int* dizi = new int[10];   // 10 elemanlı dizi ayır
dizi[0] = 5;

delete sayi;               // Belleği iade et
delete[] dizi;             // Dizi belleğini iade et



3. Temel Farklar: C vs C++​


Özellikmalloc / freenew / delete
TürFonksiyondur.Operatördür.
Tip GüvenliğiHayır (void* döner, cast gerekir).Evet (Hangi tip istenirse onu döner).
Boyut Hesabısizeof ile manuel yapılır.Otomatik hesaplanır.
ConstructorÇağırmaz.Otomatik çağırır.



4. En Büyük Tehlike: Memory Leak (Bellek Sızıntısı)​


Dinamik olarak ayrılan her bellek, iş bittiğinde mutlaka sisteme iade edilmelidir. Eğer delete yapmayı unutursanız, o bellek alanı program kapanana kadar meşgul kalır. Programınız zamanla daha fazla RAM tüketmeye başlar ve sonunda sistem kilitlenir.



Sonuç​


Dinamik bellek yönetimi size sonsuz esneklik sağlar ancak büyük bir sorumluluk getirir. C++'ta new kullandıysanız mutlaka bir yerlerde delete kullanmalısınız. Modern C++'ta (C++11 ve sonrası) bu işi otomatize eden Smart Pointers (Akıllı İşaretçiler) kullanımı, manuel delete işlemlerinin yerini alarak hata riskini ortadan kaldırmaktadır.
 
Geri
Üst