C/C++ 動態內存分配(申請與釋放)

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

struct User
{
    int id;
    char name[20];
    char phone[20];
};

// 申請內存、釋放
void test();
// 給對象數組申請內存、釋放
void test2();
/*
 動態分配內存(malloc/free)
    場景一如:
        a) 存儲一個結構體數組,如果設一個太大的數組,則顯得浪費
        b) 如果設小了又怕不夠用
    問題:
        如何做到恰好夠用、又一點不浪費?
    系統中存在一個內存管理器(MM, Memory Manager),它負責管理一對閒置的內存。
    它被設計用於解決此類問題
    MM提供的服務:應用程序可以向MM申請(借出)一塊指定大小的內存,用完之後再釋放(還回)
    例如:
        void* ptr = malloc(1024); // 申請從MM借出內存
        free(ptr); // 釋放,還回給MM
        參數size:指定申請的內存空間大小,  字節爲單位
        返回值: void*, 指向這一塊內存地址
    (MM不關心你拿這塊內存來儲存何種數據,所以返回void*)
*/
int main() {
    test();
    test2();

    // 動態創建對象
    User* user = (User*) malloc(sizeof(User));
    // 使用完之後釋放
    free(user);
    system("pause");
}

void test() {
    char* p = (char*) malloc(8); // 申請8個字節
    for (int i = 0; i < 8; i++)
    {
        p[i] = i + 1;
    }
    free(p);// 釋放
    // 需要調試查看內存地址
}

void test2() {
    // 先算出10個對象內存地址的大小
    int size = 10 * sizeof(User);
    // 申請內存
    User* u = (User*) malloc(size);
    u[0].id = 1;
    strcpy(u[0].name, "張三");
    strcpy(u[0].phone, "1888888");
    // 釋放
    free(u);
}

 

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章