一、動態記憶體管理
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...