C Pointer ve Memory: Stack, Heap ve Lifetime’ı Görselleştirin

Pointers & Memory Lab ile C/C++ pointer, address, dereference, array, struct, callback, stack, heap, ownership ve dangling pointer kavramlarını görün.

📅2026-09-05
Harun BüyükçolakHarun Büyükçolak, Full Stack Developer
C Pointer ve Memory: Stack, Heap ve Lifetime’ı Görselleştirin

Yazı içeriği

C pointer konusu zor görünür çünkü aynı anda iki farklı şeyi düşünmek gerekir: pointer object’in kendisi ve işaret ettiği target. Stack frame, heap lifetime ve aliasing eklendiğinde kağıt üzerindeki tek ok yetersiz kalır.
Websoftik Academy Pointers & Memory Lab; pointer’ı typed address route olarak gösterir ve code, static data, stack frame ile heap object’lerini Lifetime Atlas üzerinde senkronize eder.

1. C Pointer Nedir?

Pointer, başka bir object veya function’ın adresini taşıyabilen typed bir değerdir. int *p, p’nin integer target’a giden bir adres olarak yorumlandığını söyler.
Pointer’ın kendisi de memory’de yer kaplayan ayrı bir object’tir. “p’nin adresi”, “p’nin sakladığı adres” ve “o adresteki değer” üç farklı bilgidir.

2. Pointers & Memory Lab Nasıl Çalışıyor?

Pointers & Memory Lab, 10 Polito uyumlu modül ve 20 interaktif code–memory workshop sunar. Source line, pointer route, memory cell, object lifetime ve operation sonucu birlikte ilerler.
C pointer temellerinden array, matrix, string, struct ve callback’lere; dynamic allocation’dan C++17 reference ve smart pointer’lara kadar aynı model korunur.

3. Address ve Dereference Nasıl Ayrılır?

&x x’in adresini üretir; *p p’nin gösterdiği target’a erişir. Declaration’daki yıldız pointer type’ını, expression’daki yıldız dereference operation’ını belirtir.
Lab bir assignment’ta pointer object’in değerinin mi, target object’in değerinin mi değiştiğini ayrı renkle gösterir. Bu ayrım alias sorularının temelidir.

4. Typed Address Route Ne Demektir?

Adres tek başına byte konumudur; pointer type ise dereference sırasında kaç byte’ın ve hangi yorumla okunacağını belirler. Pointer arithmetic de object size üzerinden ilerler.
Bu nedenle p+1 her zaman adrese bir byte eklemez. int* ve char* aynı numeric address çevresinde farklı adımlarla hareket eder.

5. Stack ve Heap Arasındaki Fark Nedir?

Automatic local object’ler function frame’iyle stack üzerinde yaşar ve scope sona erdiğinde lifetime biter. Dynamic object’ler allocation ile heap’te başlar; free veya uygun owner mekanizmasıyla sonlandırılır.
Heap’te olmak “sonsuz yaşamak” anlamına gelmez. Ownership obligation kaybolursa leak, release sonrası route kullanılırsa dangling access oluşur.

6. Lifetime Atlas Neyi Gösterir?

Lifetime Atlas, code segment, static data, heap object ve aktif/popped stack frame’leri tek haritada gösterir. Her pointer route’un target’ı alive, expired, released veya uninitialized olarak işaretlenir.
Bir function local’inin adresi return edildiğinde adres sayısı hâlâ görünebilir; fakat target lifetime sona ermiştir. Atlas, “adres var” ile “geçerli object var” farkını açık eder.

7. Array ve Pointer İlişkisi Nedir?

Array expression pek çok context’te ilk elemana pointer’a dönüşür; fakat array ve pointer aynı object değildir. sizeof(array) ile sizeof(pointer) farkı bu ayrımı gösterir.
Indexing a[i], geçerli sınırlar içinde *(a+i) biçiminde düşünülebilir. Lab base address, offset ve selected cell’i birlikte vurgular.

8. Matrix ve Pointer Arithmetic Nasıl Çalışır?

Gerçek 2D array row-major düzende contiguous satırlar taşır. Pointer-to-array type row stride bilgisini korur; double pointer her zaman gerçek matrix düzeninin eşdeğeri değildir.
Lab row ve column offset’ini byte adresine kadar açar. Yanlış stride’ın neden başka hücre veya sınır dışı memory seçtiği görünür olur.

9. String ve Struct Pointer’ları Nasıl Okunur?

C string, null terminator ile biten character sequence’tir. Pointer yalnızca başlangıç adresini taşır; length bilgisi otomatik gelmez. Struct pointer’da p->field, (*p).field ile eşdeğerdir.
Lab terminator, field offset, alignment ve padding etkilerini memory cell düzeyinde göstererek syntax’ı layout’a bağlar.

10. Function Pointer ve Callback Nedir?

Function pointer executable code adresi taşır ve uygun signature ile çağrılabilir. Callback, davranışın başka bir function’a parameter olarak verilmesini sağlar.
Comparator gibi callback’lerde return contract kritiktir. Signature mismatch veya yanlış lifetime varsayımı compile warning’den undefined behavior’a uzanabilir.

11. Dangling Pointer ve Use-After-Free Nedir?

Target lifetime bittikten sonra adresi saklamaya devam eden route dangling pointer’dır. Bir owner’ı NULL yapmak aynı adresi kopyalamış diğer alias’ları düzeltmez.
free heap object’in lifetime’ını global olarak bitirir; pointer variable’ların bit desenini otomatik silmez. Released target’a dereference undefined behavior’dır.

12. C++ Smart Pointer Bağlantısı Nedir?

unique_ptr tek ownership’i move ile taşır ve scope sonunda RAII ile release eder. shared_ptr ortak ownership sayar; weak_ptr ownership artırmadan gözlem yapar.
Smart pointer’lar bütün logic hatalarını yok etmez; fakat ownership contract’ını type ve lifetime davranışına taşır. Lab raw new/delete ile smart route’ları aynı Atlas üzerinde karşılaştırır.

13. Pointer Sorularında Hangi Kontrol Listesi Kullanılmalı?

  • Pointer object nerede ve type’ı nedir?
  • Hangi adresi taşıyor, target şu anda alive mı?
  • Başka alias var mı; owner kim?
  • Arithmetic doğru object sınırları içinde mi?
  • Dereference öncesi initialization ve lifetime geçerli mi?
  • Release yükümlülüğü tam olarak bir kez yerine getiriliyor mu?

14. Pointers & Memory Lab Nasıl Çalışılmalı?

  1. Address ve dereference workshop’unda üç farklı değeri ayırın.
  2. Array ve matrix route’larında offset’i önce tahmin edin.
  3. Stack frame kapandığında hangi target’ların expired olduğunu işaretleyin.
  4. malloc/free akışında owner ve alias’ları izleyin.
  5. Dangling access’i Atlas uyarısından önce bulun.
  6. Raw pointer senaryosunu C++ smart pointer karşılığıyla kıyaslayın.
Pointers & Memory Lab’i açın ve ilk Lifetime Atlas trace’ini çalıştırın. Yapısal uygulama için Linked List Lab rehberine geçebilirsiniz.

Sonraki Adim: Bunlari da Oku

Bu yaziyi tamamladiysan, bir sonraki seviyeye gecmek icin su iceriklerle devam etmeni oneririz:

Ucretsiz Seviye Analizi ile Baslayalim

Mevcut seviyenizi hizlica analiz edip size en uygun ders planini birlikte cikaralim.

WhatsApp