#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);
}