C和指標詳解 動態記憶體分配

2021-07-11 03:57:57 字數 875 閱讀 4028

malloc和free

malloc和free分別用於執行動態記憶體分配和釋放。這些函式維護乙個可用記憶體池。當乙個程式另外需要一些記憶體時,它就呼叫malloc函式,malloc從記憶體池中提取一塊合適的記憶體,並向該程式返回乙個指向這塊記憶體的指標。當一塊以前的記憶體不再使用時,程式呼叫free函式把它歸還給記憶體池供以後之需。

兩個函式原型宣告如下

void *malloc(size_t size);

void

free(void *pointer);

malloc所分配的是一塊連續的記憶體。

如果作業系統無法向malloc提供更多的記憶體,malloc就返回乙個null指標。

向free傳遞乙個null引數不會產生任何效果

malloc是如何知道你所請求的記憶體需要儲存的是整數、浮點數、結構還是陣列呢?它並不知道。所以malloc返回乙個型別為void *的指標,供你強制轉換。

calloc 和 realloc

void *calloc(size_t num_elemnets, size_t element_size);

void realloc(void *ptr, size_t new_size);

calloc也用於分配記憶體。malloc和calloc之間的主要區別是後者在返回指向記憶體的指標之前把它初始化為0。

realloc函式用於修改乙個原先已經分配的記憶體塊的大小。使用這個函式,你可以使一塊記憶體擴大或縮小。

常見的動態記憶體錯誤

在使用動態記憶體分配的程式中,嚐嚐會出現許多錯誤。這些錯誤包括對null指標進行解引用操作、對分配的記憶體進行操作時越過邊界、釋放並非動態分配的記憶體、試圖釋放一塊動態分配的記憶體的一部分以及一塊動態記憶體被釋放之後被繼續使用。

C和指標 動態記憶體分配

void malloc size t size 分配所需的記憶體空間,並返回乙個指向它的指標。記憶體塊的大小,以位元組為單位。void calloc unsigned int num,unsigned int size 功能 在記憶體的動態儲存區中分配num個長度為size的連續空間,函式返回乙個指...

指標 動態記憶體分配

c 中的動態記憶體分配機制 c 中使用new和delete來完成在堆上對動態記憶體的分配和釋放。注.所有指標都應該被初始化 如果指標指向的動態記憶體被釋放或沒有指向合法的位址,就應該將指標設定為nullptr,否則記憶體洩漏 變數 double pvalue pvalue new double pv...

動態記憶體分配(詳解)

動態記憶體分配 1.堆記憶體分配 c c 定義了4個記憶體區間 區,全域性變數與靜態變數區,區域性變數區即棧區,動態儲存區,即堆 heap 區或自由儲存區 free store 堆的概念 通常定義變數 或物件 編譯器在編譯時都可以根據該變數 或物件 的型別知道所需記憶體空間的大小,從而系統在適當的時...