【发布时间】:2013-09-26 06:48:46
【问题描述】:
calloc(10,4) 和 calloc(1,40) 有什么区别?
我看到了这种行为:
Thing** things = (Thing**)calloc(1, 10 * sizeof(Thing*));
// things[0] != 0
Thing** things = (Thing**)calloc(10, sizeof(Thing*));
// things[0] == 0
我想知道为什么。编辑:失去理智是为什么,现在两者似乎都为零......为了至少让这个问题变得有趣,为什么 calloc 不只接受一个参数,比如 malloc?
【问题讨论】:
-
+1;我自己也想过这个。我想知道它是否在所有情况下都完全相同;即标准是否规定了这一点?
-
一个(稍微有用的)区别是
calloc(n, sizeof(Thing))允许您分配超过SIZE_MAX字节,这在理论上是可能的。而n*sizeof(Thing)永远不能大于SIZE_MAX。因此calloc理论上可以用于分配比malloc允许的更多的内存。