为什么malloc(0)返回有效的内存地址? 什么用途?

可能重复:
malloc(0)返回什么?
malloc(0)有什么意义?

为什么malloc(0)返回有效的内存地址? 什么用途 ?

如果请求的空间大小为0,则行为是实现定义的:返回的值应为空指针或唯一指针。

资料来源:The Open Group的malloc

我想这个地址只有在你想使用它的0个字节时才有效。 使用可能不需要专门处理如下情况:

 char * foo = malloc(size); // do something with foo free(foo); 

它不会返回有效地址。

malloc(0)的结果是实现定义的,因此不可靠。

某些编译器实现将导致它返回NULL指针,其他编译器可能返回一些其他值(但它仍然不能/不应该用于访问内存)。

无法使用内存(但可能需要free()ing)。

它不是在C中强制规定的(但它在C ++中是强制要求的)。 在某些情况下,对象没有状态(因此具有空大小),但它们的身份很重要。 在这种情况下,如果需要动态分配它们,则需要一个返回有效的分配器,并且需要大小为0的不同对象。

我无法想象它的用途,但是,它可能是malloc设计的结果:如果它更容易支持它而不是不支持,它应该得到支持。

正如可以接受asin(4)一样,它会返回一个复数…哎呀它没有……