#navi(../)
* 動的にメモリを取得する・malloc [#o9e16b89]
malloc関数を使用することにより指定したサイズ(バイト)のメモリを取得することができます。~
以下にC言語のサンプルソースと実行例を記します。

#contents
#htmlinsertpcsp(c-top.html,c-sp.html)

*関連記事 [#j1e71754]
-[[メモリの内容を指定した値で初期化する・memset>メモリ/メモリの内容を指定した値で初期化する・memset]]
-[[メモリ内容をコピーする・memcpy>メモリ/メモリ内容をコピーする・memcpy]]
-[[構造体の内容をコピーする・memcpyは使わない!>メモリ/構造体の内容をコピーする・memcpyは使わない!]]
-[[メモリの比較を行う・memcmp>メモリ/メモリの比較を行う・memcmp]]
-[[動的にメモリを取得する・malloc>メモリ/動的にメモリを取得する・malloc]]
-[[動的メモリサイズを拡張する・realloc>メモリ/動的メモリサイズを拡張する・realloc]]
-[[malloc,calloc,reallocで取得したメモリを解放する・free>メモリ/malloc,calloc,reallocで取得したメモリを解放する・free]]
-[[指定した文字数分コピーする・memmove>メモリ/指定した文字数分コピーする・memmove]]
-[[指定したバイトの指定個数分メモリを確保する・calloc>メモリ/指定したバイトの指定個数分メモリを確保する・calloc]]

* malloc書式など [#ib734a76]
malloc関数の書式などを以下に記します。

-インクルードが必要なファイル
 #include <stdlib.h>
-mallocの書式
 void *malloc(size_t size);
-戻り値~
取得したメモリの先頭アドレス
-引数~
取得するメモリサイズ(バイト)

* mallocのCサンプルコード [#ca9efebd]
以下にmallocを使ったCサンプルコードを記します。~
サンプルコードでは、文字列HELLO WORLD!(改行)と同じメモリサイズをmallocで取得しています。~
取得したメモリにコピー後、tolower関数で小文字に変換しています。~
表示後、free関数にてmallocで取得したメモリを解放しています。

&ref(malloc.c); (改行コードLF)
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <ctype.h>
 
 
 int main(void)
 {
     char *src = "HELLO WORLD!\n";
     char *p = NULL;
     int i;
 
     p = malloc(strlen(src)+1);
     if (p == NULL) {
         perror("malloc() error!");
         exit(EXIT_FAILURE);
     }
     strcpy(p,src);
     for (i=0; i<strlen(p); i++) {
         p[i] = (char)tolower(p[i]);
     }
 
     printf("%s", src);
     printf("%s", p);
 
     if (p != NULL) {
         free(p);
         p = NULL;
     }
 
     return 0;
 }


上記Cサンプルコードをコンパイルし実行した結果です。
 $ gcc malloc.c -o malloc
 $ ./malloc
 HELLO WORLD!
 hello world!

mallocで+1している理由は、文字列の終端のNULLが格納されるエリア(1バイト)を追加しています。~
以上、mallocによる動的メモリの取得のサンプルコードでした。

#htmlinsertpcsp(c-btm.html,c-sp.html)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS