關於C之動態記憶體分配完成一 二維變長陣列

2021-09-29 10:46:00 字數 784 閱讀 4185

變長陣列(vla)和呼叫 malloc()在功能上有些重合。例如,兩者都可用於建立在執行時確定大小的陣列:

int vlamal()
不同的是,變長陣列是自動儲存型別。因此,程式在離開變長陣列定義所在的塊時(該例中,即vlamal()函式結束時),變長陣列占用的記憶體空間會被自動釋放,不必使用 free()。另一方面,用malloc()建立的陣列不必侷限在乙個函式內訪問。例如,可以這樣做:被調函式建立乙個陣列並返回指標,供主調函式訪問,然後主調函式在末尾呼叫free()釋放之前被調函式分配的記憶體。另外,free()所用的指標變數可以與 malloc()的指標變數不同,但是兩個指標必須儲存相同的位址。但是,不能釋放同一塊記憶體兩次。

對多維陣列而言,使用變長陣列更方便。當然,也可以用 malloc()建立二維陣列,但是語法比較繁瑣。如果編譯器不支援變長陣列特性,就只能固定二維陣列的維度,如下所示:

int n = 5;

int m = 6;

int ar2[n][m]; // n×m的變長陣列(vla)

int (* p2)[6]; // c99之前的寫法

int (* p3)[m]; // 要求支援變長陣列

p2 = (int (*)[6]) malloc(n * 6 * sizeof(int)); // n×6 陣列

p3 = (int (*)[m]) malloc(n * m * sizeof(int)); // n×m 陣列(要求支援變長陣列)

ar2[1][2] = p2[1][2] = 12;

C之動態記憶體分配

在編寫程式時,通常並不知道需要處理的資料量,或者難以評估所需處理資料量的變動程度。在這種情況下,要達到有效的資源利用,必須在執行時動態地分配所需記憶體,並在使用完畢後盡早釋放不需要的記憶體,這就是動態記憶體管理原理。參考文章 1 c語言動態記憶體管理和動態記憶體分配 標準庫stdlib.h提供以下四...

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

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

關於動態記憶體分配

動態記憶體分配方式在很多場合下有著重要的意義。動態分配使得記憶體的利用效率大大提高,在一些記憶體受限的情況下顯得極為重要。但是動態分配會帶來乙個問題,如何釋放。這個問題的關鍵就是,在釋放的時候,如何獲知這塊需要釋放的記憶體空間是多少位元組的。在文中,筆者談到new malloc 等方式動態分配的記憶...