我创建了一个指针数组char
.我曾经malloc(0)
为这些指针分配内存.
在那之后,我过去只用scanf()
一个字输入分配的字节,malloc(0
并且它起作用.
这是为什么?
首先,从手册页的malloc()
,(重点煤矿)
如果尺寸是0,则
malloc()
返回任一NULL
,或可在以后成功传递到一个唯一的指针值free()
.
因此,无法保证malloc(0)
始终返回NULL.因此,您的NULL检查可能不会成功.
然后,回答
这是为什么?
因为,如果malloc(0)
返回一个指向其他han NULL的指针,它只适合用作以后调用的参数free()
,没有别的.在你的情况,你想写出到内存.这样做本质上是尝试写入无效的内存,一个未分配给程序的内存.这会调用未定义的行为.
在真正的美 UB的是,有时,程序调用UB 出现工作就好了.