1

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

此代码显示“不成功”,但如果将 -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;

}
4

1 回答 1

12

它是实现定义的:

7.22.3-1

如果无法分配空间,则返回空指针。如果 请求的空间大小为零,则行为是实现定义的:要么返回空指针,要么行为就好像大小是某个非零值,但返回的指针不应用于访问对象.

所以它可以返回NULL,但不是必须的。此外,为了澄清malloc(-1)失败的原因,请注意它的原型是:

void *malloc(size_t size);
             ^^^^^^

因此,您正在转换-1unsigned type,从而产生非常大的值。

于 2012-09-09T07:24:52.043 回答