calloc() and NULL

2019-02-24 18:13发布

I know that calloc allocates memory and writes zeroes to each cell, so my question is: is there a difference between using calloc or using malloc and running over the cells writing NULL to them? Are the zeroes of calloc equivalent to NULL?

2条回答
狗以群分
2楼-- · 2019-02-24 18:28

No, they are not always equivalent, but on most popular machines you'll be fine. calloc writes a bit pattern of all-zeros to the allocated memory, but the null pointer value might not be all-bits-zero on some machines (or even just for some types on some machines).

Check out the Null Pointers section of the C FAQ for lots and lots of information.

查看更多
Rolldiameter
3楼-- · 2019-02-24 18:32

NULL isn't guaranteed to have all bits set to 0, even thought it always compares equal to the integer constant 0.

Calloc will set all of the bits to 0 the same as a memset call would. It is permitted that the resulting value(s) will not compare equal to NULL.

Therefore they are not equivalent.

查看更多
登录 后发表回答