malloc
|
ヘッダーで定義
<stdlib.h>
|
||
|
void
*
malloc
(
size_t
size
)
;
|
||
size
バイトの未初期化ストレージを割り当てます。
確保が成功した場合、あらゆるオブジェクト型に対して適切にアライメントされたポインタを返します。 fundamental alignment を持つオブジェクト型に対して適切にアライメントされています。
size
がゼロの場合、
malloc
の動作は実装定義です。例えば、nullポインタが返される可能性があります。あるいは、非nullポインタが返される可能性もあります。ただし、そのようなポインタは
デリファレンス
すべきではなく、メモリリークを避けるために
free
に渡すべきです。
|
メモリ領域を解放する
free
、
free_sized
、および
free_aligned_sized
(C23以降)
または
realloc
の以前の呼び出しは、同じまたは一部が同じメモリ領域を割り当てる
|
(C11以降) |
目次 |
パラメータ
| size | - | 割り当てるバイト数 |
戻り値
成功時は、新しく割り当てられたメモリの先頭へのポインタを返します。メモリリークを避けるため、返されたポインタは free() または realloc() で解放する必要があります。
失敗した場合、ヌルポインタを返します。
例
#include <stdio.h> #include <stdlib.h> int main(void) { int *p1 = malloc(4*sizeof(int)); // 4つのint配列用に十分なメモリを確保 int *p2 = malloc(sizeof(int[4])); // 同じ、型を直接指定 int *p3 = malloc(4*sizeof *p3); // 同じ、型名を繰り返さずに if(p1) { for(int n=0; n<4; ++n) // 配列を初期化 p1[n] = n*n; for(int n=0; n<4; ++n) // 配列の内容を出力 printf("p1[%d] == %d\n", n, p1[n]); } free(p1); free(p2); free(p3); }
出力:
p1[0] == 0 p1[1] == 1 p1[2] == 4 p1[3] == 9
参考文献
- C17規格 (ISO/IEC 9899:2018):
-
- 7.22.3.4 malloc関数 (p: 254)
- C11規格 (ISO/IEC 9899:2011):
-
- 7.22.3.4 malloc関数 (p: 349)
- C99規格 (ISO/IEC 9899:1999):
-
- 7.20.3.3 malloc関数 (p: 314)
- C89/C90標準 (ISO/IEC 9899:1990):
-
- 4.10.3.3 malloc関数
関連項目
|
以前に割り当てられたメモリを解放する
(関数) |
|
|
C++ documentation
for
malloc
|
|