#malloc
1.mallocとは何か
2.どう使用するのか
3.まとめ
#1.mallocとは何か
・「マロック」、「 エムアロック」と呼ばれている
・「memory(メモリ)」と「allocation(割り当て)」を組み合わせた名称になっている
・メモリ領域を動的に確保するときに使用する
・成功時には確保したメモリのアドレスが、失敗時には NULL が返却される
#2.どう使用するのか
###定義の仕方
#include <stdlib.h>
void *malloc(size_t);
・#include <stdlib.h>
これを宣言しないと、malloc関数は使えない
・(size_t)
確保したいメモリのバイトサイズ
###サンプル
プログラムは
1.学生数を入力
2.学生分の点数を入力
3.「X人目:XX点」の形で出力
というものです。
可読性の低いプログラムですがお許しください。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
int num,i;
//ポインタの設定
int* p;
printf("生徒人数は?");
scanf("%d", &num);
//(型*)malloc(sizeof(型) * 大きさ);
p = (int*)malloc(sizeof(int) * num);
//もしメモリを割り当てられなければプログラム終了
if (p == NULL) exit(1);
for(i=0;i<num;i++)
{
//「p+1」→ ポインタの位置を1つずらしている
scanf("%d", p+i);
}
for (i = 0; i < num; i++)
{
printf("%d人目:%d点\n", i + 1, *(p+i));
}
free(p);
}
↓ malloc部分を説明
int* p;
p = (int*)malloc(sizeof(int) * num);
・p = (int*)
(int*)には、pポインタと同じ型を入れる
・sizeof()
引数に型名を指定すれば、指定した型のサイズを取得することができる
・(sizeof(int) * num)
int型メモリサイズ[sizeof(int)]を、num個用意する[* num]
↓ 最後に忘れてはいけないfreeの説明
free(p);
動的に確保したメモリを解放しなくてはならない。そのときにfree(ポインタ)を行う。
free() を忘れてしまうと、メモリーリーク(メモリを確保し続けて、システムのメモリをだんだん消費していく現象)が起こってしまう。
プログラムが終了するまでシステムのメモリ資源を無駄に占有し続けることになる。
#3.まとめ
メリットとして、ソースコード記述時にメモリ使用量を決める必要がないところがある。
また、柔軟なメモリ割り当てが可能です。
私は、知識不足なところがあるのでこれからもお互いに頑張っていきましょう!