【发布时间】:2022-01-12 01:16:39
【问题描述】:
我希望在这里听起来不是很愚蠢,但是 NULL 模块在执行此操作时是否真的需要内存分配:
TheNull = malloc(sizeof(NULL));
如果是真的,内存中怎么可能存在没有分配内存的东西呢?
【问题讨论】:
-
在架构 WORD 大小中,
NULL通常不是定义为0吗? -
NULL保证为值为0或(void *)0的整数常量。我不会指望所有这些都与sizeof(void*)相同。 -
@ikegami:
NULL可以是任何值为零的整数常量表达式,包括不是整数常量的表达式,尽管我不知道为什么有人会这样做。 -
TheNull = malloc(sizeof(NULL));这是你写的东西,还是你在别人的代码中找到的东西?或者它是您为了询问而发明的假设示例?无论如何,它要么是错误的,要么是毫无意义的。 -
@AndrewHenle:根据 C 2018 6.3.2.3 3,空指针常量 是“值为 0 的整数常量表达式,或此类表达式转换为 @987654330 类型@”。 “implementation-defined”部分表示实现可以将
NULL定义为(3*4 - 12)或(void *) (3*4 - 12);特定的表达式是灵活的,但它必须是值为 0 的整数常量表达式或转换为void *的此类表达式这一事实并不灵活。
标签: c memory-management malloc