【发布时间】:2012-09-02 11:12:58
【问题描述】:
可能重复:
what's the point in malloc(0)?
what does malloc(0) return?
此代码显示“不成功”,但如果将 -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;
}
【问题讨论】:
-
当
malloc失败并返回NULL它应该设置errno并且你应该打印strerror(errno) -
“我不明白你怎么能分配 0 个内存空间”——只是不要调用 malloc() !!
-
是的,我倾向于通过一种清理方式分配一些东西(或者什么都没有)的多种可能性。无需检查是否调用了
malloc。从 C++ 类的角度来看它更有意义,但我想它可能发生在 C 中。 -
我不会使用它。这是一个“如果”的问题。
-
NULL == 0L 不一定,不是。在 C(不是 C++)中,NULL 被键入为一个值为 0 的指针
(void *)(0),所以不要陷入在所有情况下都将 NULL 等同于零的陷阱。