名前空間
変種
操作

std::malloc

提供: cppreference.com
< cpp‎ | memory‎ | c
 
 
 
動的メモリ管理
未初期化記憶域
(C++17)
ガベージコレクションサポート
その他
(C++20)
(C++11)
(C++11)
C のライブラリ
malloc
低水準のメモリ管理
 
ヘッダ <cstdlib> で定義
void* malloc( std::size_t size );

size バイトの未初期化記憶域を確保します。

確保が成功した場合は、あらゆるスカラー型に対して適切にアラインされた、確保されたメモリブロックの最も低位の (最初の) バイトを指すポインタを返します。

size がゼロの場合、動作は処理系定義です (ヌルポインタが返されるかもしれませんし、記憶域にアクセスするためには使用できないけれども std::free を呼び出す必要のある何らかの非ヌルなポインタが返されるかもしれません)。

以下の関数はスレッドセーフであることが要求されます。

記憶域の特定の単位を確保または解放するこれらの関数の呼び出しは単一の全順序で発生し、そのような解放の呼び出しそれぞれはこの順序における次の確保 (もしあれば) に対して先行発生します。

(C++11およびそれ以降)

目次

[編集] 引数

size - 確保するバイト数

[編集] 戻り値

成功した場合は、新たに確保されたメモリの先頭を指すポインタを返します. メモリリークを回避するためには、返されたポインタは std::free() または std::realloc() で解放しなければなりません。

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

[編集] ノート

この関数はコンストラクタの呼び出しやメモリの初期化を一切行いません。 対応する解放関数が呼ばれることが保証されている既製のスマートポインタはありません。 C++ で推奨されるメモリ確保の方法は RAII 対応の関数 std::make_uniquestd::make_shared、コンテナのコンストラクタなどで、低レベルなライブラリコードでは new 式です。

[編集]

#include <iostream>   
#include <cstdlib> 
#include <string>
 
int main() 
{
    // allocates enough for an array of 4 strings
    if(auto p = (std::string*)std::malloc(4 * sizeof(std::string)))
    {
        int i = 0;
        try
        {
            for(; i != 4; ++i) // populate the array
                new(p + i) std::string(5, 'a' + i);
 
            for(int j = 0; j != 4; ++j) // print it back out
                std::cout << "p[" << j << "] == " << p[j] << '\n';
        }
        catch(...) {}
 
        for(; i != 0; --i) // clean up
            p[i - 1].~basic_string();
 
        std::free(p);
    }
}

出力:

p[0] == aaaaa
p[1] == bbbbb
p[2] == ccccc
p[3] == ddddd

[編集] 関連項目

確保関数
(関数) [edit]
(C++17で非推奨)(C++20で削除)
未初期化記憶域を取得します
(関数テンプレート) [edit]