C C 學習筆記 指標和記憶體洩漏

2021-10-04 18:19:21 字數 1035 閱讀 4727

c語言真是既簡單又深奧,還挺意思;今天小夥伴又有什麼問題呢?!

為什麼在**裡,乙個node指標在malloc一段記憶體後,需要首先memset一下,並且free掉之後,還可以通過node指標訪問到裡面的內容?

下面按照關鍵點來逐條分析:

為什麼要memset一下:

其實程式新申請的記憶體空間中,並不能保證空間是零值。比如另乙個程式剛剛釋放了此空間,正好此時系統被分配了此空間,如果直接讀取的話,肯定就能讀到之前程式寫入的資料,這樣就有可能對我們的資料造成汙染,所以需要memset來全部置零,保證自己程式資料的安全。

不僅是記憶體,在磁碟上也是,在我們刪除電腦檔案的時候,乙個大檔案一下就刪除掉了,其實系統並沒有刪除掉磁碟的資料,只是告訴系統這一段磁碟空間被釋放了,別的程式可以往這一段空間寫資料了,原來檔案資料都還存在磁碟裡,檔案恢復工具就是利用這個原理來恢復舊檔案(在沒有別的程式寫資料的情況下,輕鬆就恢復了這個檔案)。

為什麼free掉之後,還可以通過指標訪問到?

其實這和上面memset是同理的,free指標之後,只是告訴系統該空間可以被別的程式使用,而並沒有抹掉此空間裡的資料。所以只要在別的程式寫入資料之前訪問,還是可以讀取到原來的資料的。

在日常開發中該怎麼辦?

在日常開發中,當然是養成良好的習慣!

由於free會釋放記憶體,p=null會釋放指標的指向位址;所以他們兩個要成對出現;首先free記憶體,然後把指標指向null。(如果先指向null就會造成記憶體洩漏,切記!)

養成良好的程式設計習慣,搞明白一條語句到底幹了什麼! 必然會幫你走的更遠!

——2020-04-04——

記憶體洩漏學習筆記

memory leak,記憶體洩漏 記憶體洩漏 memory leak 是指由於疏忽或錯誤造成了程式未能釋放掉不再使用的記憶體的情況。記憶體洩漏並非指內存在物理上的消失,而是應用程式分配某段記憶體後,由於設計錯誤,失去了對該段記憶體的控制,因而造成了記憶體的浪費。當乙個物件已經不需要再使用本該被 時...

C C 中的記憶體洩漏 記憶體溢位 野指標

記憶體溢位 野指標發生原因class object object intmain class object1 int main 發生原因 為什麼說strcpy和strncpy是c 的危險函式 2.strncpy strncpy dest,src,sizeof dest dest sizeof des...

C C 檢查記憶體洩漏

最近剛換工作,還在試用期,分配給我的也都是些零碎的任務。前陣子領導扔給我乙個小專案,這個專案底層使用c 編寫的3d渲染引擎,然後用cli包裝了一下,提供給上層的c 呼叫。這個專案存在比較嚴重的記憶體洩漏問題,由於目前公司寫c 的人寥寥無幾,寫c 的又不太懂如何檢測c 的記憶體洩漏,領導就把這個小任務...