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

时间:2010-06-24 13:55:42

标签: c

  

可能重复:
  what does malloc(0) return ?
  what’s the point in malloc(0)?

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

5 个答案:

答案 0 :(得分:8)

  

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

资料来源:The Open Group的malloc

答案 1 :(得分:2)

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

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

答案 2 :(得分:2)

它不会返回有效地址。

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

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

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

答案 3 :(得分:2)

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

答案 4 :(得分:0)

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

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