我期待空指针异常,但我得到输出 222。这是如何工作的。
int main()
{
int *p = (int*)malloc(0);
*p = 222;
cout << *p;
return 0;
}
程序的行为未定义。
传递 0 的malloc
的行为是实现定义的:它可以返回 0或指针。如果它返回指针,则必须将该指针传递给free
,但不得服从该指针。
C 和 C++ 在这方面没有区别。
我期待空指针异常
你的期望被误导了。
首先,malloc
不保证在分配 0 大小时会重新输出空指针。
其次,定向空指针(或malloc(0)
返回的任何指针(不能保证会导致异常。相反,行为是不确定的。