3

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のように単一の引数を取らないのはなぜですか?

4

4 に答える 4

2

同じです。割り当ては、サイズを割り当てるために、要素数 x 1 つの要素のサイズを行います。

1ブロックになるので構いません。

于 2013-09-26T06:52:31.163 に答える
1

割り当てブロックが連続しているため、実質的に同じです。number_of_elements * size_of_element を割り当てるため、サイズ 4 の 10 個の要素またはサイズ 40 の 1 個の要素の両方が 40 バイトを割り当てることになります。

于 2013-09-26T06:53:35.293 に答える
0

calloc(10,4) はサイズが 4 になる要素を 10 個割り当てますが、calloc(1,40) はサイズが 40 の要素を 1 つ割り当てます。

参照: http://www.tutorialspoint.com/c_standard_library/c_function_calloc.htm

サイズとは、割り当てられたすべての要素を意味します。

于 2013-09-26T06:52:13.377 に答える