C言語,calloc()関数で、ゼロクリアしたメモリ領域を確保

スポンサーリンク

鍛錬 734

C言語,calloc()関数で、ゼロクリアしたメモリ領域を確保

指定したバイトサイズを、指定した個数だけ動的にメモリ領域を確保する際に、0で初期化(ゼロクリア)を実行して確保するには、calloc()関数を使用します。
 
以下は、calloc()関数についてです。

#include <stdlib.h>

void *calloc(size_t nmemb, size_t size);
 

 
確保したメモリ領域は、free()関数で解放する必要があります。

引数

以下は、上記の引数についてです。

引数 意味
size_t nmemb 確保するメモリの要素数
size_t size 確保するメモリ1要素あたりのバイト数

戻り値

以下は、戻り値についてです。

戻り値
void 成功 割り当てられたメモリに対するポインタ
エラー NULL
 
スポンサーリンク

プログラム

以下は、動的にメモリ領域を確保する際にゼロクリアを行うプログラム、test_calloc.c です。

今回は、char サイズのメモリを 256 個確保しています。

// include
#include <stdio.h>
#include <stdlib.h>

// main
int main(void)
{
	char *p;
	int nmem;
	int i;
	
	// 256個(charサイズ)のメモリを確保
	nmem = 256;
	p = (char *)calloc(nmem, sizeof(char));
	if (p == NULL) {
		printf("ERROR,calloc\n");
		exit(EXIT_FAILURE);
	}
	
	// 確保したメモリ領域を表示
	printf("000~010| ");
	for (i = 0; i < nmem; i++) {
		if ((i % 10 == 0) && (i != 0)) {
			printf("\n");
			printf("%03d~%03d| ", i, i+10);
		}
		printf("%d ", p[i]);
	}
	printf("\n");
	
	// メモリ解放
	free(p);
	
	return 0;
}

実行結果

以下は、プログラム test_calloc.c を実行しています。

***@ubuntu:~/***/test/c$ 
***@ubuntu:~/***/test/c$ gcc -Wall -Wextra test_calloc.c -o test_calloc
***@ubuntu:~/***/test/c$ ./test_calloc
000~010| 0 0 0 0 0 0 0 0 0 0 
010~020| 0 0 0 0 0 0 0 0 0 0 
020~030| 0 0 0 0 0 0 0 0 0 0 
030~040| 0 0 0 0 0 0 0 0 0 0 
040~050| 0 0 0 0 0 0 0 0 0 0 
050~060| 0 0 0 0 0 0 0 0 0 0 
060~070| 0 0 0 0 0 0 0 0 0 0 
070~080| 0 0 0 0 0 0 0 0 0 0 
080~090| 0 0 0 0 0 0 0 0 0 0 
090~100| 0 0 0 0 0 0 0 0 0 0 
100~110| 0 0 0 0 0 0 0 0 0 0 
110~120| 0 0 0 0 0 0 0 0 0 0 
120~130| 0 0 0 0 0 0 0 0 0 0 
130~140| 0 0 0 0 0 0 0 0 0 0 
140~150| 0 0 0 0 0 0 0 0 0 0 
150~160| 0 0 0 0 0 0 0 0 0 0 
160~170| 0 0 0 0 0 0 0 0 0 0 
170~180| 0 0 0 0 0 0 0 0 0 0 
180~190| 0 0 0 0 0 0 0 0 0 0 
190~200| 0 0 0 0 0 0 0 0 0 0 
200~210| 0 0 0 0 0 0 0 0 0 0 
210~220| 0 0 0 0 0 0 0 0 0 0 
220~230| 0 0 0 0 0 0 0 0 0 0 
230~240| 0 0 0 0 0 0 0 0 0 0 
240~250| 0 0 0 0 0 0 0 0 0 0 
250~260| 0 0 0 0 0 0

 
上記に示した通り、ゼロクリアしたメモリ領域を確保することができました。

スポンサーリンク

シェアする

フォローする