C言語 malloc関数について(free,memset,memcpy,memcomp)はこれを読め!
malloc関数は配列や構造体を使う時にメモリを動的に割り当てることができる関数です。
是非この記事を読んでmalloc関数とそれに関係するメモリ操作系の関数について理解を深めてください!
mallocで確保したメモリはmemset,memcpy,memcmpなどの関数を使って様々なことができます。
malloc関数を使いこなすことができれば、汎用性が高く、メモリを無駄に使わないスマートなコードを書くことができます!
c言語を扱う上ではぜひ身につけてほしい技術なのでこの記事を読んで詳しくなりましょう!
c言語 malloc関数とは
malloc関数とは動的にメモリを確保する関数です。
配列や構造体を使ってあらかじめメモリを確保することなく、必要な場所で必要な分だけのメモリを使用することができるようになります。
木構造やリストなどのデータ構造は、一般的にmalloc関数によって動的にメモリを確保します。
ヘッダーファイル「stdlib.h」をインクルードすることによって使用可能です。
引数で指定したバイト数のメモリを確保し、確保した領域へのポインタを返します。
確保したメモリはfree関数で解放しないと他の処理でそこのメモリを使うことができなくなるので忘れないようにしましょう!
malloc関数の書式
malloc関数の書式は以下のようになります。
#include<stdlib.h>
void* malloc(size_t len);
「void*」の部分を(char*)などに差し替えてキャストします。
「site_t len」の部分に確保したいバイト数を入れてあげます。
※malloc関数で確保したメモリは必ずfree関数で解放しましょう
c言語 malloc関数の使い方について
mallo関数を使用するにはヘッダーファイル「stdlib.h」をインクルードすることが必須になります。
malloc関数の引数にはsizeof関数を使って配列の要素数や構造体の型を指定し、求めているバイト数を入力します。
これを構造体の型のポインタや配列の型のポインタでキャストして使用していきます。
サンプルコードを以下に示します
構造体の宣言は普段通りに行っていただき、このように処理していくことでmalloc関数を用いてメモリを動的に割り当てることができます。
c言語 malloc関数に関係する関数の使い方
malloc関数で確保したメモリを扱う関数についてです。
代表的なmemset,memcpy,memcmpについて説明します。
memsetの使い方について
memset関数は主にメモリの初期化に使用されます。
memset関数を使用するにはヘッダーファイル「string.h」をインクルードする必要があります。
memset関数の1引数にはメモリを設定したいオブジェクトのアドレス、
2引数にはメモリにセットしたい値、
3引数にはメモリにセットしたい値の文字数を入力してあげます
以下にサンプルコードを示します
出力は
01*****789
になります
str+2つまり2が格納されている部分のアドレスから5個分を*に置き換えます。
memcpyの使い方について
memcpy関数は指定したバイト数分のメモリをコピーしてくれる関数です。
memcpy関数を使用するにはヘッダーファイル「string.h」をインクルードする必要があります。
1引数にコピー先のメモリブロックのポインタ、
2引数にコピーもとのメモリブロックのポインタ、
3引数にはコピーしたいサイズ
を入力してあげます。
以下にサンプルコードを示します。
出力は以下のようになります
コピー前 中身の確認
0x1 0x1 0x1 0x1 0x1 0x1 0x1
コピー後 中身の確認
0x61 0x62 0 0x63 0x64 0x1 0x1
memcmpの使い方について
memcmp関数は指定したバイト数分のメモリ領域を比較してくれる関数です。
1引数と2引数に比較したいオブジェクトのポインタ
3引数には比較したいバイトサイズ
を入力してあげます。
memcmp関数はint型の値を返し、戻り値が0の場合は比較したオブジェクトは一致していると判定され、それ以外の値の場合はオブジェクトは一致していないと判定されます。
いかにサンプルを示します。
出力は以下のようになります。
buf1 = buf2
buf1 != buf3
free関数の使い方について
free関数はmalloc関数で確保したメモリを解放することができる関数です。
free関数の戻り値はvoid型となります。
引数には解放したい領域のポインタを使用します。
書式は以下のようになります。
free(ポインタ);
まとめ
この記事ではmalloc関数の使い方について解説をしました。
他にもmalloc関数に関係するmemset、memcpy、memcmp、freeといった関数についても説明しました。
これらの関数を使いこなすことによってメモリについての理解が深まり、一味違ったコーディングができるようになります!
この記事をよく読んで理解して、メモリについての知識を深めてください!
読んでくださりありがとうございました!