Yazarlar Sözlük Makaleler Yardım Masası Gözlük Forum İstatistik

Tüm Başlıklar XML

1.  yığın taşması. hafızada ayrılan bölgenin yeterli gelmediği anda ortaya çıkar. mesela 8 bit uzunluğunda, byte tipinde bir değişkene 256 veya daha büyük değeri atadığımız zaman ortaya çıkar.

C# dilinde bunu engellemek için bkz: unchecked, checked
bateristt
19 Mayıs 2006 11:49
2.  Kendini çağıran fonksiyonların* sınırsız döngüye girmesi de stack overflow'a neden olur.

Neden?
Çünkü; en son çalıştırılan fonksiyonlar stack'e eklenerek bellekte yer işgal eder. Sınırsız sayıda fonksiyon çağrısının belleğe eklenmesi, programın bir süre çalıştıktan sonra "burada bize ayrılan belleğin sonuna geldik, haftaya aynı gün aynı saatte tekrar buluşmak üzere. Hoşçakalıın." hatasıyla sonlanmasına neden olur. (Eskiden bu tür hatalar işletim sistemini göçertecek kadar ileriye gidebilirdi. Korumalı mod sayesindedir ki artık her process en fazla kendine zarar verebiliyor.)

Aslında bir değişkene kapasitesinin üstünde değer atamak sadece OverflowException'a neden olur. Sınırsız döngüye girmiş bir rekürsif fonksiyonun sebep olduğu hata ise StackOverflowException'dır. StackOverflowException'a düştüğünüz durumlarda, bu hataya sebep olan thread "Stack overflow" modundadır. Bu durumdaki bir thread debugger'ınıza cevap veremez. Ölüdür artık.

Buraya kadar yapılan laf salatasını aşağıdaki örneklerle incelemek mümkündür. (Test etmedim, ama örnekler hata vermeyecek kadar kısa zaten.)

Unchecked modda çalışan (default mod) kapasite taşmasına örnek:
int i = Int32.MinValue;     // i'nin değeri -2 milyar küsür.
int j = Int32.MinValue - 1; // j'nin değeri +2 milyar küsür. (min-1 = max felsefesi)

Checked ile dikkatli davranan bir örnek;
checked
{
   int i = Int32.MinValue;     // i'nin değeri -2 milyar küsür.
   int j = Int32.MinValue - 1; // GÜMM! OverflowException
   //...
}

Kendini çağırmakta sınır tanımayan fonksiyona ilişkin son örnek:
void fonk() { fonk(); }  // kendini çağıran dikkatsiz fonksiyon.
fonk();                  // bu fonksiyonu çağıran dikkatsiz coder. GÜMM! StackOverflowException.

fizikci
20 Mayıs 2006 15:55
Bu konuda bildiklerinizi bizlerle paylaşabilirsiniz
Tabi bunun için yazarsanız giriş yapmalı, yazar değilseniz yazar olmalısınız.


Bu başlığa bkz veren girişlerin başlıkları nedir?

Bu başlığa bkz veren girişler başka hangi başlıklara bkz verdiler?
» checked » C#

© 2005, Bilişim Kulübü. (1093 ms)
Ne yapabilirsin: SubtitleClick ile İngilizceni Geliştir, Çınar Framework ile kod yaz, Eglencelik.org'ta biraz eğlen