C dilinde otomatik bellek alanına (varsayılan olarak auto) sahip değişkenler, görünürlük alanlarına (genellikle bir fonksiyon) girildiğinde yığında oluşturulur ve çıkıldığında otomatik olarak yok edilir.
Özellikleri arasında:
Doğru ve yanlış kullanım örneği:
int* wrong() { int x = 42; return &x; // HATA: x fonksiyondan çıkınca yok olacak } void correct() { int y = 123; printf("%d ", y); // her şey yolunda }
Bir fonksiyondan yerel bir değişkenin adresini döndürürseniz ne olur?
Sık yapılan yanlış cevap: "Göstereci değeri koruyacaktır”.
Doğru cevap: Döndürülen adres, fonksiyondan çıkıldığında geçersiz hale gelir, bellek alanı otomatik değişkenler veya fonksiyonlar için yeniden tahsis edilir. Bu göstericilerin kullanımı tanımsız davranıştır.
Örnek:
int* myfunc() { int temp = 10; return &temp; // temp döndürüldükten sonra yok olur } int main() { int* p = myfunc(); printf("%d ", *p); // TANIMSIZ DAVRANIŞ }
Hikaye
Hikaye
Hikaye
Tıbbi bir kaydedicinin yazılımında, veri işleme hızlandırmak için yığında bir önbellek uygulandı. Yük altında yığın taştı ve bu da cihazın yeniden başlatılmasına ve hasta verilerinin kaybına neden oldu.