動態記憶體管理

2021-09-19 10:17:00 字數 2530 閱讀 8053

一、記憶體管理1.malloc

該函式向記憶體申請一塊連續可用的空間,並返回指向這片空間的指標。

(1)如果開闢成功,則返回乙個指向開闢好空間的指標。

(2)如果開闢失敗,則返回乙個null指標,因此malloc的返回值一定要做檢查。

(3)返回值的型別是 void* ,所以malloc函式並不知道開闢空間的型別,具體在使用的時候使用者自己來決定。

(4)如果引數 size 為0,malloc的行為是標準是未定義的,取決於編譯器。

void

* malloc (size_t size)

2.calloc

函式的功能是為 num 個大小為 size 的元素開闢一塊空間,並且把空間的每個位元組初始化為0。 與函式 malloc 的區別只在於 calloc 會在返回位址之前把申請的空間的每個位元組初始化為全0。

void

* calloc (size_t num, size_t size)

;

3. realloc

realloc函式的出現讓動態記憶體管理更加靈活。 有時會我們發現過去申請的空間太小了,有時候我們又會覺得申請的空間過大了,那為了合理的時候記憶體, 我們一定會對記憶體的大小做靈活的調整。那 realloc 函式就可以做到對動態開闢記憶體大小的調整。 函式原型 如下:

void

* realloc (

void

* ptr, size_t size)

;

4.free

free函式用來釋放動態開闢的記憶體。

(1) 如果引數 ptr 指向的空間不是動態開闢的,那free函式的行為是未定義的。

(2) 如果引數 ptr 是null指標,則函式什麼事都不做。

void free(void* ptr);
三、動態記憶體版本通訊錄
#define _crt_secure_no_warnings

#include

#include

#include

typedef

void

(*func)()

;typedef

struct personinfo

personinfo;

typedef

struct adressbook

adressbook;

adressbook g_address_book;

void

init()

}int

menu()

intjudge_input_legal

(int choice)

if(choice ==0)

return choice;

}void

empty()

void

add_contact()

free

(g_address_book.persons)

; g_address_book.persons = p;

}printf()

;printf

("輸入姓名:");

scanf

("%s"

, person_info->name)

;printf

("輸入性別:");

scanf

("%s"

, person_info->***)

;printf

("輸入年齡:");

scanf

("%s"

, person_info->age)

;printf()

;scanf

("%s"

, person_info->phone)

;printf()

;scanf

("%s"

, person_info->adress)

; g_address_book.size++

;printf

("新增聯絡人成功\n");

}void

delet_contact()

*(person_info + num)=*

(person_info + g_address_book.size -1)

; g_address_book.size--

;printf

("刪除聯絡人成功\n");

}void

search_contact()

}}void

update_contact()

void

print_contact()

printf

("列印全部資訊成功\n");

}void

clear_contact()

void

sort_contact()

}}printf

("排序成功\n");

};init()

;while(1

)return0;

}

動態記憶體管理

首先應該明白物件的三種內部的儲存方式 自動儲存,靜態儲存,和動態儲存。當執行離開當期程式塊的時候,堆疊指標返回到它進入程式塊 之前的地方,有效的銷毀了那個程式塊的自動變數。重新進入這個塊會再次建立所有的自動變數。靜態物件宣告或者在檔案域中。動態物件是存在系統呼叫 的在執行期中建立並且儲存在堆中,這是...

動態 記憶體管理

定義變數時,必須制定其資料型別和名字。而動態建立物件時,只需指定其資料型別,而不必為該物件命名。取而代之的是,new表示式返回指向新建立物件的指標,我們通過該指標來訪問此物件。int i int pi new int 這個new表示式在自由儲存區中分配建立了乙個整型物件,並返回此物件的位址,並用該位...

動態記憶體管理

c語言使用malloc calloc realloc free進行動態記憶體管理。void test c 通過new和delete動態管理記憶體。new delete動態管理物件。new delete動態管理物件陣列。void test void test int globalvar 1 stati...