我知道在使用malloc之后,必须确保返回的指针不是NULL,但如果不是呢?
关于将空指针与*
运算符一起使用,2011年C标准(委员会草案N1570)在第6.5.3.2条第4段中规定:"如果向指针分配了无效值,则一元*运算符的行为是未定义的。"脚注指出,空指针是无效值。
许多人会认为使用空指针是试图访问具有无效地址的内存,这会导致异常并终止常见硬件和操作系统上的程序。然而,现代编译器及其优化器非常复杂,并对代码执行各种抽象数学转换。结果是,如果您的代码有未定义的行为,可能会发生各种令人惊讶的事情。
以其他方式使用空指针也可能导致未定义的行为,包括将其与->
运算符、下标运算符、+
和-
二进制运算符以及关系运算符(<
、<=
、>
和>=
)一起使用。