内存分配如何完成

时间:2018-09-21 10:55:58

标签: c++ c malloc

我期待NULL指针异常,但我得到了输出222。这是怎么工作的?

int main()
{
    int *p = (int*)malloc(0);
    *p = 222;
    cout << *p;
    return 0;
}

2 个答案:

答案 0 :(得分:2)

您的程序的行为是未定义

通过malloc传递0的行为是定义的实现:它可以返回0 个指针。如果它返回一个指针,则必须将该指针传递给free,但必须引用该指针。

C和C ++在这方面没有区别。

答案 1 :(得分:0)

  

我期望NULL指针异常

您的期望被误导了。

首先,不能保证malloc在分配0大小时会重推空指针。

第二,不能保证间接指向空指针(或malloc(0)返回的任何指针)会导致异常。而是行为是不确定的。