我使用malloc(0)作为char的指针,我的代码工作。这是为什么?

时间:2015-12-27 15:20:22

标签: c malloc

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

之后,我使用scanf()malloc(0分配的字节输入一个字,但是它有效。

为什么?

1 个答案:

答案 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 出现以正常工作