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';
}
$