Şimdi Ara

C de diziler

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
3 Misafir (1 Mobil) - 2 Masaüstü1 Mobil
5 sn
5
Cevap
0
Favori
271
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • 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.
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.