如果在使用malloc之后它会返回一个NULL指针并且你继续尝试使用该指针会发生什么?

时间:2017-11-20 01:55:07

标签: c malloc

我知道在使用malloc之后,你必须确保返回的指针不是NULL,但如果你没有做什么呢?

1 个答案:

答案 0 :(得分:4)

关于使用带有*运算符的空指针,2011 C标准(委员会草案N1570)在第6.5.3.2节第4段中说:“如果为指针分配了无效值,则行为一元 * 运算符未定义。“脚注指出空指针是无效值。

许多人会想到使用空指针尝试访问具有无效地址的内存,这会导致异常并在常见硬件和操作系统上终止程序。但是,现代编译器及其优化器非常复杂,并且对代码执行各种抽象的数学转换。结果是,如果您的代码具有未定义的行为,可能会发生各种令人惊讶的事情。

以其他方式使用空指针也会导致未定义的行为,包括将其与->运算符,下标运算符,+-二元运算符以及关系运算符一起使用运算符(<<=>>=)。