如果C语言中的malloc((size_t)为NULL)会发生什么

时间:2017-04-14 06:54:46

标签: c pointers gcc malloc dynamic-memory-allocation

我在C中动态内存分配编写malloc((size_t)NULL)会发生什么?

int main()
{
    char *ptr = malloc((size_t)NULL);
}

是否在堆部分中分配内存?是否未定义行为?

2 个答案:

答案 0 :(得分:4)

  

我写的是malloc(NULL) ..

等等, 停止 ,你不写malloc(NULL),为什么?

malloc()的参数是预期内存的“大小”,即应该是空指针常量。

引用C11,章节§7.22.3.4,(强调我的

void *malloc(size_t size);
     

malloc函数为大小由size 指定的对象分配空间,   其价值是不确定的。

也就是说,对于大多数情况,NULL由整数常量值0表示,因此malloc(NULL)等同于malloc(0),这也是实现定义的行为。< / p>

引用章节§7.22.3./P1

  

[...]如果大小   请求的空间为零,行为是实现定义的:空指针   返回,或者行为就好像大小是非零值,除了   返回的指针不得用于访问对象。

答案 1 :(得分:0)

这将分配常量NULL定义的内存量。如果NULL == 0,则行为为implementation defined