C语言 我使用 malloc(0) 作为指向 char 的指针,我的代码可以工作.为什么



我创建了一个指向char的指针数组。我使用malloc(0)为这些指针分配内存。

之后,我使用 scanf()malloc(0 分配的字节中输入一个单词,它起作用了。

为什么?

首先,来自malloc()的手册页,(强调我的(

如果 size 为 0,则 malloc() 返回 NULL稍后可以成功传递给 free() 的唯一指针值

因此,不能保证malloc(0)始终返回 NULL。因此,您的 NULL 检查可能不会成功。

然后,回答

为什么?

因为,如果malloc(0)返回一个指针,其他 han NULL,它只适合用作以后调用 free() 的参数,没有别的。在您的情况下,您正在尝试写入内存。这样做本质上是尝试写入无效内存,该内存未分配给程序。这将调用未定义的行为。

UB

的真正美妙之处在于,有时调用UB的程序似乎工作得很好

相关内容

  • 没有找到相关文章

最新更新