关于calloc vs malloc的C教程问题

chr*_*yal 10 c memory pointers memory-management

我正在学习本教程(http://theocacao.com/document.page/234).我对这一段感到困惑,主要是与calloc相关的行:

我们还可以使用malloc函数的变体,称为calloc.calloc函数有两个参数,一个值计数和一个基值大小.它还会在返回指针之前清除内存,这有助于避免在某些情况下出现不可预测的行为和崩溃:

最后一行让我感到困惑.清除记忆是什么意思?

Jar*_*Par 21

函数calloc将确保返回的内存中的所有字节都设置为0. malloc没有这样的保证.它返回的数据可以并且将包含看似随机的数据.

这种区别对于数据成员的初始化非常有用.如果0是结构中所有值的良好默认值,则calloc可以简化结构创建.

Foo* pFoo = calloc(1, sizeof(Foo));
Run Code Online (Sandbox Code Playgroud)

Foo* pFoo = malloc(sizeof(Foo));
pFoo->Value1 = 0;
pFoo->Value2 = 0;
Run Code Online (Sandbox Code Playgroud)

为清楚起见,省略了空检查.


小智 7

准确地说:

这在某些情况下有助于避免不可预测的行为和崩溃

应该读:

这在某些情况下隐藏不可预测的行为和崩溃非常有用