C dilinde dizeler başlatılıyor

0

Soru

C öğrenmeye başladım ve dizelerin sadece karakter dizileri olduğunu öğrendim. Değerlerin her an dizelerde olduğunu görmek istedim, bu yüzden vscode'da bir kesme noktası belirledim, yürütmeye adım attım ve tüm değerlere baktım.

int main()
{
    char a[4] = "foo";
    char b[4] = "bar";

    return 0;
}

Başlatma önce görmüştüm a[] dizi, bellekte zaten değerler var. screenshot of vscode while debugging.

Sorum şu, bu değerler nelerdir? Neden oradalar? Bunlar neyi temsil eder?

c
2021-11-24 06:29:21
4

En iyi cevabı

1

Bir değer tanımlarken, diğer sayıları içerebilecek belleğin bir bölümünü alır. Temel olarak hata ayıklama sekmenizde gösterilen sayılardır.

2021-11-24 14:32:02
0

Bir diziyi veya değişkeni ilk bildirdiğinizde, belleğe atanır ve bu bellek zaten bazı çöp değerleri içerebilir, bu nedenle bu şekilde yazdırılır

Çöp değeri herhangi bir şey olabilir, dil standardı ne olması gerektiğini belirtmez

2021-11-24 12:55:09
0

Bellek bellektir, başlatılmamış olabilir (çöple doldurulabilir) veya verilerle başlatılabilir.

Sizin durumunuzda, programınız ana işlevinize atladığında, bunun için yerel değişkenlerinizi içeren bir yığın oluşturuldu(yerel değişkeniniz bildirdiğiniz karakter dizisi, temelde bellekteki bir yere işaretçi). Söz konusu işaretçileri başlatmadan önce a ve b dizenize işaret etmek için, herhangi bir eski sayı içerebilirlerdi ve bu nedenle bu adresteki "dizeyi" okumaya çalışmak size daha fazla rastgele çöp verirdi.

Örneğin, yazdıysanız int a = 5; programınızda ve adım adım ilerlediğinizde, benzer şekilde, 5'i atamadan önce a'nın rasgele bir sayı içerebileceğini görürsünüz.

2021-11-24 07:01:48

Görüyorum. Ama anlayamadığım şey, programı her hata ayıkladığımda neden aynı değerleri görüyorum?
jon doe
-1

Tamsayılar veya diziler gibi yeni bir değer oluşturduğunuzda, sistem bu değerlere verilerini o adrese kaydetmek için bir adres verecektir. Diğer uygulamalar için bu adreste bazı veriler olabilir ve bu uygulamayı kapattıktan sonra RAM bunları kaldırmaz, bu nedenle başlatmadan önce bu verileri görürsünüz.

2021-11-24 07:08:54

Genel amaçlı çok kullanıcılı işletim sistemlerinde, kasıtlı olarak paylaşılan veriler dışında, bir işlemin belleği hiçbir zaman başka bir işlemden veri içermez. İşletim sistemi, güvenlik amacıyla başka bir işleme yeniden atamadan önce belleği temizler.
Eric Postpischil

Diğer dillerde

Bu sayfa diğer dillerde

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................