最終更新日時(UTC):
が更新

履歴 編集

function
<cstdlib>

std::calloc

namespace std {
  void *calloc(size_t nmemb, size_t size);
}

概要

任意の個数のオブジェクトへの配列用ポインタを動的に確保し、その領域を 0 で初期化する。

この関数で返されるポインタは、割当領域の先頭のポインタである。

領域の確保に失敗した場合は、nullptrを返す。

割り当てられたオブジェクトの寿命は、このメモリが割り当てられた時から、freeなどで解放されるまでである。

この関数は、静的ストレージにはアクセスせず、スレッドセーフである。

備考

  • callocmallocrealloc によって複数個の異なる領域が確保された場合、それらの連続性や順序は保証されない。
  • メモリリークを避けるため、この関数で確保したメモリは、freeなどを使い、メモリ解放するべきである。

#include <cstdio>
#include <cstdlib>

int main()
{
  int* p1 = std::calloc(4, sizeof(int));    // 4個のint配列のポインタを確保、0に初期化
  int* p2 = std::calloc(1, sizeof(int[4])); // 上と同じ
  int* p3 = std::calloc(4, sizeof *p3);     // 上と同じ

  if (p2)
  {
    for (int n = 0; n < 4; ++n)
      std::printf("p2[%d] == %d\n", n, p2[n]);
  }

  std::free(p1);
  std::free(p2);
  std::free(p3);
}

出力例

p2[0] == 0
p2[1] == 0
p2[2] == 0
p2[3] == 0

関連項目

  • free:確保されたメモリを解放する。

参照

  • C99: 7.20.3 Memory management functions