可能重复:
what does malloc(0) return ?
what’s the point in malloc(0)?
为什么malloc(0)返回有效的内存地址?有什么用?
答案 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)一样,它会返回一个复数...哎呀没有它...