gpt4 book ai didi

c++ - 如果我对 float 变量使用 malloc 和 calloc 并将其分配给 int 那么其余 2 个字节会发生什么?

转载 作者:行者123 更新时间:2023-11-30 20:50:45 25 4
gpt4 key购买 nike

int x=(int)malloc(sizeof(float));

int y=(int)calloc(1,sizeof(double));

简而言之,如果我使用 malloc()calloc() 请求更大的内存块,但将其分配给较小内存的变量,那么会发生什么到额外的内存?

最佳答案

首先,malloc() 及其系列返回一个指向 void (void *) 的指针,我们将其存储到 “类型指针”,然后使用该指针将“类型”的值存储到内存位置。

对于对 malloc() 及其系列的调用,我们传递所需的大小(以字节为单位),如果成功,它们将返回指向所请求内存区域的指针(以字节为单位)。因此,只要 xyz 的计算结果相同,

  int * p = malloc(x);

或者,

  int * p = malloc(y);

  int * p = malloc(z);

将返回相同数量的内存。

现在,如果发生这种情况,在您的平台上,sizeof(int) == sizeof(float) == 4,那么,我们可以编写

  int * p = malloc(sizeof(int));

或者,

  int * q = malloc(sizeof(float));

  int * r = malloc(4);

它们都会返回相同数量的内存。

Note: The above statements are just for illustration, the best possible way to use malloc() is to use the form

  <someType> * var = malloc(sizeof(*var));

FWIW,(正如您在代码中所做的那样)将指针分配给整数类型是实现定义的行为。一般来说,不要这样做。

也就是说,您总是可以自由地分配比您需要的更多的内存,从 C 角度来看没有问题,只要您 free() 即可。例如,您可以为 10 个整数分配空间,但最终只使用其中 5 个。这不存在技术问题。

关于c++ - 如果我对 float 变量使用 malloc 和 calloc 并将其分配给 int 那么其余 2 个字节会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39688439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com