動態記憶體管理 檔案操作 程式環境和預處理

2021-10-23 19:30:05 字數 2515 閱讀 1257

一、動態記憶體管理

1、為什麼存在動態記憶體管理?

因為常規的記憶體分配只能分配固定大小的空間,比如陣列和變數的定義,只會分配固定大小的空間。而有時候需要的空間在執行時才能確定。

2、常見動態記憶體函式

(1)malloc和free

malloc: void* malloc(size_t size);

成功返回指向開闢好空間的指標,否則返回null指標。(返回的指標需要進行強轉為所需型別)

free: void free(void* ptr);

釋放動態記憶體

(2)calloc

void * calloc(size_t num,size_t size);

為num個大小為size的元素開闢空間,並把空間的每個位元組初始化為0;

(3)relloc

void* relloc(void*ptr,size_t size);

對動態開闢的空間的大小進行調整,其中ptr是需要調整的記憶體位址,size是調整後的大小,返回值是調整後記憶體的起始位置。

注:relloc函式有可能會開闢一段新的記憶體,將所有的元素搬移過去(當原空間後面沒有足夠大的空間的時候

3、常見動態記憶體錯誤

(1)對null指標的解引用操作

(2)對動態開闢的記憶體越界訪問

(3)非動態開闢的記憶體用free釋放

(4)使用free釋放一塊動態記憶體的一部分

(5)對同一塊動態記憶體多次釋放

(6)忘記釋放動態開闢的記憶體

4、c/c++中程式記憶體區域劃分

二、檔案操作

1、什麼是檔案?

一般情況下談的檔案有兩種:程式檔案和資料檔案;

程式檔案:包括原始檔(.c)、目標檔案(.obj)、可執行檔案(.exe)

資料檔案:檔案的內容是程式執行時讀寫的資料。

2、檔名、檔案型別、檔案緩衝區、檔案指標

(1)檔名

檔名包含三部分:檔案路徑+檔名主幹+檔案字尾

(2)檔案型別

文字檔案(ascii形式儲存的)、二進位制檔案(二進位制方式進行儲存)

(3)檔案緩衝區

系統會自動在記憶體中為程式中的每乙個正在使用的檔案開闢一塊「檔案按緩衝區」,從記憶體向磁碟輸出的資料會先送到記憶體中的緩衝區,裝滿緩衝區後才一起送到磁碟上。

(4)檔案指標

檔案型別的指標稱為檔案指標

每個被使用的檔案都在記憶體中開闢了乙個相應檔案資訊區,來存放檔案相關資訊,這些資訊儲存在乙個結構體變數中,取名file;

struct _iobuf 

;typedef

struct _iobuf file

file* pf;

3、檔案開啟和關閉

file * fopen (

const

char

* filename,

const

char

* mode )

;int fclose ( file * stream )

;

mode是開啟方式,唯讀®、只寫(w)……

三、程式環境和預處理

1、預編譯、編譯、彙編階段的主要工作

2、巨集定義的常見錯誤

#define square(x) x*x

int a=5;

printf

("%d\n"

,square

(a+1))

;

此時會列印25+1=26而不是6*6=36;

#define double(x) (x) + (x)

#define square(x) x*x

int a=5;

printf

("%d\n",10

*double

(a))

;

會列印55而不是100,因為10*(5)+(5)

3、比較函式和巨集

巨集優於函式的地方:

(1)函式比巨集的計算時間要長

(2)函式必須宣告為特定型別,而巨集是和型別無關的。

巨集不如函式的地方:

(1)每次使用巨集時,巨集定義**會插入到程式中,當巨集定義比較長時,可能會大幅度的增加程式的長度;

(2)巨集沒有辦法除錯且會帶來符號優先順序的問題,導致容易出錯;

(3)巨集不可以遞迴

c 指標和動態記憶體管理

c 中動態記憶體的管理主要是使用new delete表示式和std allcator類。為了管理動態記憶體更加安全,c 11新標準庫推出了智慧型指標。new delete new完成的操作 1 它分配足夠儲存乙個特定型別物件的記憶體 2 為它剛才分配的記憶體中的那個物件設定初始值。對於內建型別物件,...

C 動態記憶體管理 new和delete

c 中使用new 分配 和delete 釋放 來管理在堆 也叫自由空間 的記憶體 它們的底層封裝了c語言中的malloc和free函式 new和delete malloc必須配套使用,不能交叉使用,原因 如果用free釋放 new建立的動態物件 那麼該物件因無法執行析構函式而可能導致程式出錯。如果用...

C和Cpp裡面的動態記憶體管理

c語言裡面的動態記憶體管理函式,介紹的有4個,分別是malloc,realloc,calloc,和free,其函式原型分別如下 void malloc size t size void calloc size t num elements,size t element size void reall...