C語言 動態記憶體

2021-08-29 05:32:57 字數 1034 閱讀 7964

動態記憶體:動態的建立記憶體,申請記憶體空間為變數;存放於堆區,不能通過變數名或陣列名引用,只能通過指標引用,在windows中,堆中最大的連續記憶體塊為1.3g左右。

標頭檔案

#include
malloc

在空閒記憶體中分配連續記憶體,約等於2g,分配成功時返回乙個指向該記憶體塊的指標即第乙個位元組位址,有時需要強轉,記憶體不足時返回空指標,不初始化

int *p=(int*)malloc(n*sizeof(int));

=int p[n]

calloc

初始化為0,功能與malloc相同

函式原型:void*calloc(unsigned n,unsigned size)

int *p=(int*)calloc(n*sizeof(int));
realloc

用於擴大記憶體或縮小記憶體,分配新的大記憶體,需要更新新位址

函式原型:void *realloc(void *p,unsigned size)

int *p=(int*)realloc(p,n*sizeof(int));
free

釋放記憶體空間,解決記憶體洩漏問題

函式原型:void free(void *p)

free(p);
free崩潰的4個原因

1、越界,漏乘sizeof(尾被破壞)

#include#includeint main()

free(p1);

return 0;

}

2、指標移動(頭找不到)

動態記憶體分配的頭部和尾部含有資訊,在指標移動的位元組的位址發生改變,首位元組的位址被p++改變找不到頭部

3、重複釋放記憶體

一段記憶體不能釋放兩次

4、釋放不是動態建立記憶體

c語言動態記憶體分配 C 動態記憶體分配

動態記憶體分配 雖然通過陣列就可以對大量的資料和物件進行有效地管理,但是很多情況下,在程式執行之前,我們並不能確切地知道陣列中會有多少個元素。這種情況下,如果陣列宣告過大,就會造成浪費 宣告過小,就會影響處理。在c 中,動態記憶體分配技術可以保證程式在執行過程中按照需要申請適量記憶體,使用後釋放,從...

C語言動態記憶體分配

c語言動態記憶體分配 動態資料結構可以在執行時靈活新增 刪除或重排資料項。在執行時分配記憶體空間的過程稱為動態記憶體分配。記憶體分配函式如下 malloc 分配所需的位元組大小,並返回指向所分配空間的第乙個位元組的指標 calloc 為元素陣列分配空間,並初始化為零,然後返回指向該記憶體的指標 fr...

C語言 動態記憶體分配

c語言有儲存變數的區域稱之為棧 stack 除此之外 c語言還允許建立自己的動態記憶體區域 以存放一些臨時的資料 這區域稱之為 堆 heap 也就是存放執行時的資料 可以根據程式的需要 向系統申請所需大小的空間 由於未宣告部分定義他們為變數或者陣列因此只能通過指標去訪問 建立記憶體動態分配主要由4個...