Pointer da bellek adresim yanlış çıkıyor sebebini çözemedim!

#include

int main()
{
int a = 10;
int* aPtr = &a;
std::cout << aPtr;

}

Burada çıktı olarak 008FFC64 çıkması lazım ama bende neden bu şekilde çıkıyor.

eğitmende görünen adresle sizde görünen adresin farklı olması çok normal. hafızada boş bir yere koyuyor değişkeninizi. sizde o adres müsaitmiş o adrese koymuş, eğitmende 008FFC64 adresi müsaitmiş 008FFC64 adresine koymuş.

5 Beğeni

Peki her kodu çalıştırdığımda farklı bir adres verebiliyor bu normal mi mesela bir sefer 000000FC2ACFF914 bu adresi verdi 000000AFAC2FF7B4 bi sefer bunu ve daha başka da verebiliyor.

evet. söylediğim gibi o an hangi adres boşsa o adreste tutuyor değişkeninizi.

Duruma gore sabit, veya kriptografik bir sekilde rastgele alinmis bir adres de olabilir. Bu arada pointer adreslerinin ne sekilde yazilacagi da standartlasmis degil.

C’nin tek soyledigi ayni objeye (veya array durumunda array’in sondan bir sonraki elemanina) isaret eden pointer’larin birbirleriyle aritmetik iliskileri olacagi.

2 Beğeni

Normal.

Burada ayrılacak alanı işletim sistemi belirliyor.

Korumalı modda çalışan işletim sistemleri belleği nasıl yönetiyorsa ona göre bellek tahsis ediyor.

C/C++ kullananlara bellek adresleri eski korumalı modda olmayan işletim sistemlerindeki gibi anlatıyorlar sonra gerçek işletim sistemlerinde bellek yönetimini ele alan işletim sistemleri bellek adreslerini kendi düzenliyor.

Yani sizin gördüğünüz adresler de gerçek adres değil. İşletim sisteminin size tahsis ettiği sanal belleğin adresi.

Bu sanal bellek adresleri sonra gerçek bellek adresleri ile kendi içinde eşleştiriyor.