我期待NULL指针异常,但我得到了输出222。这是怎么工作的?
int main()
{
int *p = (int*)malloc(0);
*p = 222;
cout << *p;
return 0;
}
答案 0 :(得分:2)
您的程序的行为是未定义。
通过malloc
传递0的行为是定义的实现:它可以返回0 或个指针。如果它返回一个指针,则必须将该指针传递给free
,但必须不引用该指针。
C和C ++在这方面没有区别。
答案 1 :(得分:0)
我期望NULL指针异常
您的期望被误导了。
首先,不能保证malloc
在分配0大小时会重推空指针。
第二,不能保证间接指向空指针(或malloc(0)
返回的任何指针)会导致异常。而是行为是不确定的。