【C言語入門】mallocの使い方

C言語でデータ保存用等にメモリを使用したい場合等に使用するのがmallocです。
今回は、このmallocの使い方を簡単なサンプルプログラムとともに説明します。

mallocの構文

#include <stdlib.h>
void *malloc(size_t size);

mallocの説明

mallocは、sizeで指定されたバイトサイズのメモリ領域を確保し、そのポインタを返却します。確保されたメモリ領域の内容は不定です。
sizeで指定されたサイズのメモリ領域が確保できない場合は、NULLポインタを返却します。

malloc関数は、大きさがsizeであるオブジェクトの領域を割り付ける。割り付けられたオブジェクトの値は、不定とする。

JISX3010 プログラム言語C
size

メモリ領域を確保したいバイトサイズを指定します。

返却値

sizeで指定したサイズのメモリ領域確保に
成功した場合は、確保したメモリ領域の先頭ポインタを返します。
失敗した場合は、NULLポインタを返します。

malloc関数は、空ポインタ又は割り付けた領域へのポインタを返す。

JISX3010 プログラム言語C

mallocの使い方サンプル

メモリ領域(小・中・大)を確保するだけのサンプルを紹介します。
小:32バイト、中:32キロバイト、大:32ギガバイト

サンプルプログラムと実行結果
#include <stdio.h>
#include <stdlib.h>

void memdump(void *p);

int main(int argc, char* argv[]) {
  void *p = NULL;
  /* 小サイズ */
  p = malloc((size_t)32);
  if( p == NULL ) {
    fprintf( stdout, "malloc 32byte error!\n" );
    return -1;
  }
  memdump(p);
  free(p);  /* メモリ領域開放 */
  /* 中サイズ */
  p = malloc((size_t)32*1024);
  if( p == NULL ) {
    fprintf( stdout, "malloc 32Kbyte error!\n" );
    return -1;
  }
  memdump(p);
  free(p);  /* メモリ領域開放 */
  /* 大サイズ */
  p = malloc((size_t)32*1024*1024*1024);
  if( p == NULL ) {
    fprintf( stdout, "malloc 32Gbyte error!\n" );
    return -1;
  }
  memdump(p);
  free(p);  /* メモリ領域開放 */
}

void memdump(void *p) {
  fprintf( stdout, "==== memdump start ====\n" );
  unsigned char *cp = NULL;
  int i = 0;
  for( cp = (char*)p, i = 0; i < 4; cp++, i++ ) {
    fprintf( stdout, "cp[%p]:%02x\n", cp, *cp );
  }
  fprintf( stdout, "==== memdump end ====\n\n" );
}
サンプルプログラムの実行結果
サンプルプログラムの実行結果

確保したメモリ領域の先頭から4バイト分を出力してみませんが、確保されたメモリ領域の値は不定な状態になっているのがわかると思います。

mallocのまとめ

  • mallocを使用する際は、sizeに確保したいメモリ領域のサイズをバイト単位で指定する。
  • mallocで確保したメモリ領域が不要となった場合は、freeで解放する必要がある。
  • mallocの返却値は、領域確保に成功した場合、確保した領域の先頭を指すポインタが返却され、領域確保に失敗した場合は、NULLポインタが返却される。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA