【C++】動的メモリ管理① (C言語による動的メモリ管理 | C言語メモリ応用 | C言語メモリ解放 | コード例)





1. 動的メモリ管理



動的メモリ管理は次によって提供されます。

  • メモリアプリケーション
  • メモリ解放

構成、ここでのメモリはスタック メモリではなくヒープ メモリを指します。


プログラムの実行中、多くの場合、次のようなメモリ リソースをより柔軟に管理するために、必要に応じて動的メモリ管理が実行されます。

  • ヒープメモリにメモリ領域を割り当てます
  • ヒープメモリ内のメモリ領域を解放する

C言語やC++言語には、ヒープメモリを動的に確保・解放するメソッドがあります。

  • C 言語では、主にヒープ メモリの割り当てと解放が関係します。
  • C++ 言語では、主なことはオブジェクトの動的な作成と解放です。




2. C言語による動的メモリ管理




1. C言語メモリアプリケーション


C 言語では、malloc()、calloc()、realloc() などの標準ライブラリ関数を使用して、メモリを動的に適用します。

  • malloc(size_t size): 指定されたバイト サイズのヒープ メモリを割り当て、ヒープ メモリ空間へのポインタを返すか、失敗した場合は NULL を返します。
  • calloc(size_t num, size_t size): 指定されたブロック数とバイト サイズでヒープ メモリを割り当てます。malloc と比較して、calloc はメモリを自動的に 0 に初期化します。
  • realloc(void* ptr, size_t size): 割り当てられたメモリ ブロックのバイト サイズを変更します。ポインタ パラメータ ptr が NULL の場合、この関数は malloc 関数と同じ機能を持ちます。パラメータ サイズが 0 の場合、この関数はfree 関数と同じ関数で、ptr メモリを解放するために使用されます。

上記の関数を呼び出す前に、stdlib.h ヘッダー ファイルをインポートする必要があります。

#include <stdlib.h>  

2. C言語のメモリ解放


C 言語の場合、free() 標準ライブラリ関数を呼び出して、割り当てられたメモリを解放します。


3. コード例 - C 言語の動的メモリ管理


以下のコードでは、

まず、malloc() 関数を使用して、5 つの int データを格納できるヒープ メモリを動的に適用します。

// 函数原型 : 
void *malloc(unsigned int size)

次に、malloc 関数によって返された void * 型ポインタを int * 型ポインタに変換します。

// 函数原型 : 
// void *malloc(unsigned int size);
// 申请内存
int* array = (int*)malloc(5 * sizeof(int));

次に、配列添字を使用してメモリにアクセスし、値をメモリに割り当てます。

    // 为内存赋值
    // 赋值时使用数组下标的方式访问内存
    for (int i = 0; i < 5; i++) {
    
    
        array[i] = i;
    }

次に、メモリ データを出力し、メモリ空間値を取得するときにポインタを使用してメモリにアクセスします。

    // 打印内存
    // 获取内存空间值时使用指针形式访问内存
    for (int i = 0; i < 5; i++) {
    
    
        printf("%d ", *(array + i));
    }

最後に、free 関数を呼び出してこのメ​​モリを解放します。

    // 释放内存  
    free(array);

コード例:

#include <stdio.h>  
#include <stdlib.h>  

int main() {
    
    
    // 申请内存
    int* array = (int*)malloc(5 * sizeof(int));
    if (array == NULL) {
    
    
        printf("内存分配失败\n");
        return -1;
    }

    // 为内存赋值
    // 赋值时使用数组下标的方式访问内存
    for (int i = 0; i < 5; i++) {
    
    
        array[i] = i;
    }

    // 打印内存
    // 获取内存空间值时使用指针形式访问内存
    for (int i = 0; i < 5; i++) {
    
    
        printf("%d ", *(array + i));
    }
    printf("\n");

    // 释放内存  
    free(array);

    // 控制台暂停 , 按任意键继续向后执行
    system("pause");

    return 0;
}

の結果:

0 1 2 3 4
请按任意键继续. . .

ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/han1202012/article/details/133045645