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