c - 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
解决方案
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)
推荐阅读
- python - 如何获取TensorFlow模型中输出节点的名称
- json - 根据属性反序列化两个不同的对象
- python - 从包含 dict 的 pandas 列中提取有用信息
- amazon-web-services - EC2 - 添加第二个接口和 pPrivat IP 导致没有链接
- javascript - WebGL 警告:texImage:跨域元素需要 CORS
- c# - 尝试使用数组输入 10 个数字,然后在每次输出后将它们写出来
- c# - NuGet 对新下载的包返回“包完整性检查”
- javascript - 无法在 Dynatrace 中执行 Javascript 正则表达式
- elasticsearch - 全文搜索引擎和安全性
- sql-server - 需要帮助理解在多对多表之间建立关系的正确方法