(1)指標變數中的值是非法的記憶體位址,進而形成野指標
(2)野指標不是 null 指標,是指向不可用記憶體位址的指標
(3)null 指標並無危害,很好判斷,也很好除錯
(4)c 語言中無法判斷乙個指標所儲存的位址是否合法
(1)區域性指標變數沒有被初始化
(2)指標所指向的變數在指標之前被銷毀
(3)使用己經釋放過的指標
(4)進行了錯誤的指標運算
(5)進行了錯誤的強制型別轉換
#include #includeintmain()
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 #includevoid 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 #includestruct
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...