malloc(-1)返回NULL但malloc(0)不是为什么?怎么能分配0个内存空间

Hoo*_*lum 1 c memory malloc null

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

此代码显示"unsuccesful"但如果将0替换为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;

}
Run Code Online (Sandbox Code Playgroud)

cni*_*tar 10

它是实现定义的:

7.22.3-1

如果无法分配空间,则返回空指针.如果 请求的空间大小为零,则行为是实现定义的:返回空指针,或者行为就像大小是非零值一样,除了返回的指针不应该用于访问对象.

因此,它可以返回NULL,但它不具备对.另外,为了澄清malloc(-1)失败的原因,请注意其原型是:

void *malloc(size_t size);
             ^^^^^^
Run Code Online (Sandbox Code Playgroud)

因此,您将转换-1无符号类型,从而产生非常大的值.