Cゼロベースのビデオ-46-mallocとfree

malloc関数の基本的な使用

malloc関数のプロトタイプは次のとおりです。

void *malloc( size_t size );
  • サイズ:サイズはバイト単位でヒープ領域を適用することを約束しました
  • 戻り値がvoid *型のポインタであり、メモリは、malloc関数の戻りスペースを得た最初のアドレスが割り当てられます

私たちは事前に知ることができないのmallocスペースので、void *型のポインタを使用するには、どのタイプを申請する理由。このように、一般的に我々は、ポインタ値の強力なターンを返す必要があります。

#include <stdlib.h>

int main(int argc, char* argv[])
{
    //申请4字节的空间,作为存储int变量使用
    //申请得到的空间首地址,赋值给pValue指针
    int* pValue = (int*)malloc(4);

    //修改值
    *pValue = 0x11111111;
    return 0;
}

また、同時に、アドレス空間の複数の要素を申請することができます:

int main(int argc, char* argv[])
{
    //申请12字节的空间,作为存储3个int变量使用
    //申请得到的空间首地址,赋值给pValue指针
    int* pValue = (int*)malloc(12);

    //修改值
    *pValue = 0x11111111;
    *(pValue+1) = 0x22222222;
    *(pValue+2) = 0x33333333;
    return 0;
}

無料の基本的な使い方

無料関数のプロトタイプは次のとおりです。

void free( void *memblock );

あなたは私たちがするまで適用されます、無料の戻り値、パラメータを1つだけ見ることができないヒープメモリの最初のアドレスの自由缶に渡されます。

#include <stdlib.h>

int main(int argc, char* argv[])
{
    //申请12字节的空间,作为存储3个int变量使用
    //申请得到的空间首地址,赋值给pValue指针
    int* pValue = (int*)malloc(12);

    //修改值
    *pValue = 0x11111111;
    *(pValue+1) = 0x22222222;
    *(pValue+2) = 0x33333333;

    free(pValue);
    return 0;
}

メモリアドレスをヒープに前に要求されていないフリーアドレスに渡された場合でも、気をつけて、エラーが発生します。

使用のmallocはsizeofと

実際には、一般的な使用にはsizeof malloc関数は、コードの可読性を高めるために。

#include <stdlib.h>

int main(int argc, char* argv[])
{
    //申请12字节的空间,作为存储3个int变量使用
    //申请得到的空间首地址,赋值给pValue指针
    int* pValue = (int*)malloc(sizeof(int)*3);

    //修改值
    *pValue = 0x11111111;
    *(pValue+1) = 0x22222222;
    *(pValue+2) = 0x33333333;
    return 0;
}

メモリリークの問題

ヒープメモリのためだけでなく、リリースを適用する場合は、リソースリークが発生します。
いくつかのケースでは、非標準コードのことは、リソースの解放につながることができないため。

void MyFun()
{
    int* pValue = (int*)malloc(12);

    //修改值
    *pValue = 0x11111111;
    *(pValue + 1) = 0x22222222;
    *(pValue + 2) = 0x33333333;
}

int main(int argc, char* argv[])
{
    MyFun();
    return 0;
}

おすすめ

転載: www.cnblogs.com/shellmad/p/11695697.html