はじめC言語を学び、動的メモリー扱う前に
JavaやらC#やらGCが実装された言語に移っちゃったので
C言語による動的メモリー管理の勉強を今更。
まず、
動的メモリー管理とは、メモリーを効率的に使うため
プログラム実行中に必要なだけメモリーを確保し、
必要がなくなったら開放すること。
標準ライブラリ関数(stdlib.h)にはメモリーを確保・開放する関数が
予め用意されており、とりあえず次の二つは必須。
malloc関数:メモリー領域を確保
mallocは、使いたいメモリー領域のサイズ(byte)を
引数で指定しただけ確保し、その先頭アドレスを返す。
確保できなかったときは、NULLを返す。
確保した後は、通常の変数宣言同様に何が入ってるか
謎なので、初期化を忘れずに。
free関数:mallocで確保したメモリー領域を開放
freeは引数にmallocで確保したメモリー領域の
先頭アドレスを渡し、そのメモリー領域を開放する。
プログラム中でfreeで開放するより、システム(OS)に任せたほうが
安全で効率的だと考える人もいる。
とりあえず使用例
#include <stdio.h>
#include <stdlib.h>
main(){
int *p;
//メモリー領域の確保
p = malloc(sizeof(int));
if(p == NULL){
printf("確保失敗\n");
exit(1);
}
//確保したメモリー領域の使用
printf("数字を入力して下さい\n");
scanf("%d", p);
printf("入力された数字の二乗は%dです。\n", (*p)*(*p));
//メモリー領域の開放
free(p);
return 0;
}
なんかエラーの予感ビンビンだけど大体こんな感じかな。
現在リカバリしたばかりでC言語コンパイルできる環境がなく
cygwinをトロトロとインストール中なので
また明日ぐらいにcygwinでちゃんと動くかテストします。
JavaやらC#やらGCが実装された言語に移っちゃったので
C言語による動的メモリー管理の勉強を今更。
まず、
動的メモリー管理とは、メモリーを効率的に使うため
プログラム実行中に必要なだけメモリーを確保し、
必要がなくなったら開放すること。
標準ライブラリ関数(stdlib.h)にはメモリーを確保・開放する関数が
予め用意されており、とりあえず次の二つは必須。
malloc関数:メモリー領域を確保
mallocは、使いたいメモリー領域のサイズ(byte)を
引数で指定しただけ確保し、その先頭アドレスを返す。
確保できなかったときは、NULLを返す。
確保した後は、通常の変数宣言同様に何が入ってるか
謎なので、初期化を忘れずに。
free関数:mallocで確保したメモリー領域を開放
freeは引数にmallocで確保したメモリー領域の
先頭アドレスを渡し、そのメモリー領域を開放する。
プログラム中でfreeで開放するより、システム(OS)に任せたほうが
安全で効率的だと考える人もいる。
とりあえず使用例
#include <stdio.h>
#include <stdlib.h>
main(){
int *p;
//メモリー領域の確保
p = malloc(sizeof(int));
if(p == NULL){
printf("確保失敗\n");
exit(1);
}
//確保したメモリー領域の使用
printf("数字を入力して下さい\n");
scanf("%d", p);
printf("入力された数字の二乗は%dです。\n", (*p)*(*p));
//メモリー領域の開放
free(p);
return 0;
}
なんかエラーの予感ビンビンだけど大体こんな感じかな。
現在リカバリしたばかりでC言語コンパイルできる環境がなく
cygwinをトロトロとインストール中なので
また明日ぐらいにcygwinでちゃんと動くかテストします。