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