C de int a[5] şeklinde 5 elemanlı bir dizi tanımladığımızda bu diziyi kullanarak a[9]=5 şeklinde bir atama yapabiliyoruz ve bu değeri yazdırmak ya da aritmetik işlem yapmak istediğimizde sorun çıkmıyor. Eğer dizi boyutları böyle dinamik olarak değişiyorsa neden başlangıçta dizi boyutunu belirlememiz gerekli
Sınırın dışına çıkarsan değerin doğruluğunun bir garantisi yok. Belleğin o bölümünü başka bir değişken veya program da kullanıyor olabilir. Sonuçta programın veya çalışan başka bir program çökebilir veya yanlış sonuç verebilir. Kısacası deneme bile Dinamik olarak ayırmak istiyorsan malloc()/free() gibi fonksiyonlar kullanabilirsin.
Dizi boyutları dinamik olarak değişmiyor. C' de dizilerin sınır kontrolü yapılmaz, tamamen programcının sorumluluğundadır.
int a[5]; dediğin zaman yığın bölgesinde sizeof(int) * 5 byte buraya tahsis edilir. Eğer sen bu şekilde altalta dizi veya değişken bildirimleri yaparsan hepsi yığında arka arkaya dizilir. Dizileri bu şekilde kafana göre uzatırsan diğer verileri bozman kaçınılmaz olur.
Ben şimdi denedim ve 2 tane 5 elemanlı dizi oluşturdum. İlk diziye 10 eleman yazdım, ikinci diziyi normal sınırda fakat farklı değerlerde yazdım ve ilk dizinin sınır dışına çıkan bir elemanının üzerine yazılarak bozuldu. Tabi bu ortamına göre değişir. (Bendeki Linux x64 + gcc 4.7)
Bunun dışında fonksiyon çağırma bilgileri de yığına yazıldığı için bu şekilde taşmalar programı yanlış bölgelere dallandırabilir ve program anında çakılır.
Verdiğiniz bilgiler için teşekkürler ben daha yolun başında olduğum için bazen kafam karışıyor. Bende şimdi uğraşırken çalışma zamanlı hatalar aldım. tekrar teşekkürler
Bellekte gereksiz yere yer işgalini önlemek adına bu şekilde dinamik olması çok iyi bir özellik.
yeni mesaja git
Yeni mesajları sizin için sürekli kontrol ediyoruz, bir mesaj yazılırsa otomatik yükleyeceğiz.Bir Daha Gösterme