C言語 動的メモリ領域の確保 - stdlib.h - [ malloc ]

2008.11.01 Saturday | by LRESULT


的メモリ領域の確保をするには、malloc()を使います。

※ 第二弾 calloc()は、こちら
※ 第三弾 realloc()は、こちら
※ 第四弾 free()は、こちら

結構メジャー関数なので、イロイロとよく使われます。

まず、動的メモリを確保する理由ですが、例えばプログラム実行中に、読み込んだ画像を処理する場合は
一時的に画像データを格納する箱を作る必要があります。
その為、データを格納する場所を作成したり、削除したりするような処理が必要となるわけです。

malloc()で、動的メモリを確保した後は、必ず解放処理をしなければなりません。

メモリを解放するには、free()を使います。
malloc()とfree()で、1セットと覚えておくのが良いです。
ちなみに、動的メモリの解放し忘れを「メモリリーク」と言います。


malloc
書式 void* malloc( size_t size )
機能 動的メモリ領域の確保をする
引数 size_t size : 領域を確保する為のバイト数を指定します
戻り値 成功すると、確保した領域のポインタを返し
失敗すると、NULLを返します。

戻り値が、void* となっていますが、
これは、どんな型でもOKと言うことです。
使い方としては、( char *) というようにキャストする必要があります。

また、確保した動的メモリは配列のように扱えます。
まずは、サンプルコードを見たほうが分かり易いと思います。

mallocによるメモリ確保は、確保する領域が無い場合に、たまーに失敗する事もあります。
  ですので、戻り値のNULLチェックは必ずするようにしましょう。





サンプルコード
動的メモリを、malloc()で確保し、その領域に文字列を書き込みます。
最後に忘れずにfree()で確保した領域を解放します。

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

int main(void)
{
  char *buf = NULL;

  buf = (char *)malloc( 100 );
  if( buf == NULL ){
    printf( "メモリ確保に失敗しました¥n" );
    return -1;
  }

  sprintf( buf, "基本的に配列と同じように扱う事が出来ます。¥n" );
  printf( "%s", buf );

  free( buf );
  return 0;
}




結果
基本的に配列と同じように扱う事が出来ます。
と、表示されます。
malloc()で100バイトの領域を作成し、その領域に文字列を書き込んでいます。

malloc()などの動的メモリを確保する利点は、プログラムの実行中に
好きなサイズで領域確保が出来る点です。

カテゴリ:C言語 stdlib.h | 15:06 | comments(0) | trackbacks(0) | -


コメントする











この記事のトラックバックURL

トラックバック機能は終了しました。

トラックバック