ソフトウェア開発したい日記

「面白い!」と思った頭の体操や、数学の問題を載せていきます
その他ロードバイクででかけた先の写真や、ソフト開発のメモ等

動的メモリー管理を今更学ぶ

2010年06月06日 22時05分47秒 | ソフト開発日記
はじめ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でちゃんと動くかテストします。