詳解C語言動態記憶體的分配

2022-09-21 13:57:10 字數 1472 閱讀 1919

目錄

全域性變數——記憶體中的靜態儲存區

2)非靜態的區域性變數——記憶體中的動態儲存區——stac程式設計客棧k 棧

3)臨時使用的資料—建立動態記憶體分配區域,需要時隨時開闢,不需要時及時釋放——heap 堆

4)根據需要向系統申請所需大小的空間,由於未在宣告部分定義其為變數或者陣列,不能通過變數名或者陣列名 來引用這些資料,只能通過指標來引用)

1)標頭檔案#include宣告了四個關於記憶體動態分配的函式

2)函式原型void * malloc(usigned int size) //memory allocation

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

作用——在記憶體的動態儲存區中分配 n 個長度為 size 的連續空間,這個空間一般比較大,足以儲存乙個陣列用 calloc 函式可以為一維陣列開闢動態儲存空間,n 為陣列元素個數,每個元素長度為 size.函式返回指向所分配域的起始位置的指標;分配不成功,返回 null。p = calloc(50, 4); //開闢 50*4 個位元組臨時空間,把起始位址分配給指標變數 p

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

作用——釋放變數 p 所指向的動態空間,使這部分空間能重新被其他變數使用。p 是最近一次呼叫 calloc 或 malloc 函式時的函式返回值free 函式無返回值free (p ); // 釋放 p 所指向的已分配的動態空間

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

作用——重新分配 malloc 或 calloc 函式獲得的動態空間大小,將 p 指向的動態空間大小改變為 size,p 的值不 變,分配失敗返回 nullrealloc(p, 50); // 將 p 所指向的已分配的動態空間 改為 50 位元組

6)返回型別說明

動態建立陣列,輸入 5 個學生的成績,另外乙個函式檢測成績低於 60 分的,輸出不合格的成績。

**演示

#include

#include

int main()

check(p); //

free(p); //銷毀 堆區 p 指向的空間 getchar(); getchar();

return 0;

}void check(int *p) }}

1)避免分配大量的小記憶體塊。分配堆上的記憶體有一些系統開銷,所以分配許多小的記憶體塊比分配幾個大記憶體塊的 系統開銷大

2)僅在需要時分配記憶體。只要使用完堆上的記憶體塊,就需要及時釋放它(如果使用動態分配記憶體,需要遵守原則: 誰分配,誰釋放), 否則可能出現記憶體洩漏

3)總是確保釋放以分配的記憶體。在編寫分配記憶體的**時,就要確定在**的什麼地方釋放記憶體

4)在釋放記憶體之前,確保不會無意中覆蓋堆上已分配的記憶體位址,否則程式就會出現記憶體洩漏。在迴圈中分配內 存時,要特別小心

5)程式設計客棧指標使用一覽

本文標題: 詳解c語言動態記憶體的分配

本文位址:

C語言 動態記憶體分配詳解

c語言 動態記憶體分配詳解 動態記憶體分配涉及到堆疊的概念程式設計客棧 堆疊是兩種資料結構。堆疊都程式設計客棧是資料項按序排列的資料結構,只能在一端 稱為棧頂 top 對資料項進行插入和刪除。棧 作業系統 由作業系統自動分配釋放 www.cppcns.com,存放函式的引數值,區域性變數的值等。其操...

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

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

C語言中的動態記憶體分配詳解

c語言中最難也最重要的要數指標這一章了,對指標的熟練程度決定了你對 c語言的學習的好壞程度,筆者自己在學習 c語言時,在指標上花費的時間幾乎等於學習其他基礎知識的時間,所以,對指標這一章有著自己獨特的見解和學習方法。指標,簡單來說其作用就是用來操作記憶體的,而c 語言中動態記憶體分配就是一大難點,所...