我创建了一个指向char
的指针数组。我使用malloc(0)
为这些指针分配内存。
之后,我使用scanf()
向malloc(0
分配的字节输入一个字,但是它有效。
为什么?
答案 0 :(得分:5)
首先,来自malloc()
malloc()
,(强调我的)
如果尺寸为0,则
NULL
会返回free()
,或唯一的指针值,以后可以成功传递给malloc(0)
。
因此,不能保证malloc(0)
始终会返回NULL。因此,您的NULL检查可能不会成功。
然后,回答
为什么?
因为,如果free()
返回一个指向其他han NULL的指针,它只适合用作以后调用while(true)
{
if(DateTime.Now.Hour == 6 && DateTime.Now.Minute == 0)
Processmethod();
else
Thread.Sleep(1000)
}
的参数,没有别的。在您的情况下,您正在尝试将写入内存。这样做本质上是尝试写入无效内存,这是一个未分配给程序的内存。这会调用man page。
UB的真正的美丽是,有时,程序调用UB 出现以正常工作 。