Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中的堆分配_C_Dynamic_Malloc_Heap Memory - Fatal编程技术网

C语言中的堆分配

C语言中的堆分配,c,dynamic,malloc,heap-memory,C,Dynamic,Malloc,Heap Memory,我的理解是,可以使用相同的变量名重新分配堆,它将在空间中的不同位置分配内存 然而,在这个例子中,我在第二个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

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

然而,在这个例子中,我在第二个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
&x
这里它给出了变量x的地址,而不是它所指向的对象。要获取其指向的地址,请使用以下命令:

printf("The value of x is %i address is %p\n",*x, (void *)x)
&x
这里它给出了变量x的地址,而不是它所指向的对象。要获取其指向的地址,请使用以下命令:

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

&x
为您提供指针的地址,而不是它指向的内存地址。此外,它不必位于不同的位置……哇,真是个大脑屁。非常感谢。在C语言中,分配的内存需要在最后释放。如果覆盖原始
x
,原始内存仍将被分配,但将永远丢失。也请看一下
realloc()
。此外,.OT:请注意,当您第二次分配到
x
时,内存泄漏。顺便说一句:你不需要从
malloc
&x
中转换返回值,它给出的是指针的地址,而不是指针指向的内存地址。此外,它不必位于不同的位置……哇,真是个蠢货。非常感谢。在C语言中,分配的内存需要在最后释放。如果覆盖原始
x
,原始内存仍将被分配,但将永远丢失。也请看一下
realloc()
。此外,.OT:请注意,当您第二次分配到
x
时,内存泄漏。顺便说一句:您不需要从
malloc