名前空間
変種
操作

malloc

From cppreference.com
ヘッダー <stdlib.h> で定義
void *malloc( size_t size );

size バイトの未初期化ストレージを割り当てます。

割り当てが成功した場合、基本的なアラインメントを持つ任意のオブジェクト型に適したポインターを返します。

size がゼロの場合、malloc の動作は実装定義です。たとえば、ヌルポインターが返されることがあります。または、ヌルでないポインターが返されることもありますが、そのようなポインターは間接参照してはならず、メモリリークを回避するために free に渡す必要があります。

malloc はスレッドセーフです。引数を通して見えるメモリ位置のみにアクセスし、静的ストレージにはアクセスしないかのように動作します。

以前の freefree_sized、および free_aligned_sized(C23 以降) または realloc によるメモリ領域の解放は、同じまたはその一部を割り当てる malloc の呼び出しと同期します。この同期は、解放関数によるメモリへのアクセス後、および malloc によるメモリへのアクセスの前に行われます。特定のメモリ領域を操作するすべての割り当ておよび解放関数には、単一の全体的な順序があります。

(C11 以降)

目次

[編集] Parameters

size - 割り当てるバイト数

[編集] Return value

成功した場合、新しく割り当てられたメモリの先頭へのポインターを返します。メモリリークを回避するために、返されたポインターは free() または realloc() で解放する必要があります。

失敗した場合、ヌルポインタを返す。

[編集] Example

#include <stdio.h>   
#include <stdlib.h> 
 
int main(void) 
{
    int *p1 = malloc(4*sizeof(int));  // allocates enough for an array of 4 int
    int *p2 = malloc(sizeof(int[4])); // same, naming the type directly
    int *p3 = malloc(4*sizeof *p3);   // same, without repeating the type name
 
    if(p1) {
        for(int n=0; n<4; ++n) // populate the array
            p1[n] = n*n;
        for(int n=0; n<4; ++n) // print it back out
            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

[編集] References

  • C17標準 (ISO/IEC 9899:2018)
  • 7.22.3.4 The malloc function (p: 254)
  • C11標準 (ISO/IEC 9899:2011)
  • 7.22.3.4 The malloc function (p: 349)
  • C99標準 (ISO/IEC 9899:1999)
  • 7.20.3.3 The malloc function (p: 314)
  • C89/C90標準 (ISO/IEC 9899:1990)
  • 4.10.3.3 The malloc function

[編集] See also

以前に割り当てられたメモリを解放する
(関数) [編集]
English 日本語 中文(简体) 中文(繁體)