namespace std {
void *calloc(size_t nmemb, size_t size);
}
概要
任意の個数のオブジェクトへの配列用ポインタを動的に確保し、その領域を 0 で初期化する。
この関数で返されるポインタは、割当領域の先頭のポインタである。
領域の確保に失敗した場合は、nullptrを返す。
割り当てられたオブジェクトの寿命は、このメモリが割り当てられた時から、freeなどで解放されるまでである。
この関数は、静的ストレージにはアクセスせず、スレッドセーフである。
備考
calloc・malloc・reallocによって複数個の異なる領域が確保された場合、それらの連続性や順序は保証されない。- メモリリークを避けるため、この関数で確保したメモリは、
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