为什么要calloc采用两个参数而不是一个malloc?
具体来说,由于以下表达式之间没有区别(或存在?):
calloc (a, b);
calloc (b, a);
calloc (a * b, 1);
calloc (1, a * b);
Run Code Online (Sandbox Code Playgroud)
为什么不接受要分配的总字节数?这个界面背后的理由是什么?为什么这不适用于malloc?
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
Run Code Online (Sandbox Code Playgroud)
我想知道为什么。编辑:失去理智是为什么,两者现在似乎都导致零...至少使问题变得有趣,为什么calloc不能只接受单个参数,例如malloc?
我今天花了很长时间试图弄清楚为什么一个读取文本文件的超级简单的 C 函数不起作用。我能够通过在calloc函数中交换参数来使其工作:
代替:
calloc(1, size_of_the_memory_to_allocate)
我做了:
calloc(size_of_the_memory_to_allocate, 1)
因此,我做了 20 个大小为 1 的元素,而不是 1 个大小为 20 的元素。
calloc(size, 1)
Run Code Online (Sandbox Code Playgroud)
分配上有区别吗?
EDIT2:我想我对这个问题不够清楚,或者被误解了。问题是:“为什么使用 calloc 分配指向指针的指针需要交换参数?”。这不是关于调试代码,也不是我要求任何人运行它,而是关于如何calloc工作。@chqrlie 给出的答案正是我想要的。我想我在向问题中添加任何代码时犯了一个错误,而读者却专注于它,而不是我所要求的内容。所以,这是一个编辑,现在 chqrlie 的答案非常合适。如果这仍然对其他用户没有帮助,让我们删除问题并完成它。