CodeBlanks Logo Icon CodeBlanks

valgrind

  • C kursu
  • Orta seviye
  • Ders 97/116
  • 5 dk

valgrind ile bellek hatalarını bulmayı öğrenirsin.

valgrind ile bellek denetimi

valgrind, programın bellek kullanımını çalışma anında denetleyen bir araçtır. En yaygın kullanımı bellek sızıntılarını bulmaktır: valgrind --leak-check=full ./program.

valgrind programı yavaş çalıştırır ama her malloc'a karşılık bir free olup olmadığını denetler. Sızıntı varsa raporda "definitely lost" satırı ve kaç bayt kayıp olduğu yazar. Ayrıca ilk değeri verilmemiş değişken okumayı ve dizi sınırı dışına çıkmayı da yakalar. Bu denetimler derleyici tarafından yakalanamaz; yalnızca çalışma anında ortaya çıkarlar. Bu yüzden valgrind, dinamik bellek kullanan her C programında düzenli olarak çalıştırılmalıdır.

Sızıntısız program

valgrind'in temiz rapor vermesi için her malloc'a karşılık bir free çağrısı olmalıdır. Ayırdığın belleği kullanım bitince hemen serbest bırakırsın.

Örnek: int *arr = malloc(3 * sizeof(int)); ile üç tamsayılık yer ayırırsın. Değerleri doldurduktan sonra toplamı hesaplarsın ve free(arr); ile belleği iade edersin. sizeof(int) tür boyutunu verir; böylece kod farklı platformlarda doğru çalışır. free'yi unutmak sızıntıya, çok erken çağırmak ise dangling pointer'a yol açar. Doğru sıra: ayır, kullan, serbest bırak.

Uygulama Sızıntısız program yaz

int *arr = malloc(3 * sizeof(int)); ile üç elemanlı dizi ayır. arr[0] = 10; arr[1] = 20; arr[2] = 30; ata. int sum = arr[0] + arr[1] + arr[2]; hesapla. printf("%d\n", sum); yazdır. Son olarak free(arr); ile belleği iade et.

Başlangıç kodu

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

// 3 elemanlı int dizi için bellek ayır
// elemanlara 10, 20, 30 değerlerini ata
// toplamı yazdır
// belleği serbest bırak

int main(void) {
    return 0;
}

Örnek çözüm

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

int main(void) {
    int *arr = malloc(3 * sizeof(int));
    arr[0] = 10; arr[1] = 20; arr[2] = 30;
    int sum = arr[0] + arr[1] + arr[2];
    printf("%d\n", sum);
    free(arr);
    return 0;
}

Beklenen çıktı

60

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 valgrind ne tür hataları yakalar?

  • Sözdizimi hatalarını
  • Tür uyumsuzluklarını
  • Derleyici uyarılarını
  • Bellek sızıntılarını Doğru cevap

Açıklama: valgrind bellek sızıntılarını ve ilk değersiz okumaları yakalar.

2 Bellek yönetimini eşle

Kavram Anlamı
malloc Bellek ayır
free Bellek iade et
sizeof(int) Tür boyutu
--leak-check Sızıntı denetimi

3 malloc çağrısını tamamla

Soru
int *arr = malloc(3 * sizeof(____));
Cevap
int *arr = malloc(3 * sizeof(int));

Açıklama: sizeof(int) int türünün bayt boyutunu verir.

Orta seviye bölümündeki tüm dersler