无意中看到这个问题。
malloc函数若申请0字节,它返回的将会是什么?会不会仍然是NULL?
在c语言深度剖析上看到这样的解释:申请0字节的内存,函数并不返回NULL,而是返回一个正常的内存地址。但是你却无法使用这块大小为0的内存,将此比喻成尺子上的某个刻度,说刻度本身并没有长度,只有某两个刻度一起才能量出长度。这个时候判断语句:
if(p == NULL)将不会起作用!
本人在xcode上测试,确实如此,会得到一个有效的地址!但是并不像作者所说的该指针不可用,指针仍然可用!(不知道原因,mark下)
然后本人又相继测试了用malloc分配一个负整数的字节时,如malloc(-1)等,返回的是NULL指针,不可用!但是若用负的浮点数时,如malloc(-2.5)等,则返回有效指针,且可用。
这个问题本人不知道怎么解决!
类似的还有:free(NULL),编译不会有问题,但这个语句做了什么?不知道!好比我们平时 malloc 一个指针 p,然后free(p),且令 p = NULL;然后再次 free(p),这会发生什么?不清楚