我创建了一个指向char
的指针数组。我使用malloc(0)
为这些指针分配内存。
之后,我使用 scanf()
在 malloc(0
分配的字节中输入一个单词,它起作用了。
为什么?
首先,来自malloc()
的手册页,(强调我的(
如果 size 为 0,则
malloc()
返回NULL
或稍后可以成功传递给free()
的唯一指针值。
因此,不能保证malloc(0)
始终返回 NULL。因此,您的 NULL 检查可能不会成功。
然后,回答
为什么?
因为,如果malloc(0)
返回一个指针,其他 han NULL,它只适合用作以后调用 free()
的参数,没有别的。在您的情况下,您正在尝试写入内存。这样做本质上是尝试写入无效内存,该内存未分配给程序。这将调用未定义的行为。
的真正美妙之处在于,有时调用UB的程序似乎工作得很好。