c语言 - malloc(-1) 返回 NULL 但 malloc(0) 不返回为什么?如何分配 0 内存空间



可能重复:
什么';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转换为无符号类型,从而产生一个非常大的值。

相关内容

  • 没有找到相关文章

最新更新