第42課 記憶體操作經典問題分析二

2022-02-21 10:46:29 字數 1564 閱讀 3024

(1)結構體成員指標未初始化

(2)結構體成員指標未分配足夠的記憶體

(3)記憶體分配成功但並未初始化

(4)記憶體操作越界

【常見記憶體錯誤1】

1 #include 2 #include 34

void test(int* p, int size) //

對記憶體操作時,有帶長度資訊511

12free(p); //

不合符誰申請誰釋放原則13}

1415

void func(unsigned int

size)

1624

25for(i=0; i)

2630

31free

(p);32}

3334

intmain()

35

【常見記憶體錯誤2】

1 #include 2 #include 34

struct

demo5;

89intmain()

1020

21 d2.p = (char*)calloc(5, sizeof(char

));22

23 printf("

%s\n

", d2.p);

2425

for(i='

a'; i< '

z'; i++)

2629

30free

(d2.p);

3132

return0;

33 }

(1)動態記憶體申請之後,應該立即檢查指標值是否為null,防止使用null指標

(2)free指標之後必須立即賦值為null

(3)任何與記憶體操作相關的函式都必須帶長度資訊

(4)malloc操作和free操作必須匹配,遵循誰申請誰釋放的原則,不要跨函式釋放,防止記憶體洩漏和多次釋放

● 當 malloc 的次數多於 free 時,會產生記憶體洩漏

● 當 malloc 的次數少於 free 時,程式可能崩潰

第6課 內聯函式分析

帶參函式巨集內聯函式 優點編譯器會做引數的靜態型別檢查 原地展開,沒有呼叫開銷 並且在預處理階段完成,不占用編譯時間。函式 被裝入符號表中,在使用時進行替換 沒有呼叫開銷,效率高,會進行引數型別檢查 缺點需要傳參 棧變數的開闢和銷毀 壓棧 跳轉 返回開銷 不進行型別檢查,多次巨集替換會導致 體積變大...

C 第6課 內聯函式分析

本文學習自 狄泰軟體學院 唐佐林老師的 c 課程 引入 c 內聯函式的引入是為了替換c中巨集 塊功能 實驗1 巨集 塊 vs 內聯函式 注意 在c 開發中首選內聯函式定義 塊,而不是巨集實驗2 強制內聯 c語言中的巨集常量只是在預處理期間進行鍵的文字替換,它的 是並不會進行任何的語法檢查,型別檢查。...

第012課 記憶體控制器與SDRAM

參考文章 高手高階,終極記憶體技術指南 完整 高階版 文章原載於 電腦高手 雜誌2002年第12期,作者趙效民。名詞釋義 記憶體類裝置 有位址線,可以由cpu直接通過位址線訪問的裝置,如sdram nor flash 網絡卡等 記憶體控制器 cpu通過記憶體控制器 mc 與記憶體交換資訊,cpu將位...