LoginSignup
0
1

More than 5 years have passed since last update.

メモリーの確保・解放

Posted at

C言語:メモリー管理

仕事でC言語を使うので、その備忘録として記事をあげていきます。

なぜメモリーを確保する必要があるのか。
→プログラム内で使用するデータ数は未知なことが多い。
 事前に必要なデータ数が不明な場合、実行時にライブラリ経由で
 OSから必要となった分のメモリーを取得する。
 不要となったメモリーはライブラリ経由でOSへ返却する。

◾️Cのライブラリ関数
① malloc関数
 void *malloc(size_t size);
→sizeで指定したバイト数のメモリーを取得する
 返り値は取得したメモリーへのポインタ
 メモリーの確保ができなかった場合はNULLが返ってくる

② free関数
 void free(void *ptr);
→mallocで確保したメモリー領域を解放する
 ptrにはmallocが返したポインター or NULLでなくてはならない

③ memset関数
void *memset(void *s, int c, size_t n);
→nバイト分のサイズのデータをsがポイントする領域に対して、cでデータを書き込む。

*malloc + memset
malloc関数で確保した領域は不定値(値が決まっていない)ので、
memsetを使用してデータを初期化すると良い

*mallocがNULLを返してきた場合
この場合、通常はメモリ不足が原因なため、プログラムを終了させる必要がある。
そんな時はexit関数を使用する。
_Noreturn void exit(int status);
→exit関数はstatusで指定した値をコマンとの返り値とする。
 main以外の関数内で実行を終了する際に使用する。

④ realloc関数
void *realloc(void *ptr, size_t size);
→mallocで取得したポインタの内容をコピーし、size分の領域を新たに確保し直す。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1