次の方法で共有


calloc

要素を 0 に初期化した配列のメモリを割り当てます。

構文

void *calloc(
   size_t number,
   size_t size
);

パラメーター

number
要素の数。

size
各要素の長さ (バイト単位)。

戻り値

calloc は、割り当てた領域へのポインターを返します。 戻り値によって指されるストレージ・スペースは、任意のタイプのオブジェクトのストレージ用に適切にアラインされます。 void 以外の型へのポインターを取得するには、戻り値の型キャストを使用します。

解説

calloc 関数は、それぞれが sizeバイトの長さである要素 number 個を持つ配列のための記憶域を割り当てます。 各要素は 0 に初期化されます。

calloc を実行したときに、メモリの割り当てに失敗した場合、または要求されたメモリ量が errno を超える場合は、ENOMEM_HEAP_MAXREQ に設定されます。 このエラー コードやその他のエラー コードについては、「errno_doserrno_sys_errlist、および _sys_nerr」を参照してください。

Microsoft の実装では、number または size がゼロの場合、calloc ではゼロではないサイズの割り当て済みブロックへのポインターを返します。 返されたポインターに対して読み取りまたは書き込みを試みると、未定義の動作が発生します。

calloc では、C++ の _set_new_mode 関数を使用して "新しいハンドラー モード" を設定します。 新しいハンドラー モードは、エラーが発生したときに、calloc_set_new_handler によって設定された新しいハンドラー ルーチンを呼び出すかどうかを指定します。 calloc では、既定で、メモリの割り当てエラーの際に新しいハンドラー ルーチンを呼び出しません。 この既定の動作をオーバーライドすると、calloc では、メモリの割り当てに失敗したときに、new 演算子が同じ理由で失敗したときと同じ方法で、新しいハンドラー ルーチンを呼び出すことができます。 既定の動作をオーバーライドするには、次の関数を呼び出します。

_set_new_mode(1);

プログラムの早い段階で、または NEWMODE.OBJ にリンクします ( リンク オプションを参照してください)。

アプリケーションが C のランタイム ライブラリのデバッグ バージョンにリンクされている場合、calloc_calloc_dbg として解決されます。 デバッグ プロセス中にヒープを管理する方法の詳細については、「 CRT デバッグ ヒープを参照してください。

calloc__declspec(noalias)__declspec(restrict) でマークされている場合、この関数ではグローバル変数を変更せず、返されるポインターがエイリアス化されない保証があることを意味します。 詳細については、次のトピックを参照してください。 noalias および restrict

既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「CRT でのグローバル状態」を参照してください。

要件

ルーチンによって返される値 必須ヘッダー
calloc <stdlib.h> および <malloc.h>

互換性の詳細については、「 Compatibility」を参照してください。

// crt_calloc.c
// This program uses calloc to allocate space for
// 40 long integers. It initializes each element to zero.

#include <stdio.h>
#include <malloc.h>

int main( void )
{
   long *buffer;

   buffer = (long *)calloc( 40, sizeof( long ) );
   if( buffer != NULL )
      printf( "Allocated 40 long integers\n" );
   else
      printf( "Can't allocate memory\n" );
   free( buffer );
}
Allocated 40 long integers

関連項目

メモリ割り当て
free
malloc
realloc