学生ムバサの雑多ブログ

書きたいことを書いているだけ。自分の気になったこととか。わりと勉強になることも書いてたりするので読んでもらえると嬉しいです。

C言語 malloc関数について(free,memset,memcpy,memcomp)はこれを読め!

説明画像

 

皆さんc言語malloc関数って使っていますか??

 

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サンプル

構造体の宣言は普段通りに行っていただき、このように処理していくことでmalloc関数を用いてメモリを動的に割り当てることができます。

c言語 malloc関数に関係する関数の使い方

malloc関数で確保したメモリを扱う関数についてです。

代表的なmemset,memcpy,memcmpについて説明します。

 

memsetの使い方について

memset関数は主にメモリの初期化に使用されます。

 

memset関数を使用するにはヘッダーファイル「string.h」をインクルードする必要があります。

 

memset関数の1引数にはメモリを設定したいオブジェクトのアドレス、

2引数にはメモリにセットしたい値、

3引数にはメモリにセットしたい値の文字数を入力してあげます

以下にサンプルコードを示します

 

memset説明

 

出力は

01*****789

になります

str+2つまり2が格納されている部分のアドレスから5個分を*に置き換えます。

 

スポンサーリンク
 

memcpyの使い方について

memcpy関数は指定したバイト数分のメモリをコピーしてくれる関数です。

 

memcpy関数を使用するにはヘッダーファイル「string.h」をインクルードする必要があります。

 

1引数にコピー先のメモリブロックのポインタ、

2引数にコピーもとのメモリブロックのポインタ、

3引数にはコピーしたいサイズ

を入力してあげます。

 

以下にサンプルコードを示します。

memcpyサンプル

 

 

出力は以下のようになります

 

コピー前 中身の確認 0x1 0x1 0x1 0x1 0x1 0x1 0x1 コピー後 中身の確認 0x61 0x62 0 0x63 0x64 0x1 0x1

 

memcmpの使い方について

memcmp関数は指定したバイト数分のメモリ領域を比較してくれる関数です。

 

1引数と2引数に比較したいオブジェクトのポインタ

3引数には比較したいバイトサイズ

を入力してあげます。

 

memcmp関数はint型の値を返し、戻り値が0の場合は比較したオブジェクトは一致していると判定され、それ以外の値の場合はオブジェクトは一致していないと判定されます。

 

いかにサンプルを示します。

memcmpサンプル


出力は以下のようになります。

 

buf1 = buf2 buf1 != buf3

 

free関数の使い方について

free関数はmalloc関数で確保したメモリを解放することができる関数です。

 

free関数の戻り値はvoid型となります。

引数には解放したい領域のポインタを使用します。

 

書式は以下のようになります。

free(ポインタ);

 

まとめ

この記事ではmalloc関数の使い方について解説をしました。

 

他にもmalloc関数に関係するmemset、memcpy、memcmp、freeといった関数についても説明しました。

 

これらの関数を使いこなすことによってメモリについての理解が深まり、一味違ったコーディングができるようになります!

 

この記事をよく読んで理解して、メモリについての知識を深めてください!

 

読んでくださりありがとうございました!

スポンサーリンク