C語言學習筆記 記憶體操作常見錯誤

2022-06-25 19:48:09 字數 1804 閱讀 2930

(1)指標變數中的值是非法的記憶體位址,進而形成野指標

(2)野指標不是 null 指標,是指向不可用記憶體位址的指標

(3)null 指標並無危害,很好判斷,也很好除錯

(4)c 語言中無法判斷乙個指標所儲存的位址是否合法

(1)區域性指標變數沒有被初始化

(2)指標所指向的變數在指標之前被銷毀

(3)使用己經釋放過的指標

(4)進行了錯誤的指標運算

(5)進行了錯誤的強制型別轉換

#include #include 

intmain()

free

(p1);

for(i = 0; i < 40; i++)

return0;

}

(1)絕不返回區域性變數和區域性陣列的位址

(2)任何變數在定義後必須用 0 初始化

(3)字元陣列必須確認 0 結束符後才能成為字串

(4)任何使用與記憶體操作相關的函式必須指定長度資訊

#include #include 

#include

struct

student

;char*func()

void del(char*p)

intmain()

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

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

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

(4)記憶體操作越界

#include #include 

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

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

free(p);//

不合符誰申請誰釋放原則

//當p指向乙個陣列時,該操作是非法的,因為

//只能free堆中的記憶體。

}void func(unsigned int

size)

for(i=0; i)

free

(p);

}int

main()

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

int* p = (int*)malloc(56

);if (p !=null)

……

(2)free 指標之後必須立即賦值為 null。(如 free(p);p=null;)

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

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

帶長度資訊size

}

(4)malloc 操作和 free 操作必須匹配,防止記憶體洩露和多次釋放。並且遵循誰申請誰釋放的原則。

#include #include 

struct

demo

;int

main()

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

));

printf(

"%s\n

", d2.p);

for(i='

a'; i< '

z'; i++)

free

(d2.p);

return0;

}

記憶體錯誤的本質源於指標儲存的位址為非法值(如指標未初始化或指標運算導致的越界)。記憶體洩漏源於malloc和free不匹配。當malloc次數多於free裡產生記憶體洩漏。反之程式可能崩潰。

C語言學習筆記 記憶體對齊

struct s1 struct s1 正常情況下應該是這樣儲存的,但是我們說過,cpu只能從特定的地方訪存。現在我們假設cpu只能從4的倍數處訪問記憶體。訪問char c1的時候從0 這裡的0指的是相對於結構體起始位址的偏移量,後續0位址均指偏移位址 位址處訪問 訪問int i的時候它只能先訪問四...

C 語言學習筆記 檔案操作

入門級學習c 語言,避免不了想讓自己的程式能和外界打交道,哪怕是乙個 txt 的記事本,那麼怎麼實現檔案的操作,這裡只是舉個小例子,還有待開發和修正哈 如果是只是為了研究這個操作怎麼寫,就建立乙個 c 的命令列工程就行了,我這裡是為了做上位機,整了個windows的窗體設計,隨便畫了個介面,顯示一下...

C語言學習筆記(鍵盤操作

1 緩衝輸入 執行程式並鍵入一行文字,在使用者按下回車鍵之前程式是不能使用這些字元的。但是,按下回車鍵之後,程式將讀入並顯示字元,直到遇見換行符 作業系統在使用者按回車鍵時建立換行符 為止。int letter dowhile letter n 以下是簡寫 int letter dowhile le...