gpt4 book ai didi

C - 计算总和并将其乘以 malloc() 中的 sizeof

转载 作者:行者123 更新时间:2023-11-30 16:57:20 26 4
gpt4 key购买 nike

我对 malloc() 中的内存分配有疑问。我有一个 int 值k。这些方式分配有什么区别

...=(int*)malloc(k*sizeof(int));

...=(int*)malloc(((2*k-1)-k+1)*sizeof(int));

知道(2*k-1)-k+1) == k

两者的结果是相同的或者在第二种情况下,即使((2*k-1)-k+1) == k,可以改变一些东西吗?

最佳答案

首先,please see this discussion on why not to cast the return value of malloc() and family in C. .

也就是说,malloc() 接受要分配的内存字节数的参数。

引用 C11,第 §7.22.3.4 章,malloc() 函数

void *malloc(size_t size);

The malloc function allocates space for an object whose size is specified by size [...]

因此,只要 xy 计算出相同的值,

malloc(x * sizeof(sometype))

malloc(y * sizeof(sometype))

如果调用成功,将为您提供具有相同内存量的指针以供访问。

最后,最好的方法是不使用 sizeof 运算符的硬编码值,而使用变量本身。使代码更加健壮,例如

  int *p = NULL;
.
.
.
p = malloc (x * sizeof(*p)); // type of `p` can change,
// this statement need not be changed

关于C - 计算总和并将其乘以 malloc() 中的 sizeof,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39579074/

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