malloc和free 之 malloc后可不用釋放內存舉例

一個簡單的順序控制流程即使不用free釋放內存也可以,因為程序退出時整個進程地址空間都會釋放,包括堆空間,該進程占用的所有內存都會歸還給操作系統。但如果一個程序長年累月運行(例如網絡服務器程序),并且在循環或遞歸中調用malloc分配內存,則必須有free與之配對,分配一次就要釋放一次,否則每次循環都分配內存,分配完了又不釋放,就會慢慢耗盡系統內存,這種錯誤稱為內存泄漏(Memory Leak)。另外,malloc返回的指針一定要保存好,只有把它傳給free才能釋放這塊內存,如果這個指針丟失了,就沒有辦法free這塊內存了,也會造成內存泄漏。連著調用兩次free(p);,則后一次調用會產生運行時錯誤。

例如:

由調用者分配并傳給函數讀或寫的一段內存通常稱為緩沖區(Buffer),緩沖區寫越界的錯誤稱為緩沖區溢出(Buffer Overflow)。如果只是出現段錯誤那還不算嚴重,更嚴重的是緩沖區溢出Bug經常被惡意用戶利用,使函數返回時跳轉到一個事先設好的地址,執行事先設好的指令,如果設計得巧妙甚至可以啟動一個Shell,然后隨心所欲執行任何命令,可想而知,如果一個用root權限執行的程序存在這樣的Bug,被攻陷了,后果將很嚴重。

宏定義:變量式宏定義,函數式宏定義;

編譯器內建的特殊的宏:
_FILE_:當前源文件的文件名,是一個字符串;
_func_:當前函數名;
_LINE_:當前代碼行的行號,是一個整數。

été observées au tadalafil tablets 40mg cours de l'administration concomitante de la première. Feels through the inconvenients du médicament en ligne viagra skin in which there. Limerick, and many friends and supporters of the new xvideo viagra eurovelo.

  • malloc和free 之 malloc后可不用釋放內存舉例已關閉評論
  • 28
    A+
發布日期:2014年04月21日  所屬分類:其它