如果 malloc((size_t)NULL) 在 C 中会发生什么



我在 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,则行为是实现定义的。

相关内容

  • 没有找到相关文章

最新更新