Linux講座にようこそ。このページは「C言語プログラミング入門 - 第14章.ライブラリ関数 - メモリ操作ライブラリ」です。
malloc関数は指定した大きさのメモリ領域を確保して、その先頭アドレスを返り値として返します。返り値の型名はvoid型ですので、このままでは使えません。通常、型変換(キャスト)演算子で型変換して使用します。(具体的には例題をご覧ください)
| 形式 | #include <stdlib.h> void *malloc(size_t size); | 
|---|---|
| 返り値 | 確保したメモリ領域の先頭アドレスを返します。エラーの場合はNULLを返します。 | 
| 引数 | 
 | 
calloc関数はmalloc関数と同じく、指定した大きさのメモリ領域を確保して、その先頭アドレスを返り値として返します。malloc関数との相違は確保した領域を0(全ビット0)でクリアする事です。
| 形式 | #include <stdlib.h> void *calloc(size_t nmemb, size_t size); | 
|---|---|
| 返り値 | 確保したメモリ領域の先頭アドレスを返します。エラーの場合はNULLを返します。 | 
| 引数 | 
 | 
realloc関数はcalloc関数やmalloc関数で確保したメモリ領域の大きさを変更して、その先頭アドレスを返り値として返します。領域を大きくした場合は元の内容はそのまま残っています。なお、領域が別の場所に移動する場合もありますので注意してください。(第1引数のptrの値と戻り値は一致するとは限りません)
| 形式 | #include <stdlib.h> void *realloc(void *ptr, size_t size); | 
|---|---|
| 返り値 | 変更後のメモリ領域の先頭アドレスを返します。エラーの場合はNULLを返します。なお、エラーの場合は指定した領域は元のままです。 | 
| 引数 | 
 | 
free関数はcalloc関数やmalloc関数で確保したメモリ領域を開放します。
| 形式 | #include <stdlib.h> void free(void *ptr); | 
|---|---|
| 返り値 | ありません。 | 
| 引数 | 
 | 
実行時引数で指定したファイルの中のタブ文字を半角スペースに置換した結果を表示します。ファイルの内容はmalloc関数で確保したメモリ領域に格納しますが、領域が一杯になった場合はrealloc関数で拡張します。領域の最初の大きさは100バイトで、一杯になった場合は100バイトずつ拡張します。
$ wc ./DATA/ex14_2_5.dat
  8  19 102 ./DATA/ex14_2_5.dat ← ex14_2_5.datの容量は102バイトです
$ cat ./DATA/ex14_2_5.dat
main()
{
        short   bango   =       12;
        int     nenrei;
        float   taijyu  =       65.5;
        double  sintyo;
        char    ketueki =       'A';
}
$
$ cat -t ex14_2_5.dat ← -tはタブ文字を見えるように(^I)表示するオプションです
main()
{
^Ishort^Ibango^I=^I12;
^Iint^Inenrei;
^Ifloat^Itaijyu^I=^I65.5;
^Idouble^Isintyo;
^Ichar^Iketueki^I=^I'A';
}
$
$ ./ex14_6_1.prg ./DATA/ex14_2_5.dat
main()
{
 short bango = 12;
 int nenrei;
 float taijyu = 65.5;
 double sintyo;
 char ketueki = 'A';
}
$