This question already has answers here:
Closed 2 years ago.
behaviour of malloc(0)
(3个答案)
我在C中为动态内存分配写
它是否在堆部分分配内存?还是行为不明确?
其值是不确定的。
也就是说,在大多数情况下,
引用第7.22.3节/P1
[…]如果
请求的空间为零,行为是由实现定义的:空指针
返回,或者行为就像大小是一些非零值,除了
返回的指针不能用于访问对象。
(3个答案)
我在C中为动态内存分配写
malloc((size_t)NULL)
时会发生什么情况?int main()
{
char *ptr = malloc((size_t)NULL);
}
它是否在堆部分分配内存?还是行为不明确?
最佳答案
发生什么事我写malloc(NULL)
。。
等等,停下,你不写,为什么?malloc(NULL)
的参数是预期内存的“大小”,不应是空指针常量。
引用malloc()
,第7.22.3.4章(重点是我的)
void *malloc(size_t size);
C11
函数为其大小由malloc
指定的对象分配空间,并且其值是不确定的。
也就是说,在大多数情况下,
size
由整定值NULL
表示,因此0
等同于malloc(NULL)
,这也是实现定义的行为。引用第7.22.3节/P1
[…]如果
请求的空间为零,行为是由实现定义的:空指针
返回,或者行为就像大小是一些非零值,除了
返回的指针不能用于访问对象。
关于c - 如果在C中使用malloc((size_t)NULL)[会重复],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43406677/