22
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

C言語 mallocとcallocの違い

Posted at

概要

calloc関数は、malloc関数で確保して、領域を0で初期化する。

malloc

malloc関数は、動的にメモリ領域を割り当て、そのメモリアドレスを返す関数です。
確保されたメモリ領域には、不定値を持ったオブジェクトが置かれた状態です。

#include <stdlib.h>

void *malloc(size_t size);

memsetで初期化をすることでcallocのように使うことが出来ます。

if (!(p = (char *)malloc(sizeof(char) * 4)))
    return (0);
memset(p, '\0', 4);

calloc

malloc関数と異なり、確保された領域の全ビットが自動的に0で埋められます。
整数型であれば0で初期化されていると考えて良いですが、他の型の場合は想定と異なる意味を持つかもしれません。たとえば、ポインタの場合、「全ビットが 0」という状態が、ヌルポインタを表すとは限りませんし、浮動小数点型の場合、「全ビットが 0」=「0.0」とはならないかもしれません。

第1引数に要素数を、第2引数に要素1つ分の大きさを指定します。

#include <stdlib.h>

void *calloc(size_t count, size_t size);
if (!(p = (char *)calloc(4, sizeof(char))))
    return (0);

参考

ポインタ⑤(動的なメモリ割り当て) | Programming Place Plus C言語編 第35章

BohYoh.com-C/C++ FAQ callocとmallocの違いは何ですか。

BohYoh.com-C/C++ FAQ mallocに対するcallocのメリットは何ですか。

callocの速度 - プログラマ専用SNS ミクプラ

BohYoh.com-C/C++ FAQ mallocに対するcallocのメリットは何ですか。

22
11
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?