Bellek Sızıntısı Tespiti: Valgrind ile Debugging

Bellek sızıntısı, dinamik olarak ayrılan belleğin geri verilmemesinden ortaya çıkar. Programın çalışması sırasında kullanılan RAM giderek artar ve sistem kaynaklarını tükenir. C/C++'da bu sorun yaygındır; valgrind ise bunu tespit etmek için en etkili araçlardan biridir.

Valgrind, Linux üzerinde çalışan bir bellek hata ayıklayıcısıdır. Programı izler, her bellek işlemini kaydeder ve sızıntıları rapor eder. malloc(), free(), new ve delete gibi işlemleri takip eder.

Çoğu Linux dağıtımında paket yöneticisiyle yüklenebilir:

1sudo apt-get install valgrind

Sızıntı içeren basit bir C programı yazalım:

1 <stdlib.h>
2 <stdio.h>
3
4int main() {
5int *ptr = (int *)malloc(10 * sizeof(int));
6ptr[0] = 42;
7printf("Değer: %d\n", ptr[0]);
8// free(ptr); // Sızıntı: bellek geri verilmiyor
9return 0;
10}

Bu kodu `sızıntı.c` olarak kaydedin.

önce hata ayıklama sembolü ile derleyin:

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
1gcc -g -o sızıntı sızıntı.c

Sonra valgrind ile çalıştırın:

1valgrind --leak-check=full./sızıntı
1==12345== HEAP SUMMARY:
2==12345== in use at exit: 40 bytes in 1 blocks
3==12345== total heap alloc: 40 bytes in 1 blocks
4==12345== total heap freed: 0 bytes in 0 blocks
5==12345== Leak_Kind.DEFINITELY_LOST: 40 bytes in 1 blocks

Bu rapor 40 baytlık belleğin geri verilmediğini gösterir.

Kodda free() çağrısını açın:

1 <stdlib.h>
2 <stdio.h>
3
4int main() {
5int *ptr = (int *)malloc(10 * sizeof(int));
6ptr[0] = 42;
7printf("Değer: %d\n", ptr[0]);
8free(ptr);
9return 0;
10}

Yeniden derleyin ve valgrind ile çalıştırın. Bu kez "no leaks are possible" mesajı alacaksınız.

- `--leak-check=full`: Tüm sızıntıları göster
- `--show-leak-kinds=all`: Sızıntı türlerini ayrıntılı listele
- `--track-origins=yes`: Hatanın kaynağını belirle
- `--log-file=rapor.txt`: Çıktıyı dosyaya kaydet

1valgrind --leak-check=full --show-leak-kinds=all --log-file=rapor.txt./sızıntı

Valgrind, bellek yönetimini güvenli hale getirmenin temel aracıdır. Özellikle büyük projelerde düzenli olarak kullanılmalıdır.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz