我在C中动态内存分配编写malloc((size_t)NULL)
会发生什么?
int main()
{
char *ptr = malloc((size_t)NULL);
}
是否在堆部分中分配内存?或是否未定义行为?
答案 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。