This question already has answers here:
Closed 2 years ago.
behaviour of malloc(0)
(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/

10-11 21:59
查看更多