2016-03-30 19 views
0

Şimdi OS X 10.10.5 kullanıyorum ve aşağıda gibi malloc ve yığın hakkında bir deney yapıyorum:Neden mal belleği dönüş değeri işlem bellek haritasında değil?

#include <stdio.h> 
#include <stdlib.h> 

int main() { 
    int *p; 
    p = malloc(sizeof(int)); 
    *p = 100; 
    printf("the malloc p pointer addr is %x\n", p); 
    getchar(); 
} 

koymak dışarı the malloc p pointer addr is c3404ba0 olduğu;
Adres 0xc3404ba0 adresinin işlem yığınının bir parçası olarak maclloc tarafından tahsis edildiğini düşünüyorum.

Sonra bellek harita almak için vmmap aracını kullanın sonucudur:
enter image description here

Biz 0xc3404ba0 yığın alanında olmadığını görebilirsiniz, ama o gerçekten ayrılan belleğe işaretçi bu. Bunun derdi ne? I% x yerine% p kullandıkları zaman, bu, hemen tamir


, çıkış the malloc p pointer addr is 0x7fe131404ba0
ve VMMap çıktısı: @Alex lobuna
enter image description here
sayesinde.

+4

görünüyor. Programınız 64bit modunda derlenmişse, işaretçiyi yazdırmak için '% x' kullanarak üst 32 biti kesecektir. Bunun yerine '% p' ile aynı şeyi deneyin ve sonuçları gönderin. –

+0

yanlış biçim belirtecini kullanarak başlatır ** tanımsız davranış ** http://stackoverflow.com/q/33648596/995714 http://stackoverflow.com/q/4231891/995714 http://stackoverflow.com/q/14504148/995714 http://stackoverflow.com/q/16864552/995714 –

cevap

4

Açıklamada yazdığım gibi 64 bit işletim sisteminde çalışıyormuşsunuz gibi görünüyor. Programınız 64bit modunda derlenmişse, %x işaretçisini yazdırmak için üst 32 biti kesecektir (%x tamsayılar için kullanılır). Bunun yerine %p ile deneyin ve sonuçları gönderin.

Benim tahminim 0xXXXXXXXXc3404ba0 bu aralık ait olduğunu olacaktır: Eğer 64bit OS üzerinde çalışan gibi

enter image description here