可能重复:
什么';malloc(0)中的点是什么
malloc(0)返回什么?
这段代码显示"unscceptful",但如果将-1替换为0,它将不会为NULL。我不知道你如何分配0内存空间。我知道没有用,但不是NULL==0L,所以它也应该==0。。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int *ptr;
if((ptr = malloc(-1)) == NULL)
printf("unsuccessful: no memory space was allocated.n");
else{
printf("successful: memoryspace was allocated. n");
free(ptr);
}
getch();
return 0;
}
它的实现定义:
7.22.3-1
如果无法分配空间,则返回一个空指针。如果请求的空间大小为零,行为为实现定义:返回一个空指针,或者行为就像大小是某个非零值,除了返回的指针不应用于访问对象。
因此,它可以返回NULL
,但它没有。此外,为了澄清malloc(-1)
失败的原因,请注意它的原型是:
void *malloc(size_t size);
^^^^^^
因此,您正在将-1
转换为无符号类型,从而产生一个非常大的值。