首页 > 解决方案 > C中的堆分配

问题描述

据我了解,您可以使用相同的变量名重新分配堆,它将在空间中的不同位置分配内存。

但是,在本例中,我在第二个 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

标签: cdynamicmallocheap-memory

解决方案


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)

推荐阅读