我使用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的程序似乎运行很好