Распределение кучи в C - PullRequest
       23

Распределение кучи в C

0 голосов
/ 24 сентября 2018

Насколько я понимаю, вы можете перераспределить кучу, используя одно и то же имя переменной, и она будет распределять память в другом месте в пространстве.

Однако в этом примере я получаю тот же адрес памяти во втором malloc для переменной-указателя x.Любые идеи?

void main()
{
    int *x = (int*)malloc(sizeof(int)); //allocate space for int value
    *x = 100;   //dereference x for value
    printf("The value of x is %i address is %p\n",*x, &x);

    int *y = (int*)malloc(sizeof(int)); //allocate space for int value
    *y = 150;   //dereference x for value
    printf("The value of y is %i address is %p\n",*y, &y); 

    x = (int*)malloc(sizeof(int));  //allocate space for int value
    *x = 400;   //dereference x for value
    printf("The value of x is %i address is %p\n",*x, &x);
}

GCC дает мне это:

The value of x is 100 address is 0xffffcc08
The value of y is 150 address is 0xffffcc00
The value of x is 400 address is 0xffffcc08

1 Ответ

0 голосов
/ 24 сентября 2018
printf("The value of x is %i address is %p\n",*x, &x);

&x здесь он дает адрес переменной x, а не то, на что он указывает.Чтобы получить адрес, на который он указывает, используйте следующее:

printf("The value of x is %i address is %p\n",*x, (void *)x)
...