我在 C 语言中为动态内存分配编写malloc((size_t)NULL)
会发生什么?
int main()
{
char *ptr = malloc((size_t)NULL);
}
它是在堆部分中分配内存吗?还是未定义的行为?
写
malloc(NULL)
会发生什么..
等等,停下来,你不写malloc(NULL)
,你为什么要?
要malloc()
的参数是预期内存的"大小",它不应该是空指针常量。
引用C11
,第7.22.3.4章,(强调我的)
void *malloc(size_t size);
malloc
函数为大小由size
和 其价值是不确定的。
也就是说,在大多数情况下,NULL
由整数常量值0
表示,因此malloc(NULL)
等价于malloc(0)
,这又是实现定义的行为。
引用章节 §7.22.3./P1
[...]如果大小 请求的空间为零,行为是实现定义的:空指针 返回,或者行为就像大小是某个非零值,除了 返回的指针不得用于访问对象。
> 这将分配由常量NULL
定义的内存量。如果NULL == 0
,则行为是实现定义的。