C言語 動的メモリ領域の確保 - stdlib.h - [ malloc ]
2008.11.01 Saturday | by LRESULT
動的メモリ領域の確保をするには、malloc()を使います。
※ 第二弾 calloc()は、こちら。
※ 第三弾 realloc()は、こちら。
※ 第四弾 free()は、こちら。
結構メジャー関数なので、イロイロとよく使われます。
まず、動的メモリを確保する理由ですが、例えばプログラム実行中に、読み込んだ画像を処理する場合は
一時的に画像データを格納する箱を作る必要があります。
その為、データを格納する場所を作成したり、削除したりするような処理が必要となるわけです。
malloc()で、動的メモリを確保した後は、必ず解放処理をしなければなりません。
メモリを解放するには、free()を使います。
malloc()とfree()で、1セットと覚えておくのが良いです。
ちなみに、動的メモリの解放し忘れを「メモリリーク」と言います。
書式 | void* malloc( size_t size ) |
---|---|
機能 | 動的メモリ領域の確保をする |
引数 | size_t size : 領域を確保する為のバイト数を指定します |
戻り値 | 成功すると、確保した領域のポインタを返し 失敗すると、NULLを返します。 |
戻り値が、void* となっていますが、
これは、どんな型でもOKと言うことです。
使い方としては、( char *) というようにキャストする必要があります。
また、確保した動的メモリは配列のように扱えます。
まずは、サンプルコードを見たほうが分かり易いと思います。
※ mallocによるメモリ確保は、確保する領域が無い場合に、たまーに失敗する事もあります。
ですので、戻り値のNULLチェックは必ずするようにしましょう。
動的メモリを、malloc()で確保し、その領域に文字列を書き込みます。 最後に忘れずにfree()で確保した領域を解放します。 |
---|
#include <stdio.h> int main(void) buf = (char *)malloc( 100 ); sprintf( buf, "基本的に配列と同じように扱う事が出来ます。¥n" ); free( buf ); |
基本的に配列と同じように扱う事が出来ます。 |
---|
と、表示されます。 malloc()で100バイトの領域を作成し、その領域に文字列を書き込んでいます。 malloc()などの動的メモリを確保する利点は、プログラムの実行中に 好きなサイズで領域確保が出来る点です。 |