首先有幾點綜述:
1. 記憶體的本質是資源
2. 作業系統在掌管記憶體
3. 程式設計師能做的就是對記憶體進行申請和歸還
申請和釋放記憶體分別用到運算子:new(申請)和delete(釋放)。
申請的方法:
//申請乙個記憶體
int *p=new int;//申請記憶體
delete p;//釋放記憶體
申請塊記憶體的方法:
//申請和釋放塊記憶體
int *arr=new int[10];//申請10個整型的記憶體空間
delete arr;//釋放記憶體塊
c語言中的記憶體申請和釋放,用的是malloc函式。
void *malloc(size_t size);
void free(void *memblock);
如果在程式設計中,用new申請了記憶體,那就要用delete釋放,用malloc申請就要用free來釋放。
在申請時,實際上不一定是能夠申請成功的,因為可能記憶體當時已經分配完了,我們要預見這種情況。
//申請失敗時有反饋
int *p=new int[1000];
if(null==p)
值得一說的是用null==p這種語言風格更好,因為一不小心打成null=p時,系統會報錯,能預防一些錯誤。
那麼,在釋放記憶體時需要注意什麼,
int *p=new int;
if(null==p)
delete p;
p=null;
int *p=new int p[1000];
if(null==p)
delete [p];
p=null;
即使申請失敗記憶體,也要講指標想申請的記憶體釋放掉,並將其置空,避免重複**等異常情況。
課後練習中,完成的作業能通過系統驗證,但在vs2013中,卻無法通過編譯,**如下:
#include#include#includeusing namespace std;
int main()
{ //在堆中申請100個char型別的記憶體
char *str = new char[100];
//拷貝hello c++字串到分配的堆中的記憶體中
strcpy(str, "hello imooc");
//列印字串
cout <
這是因為strcpy的安全性較低,微軟在編譯器中棄用了這個函式,用strcpy_s代替。如果堅持用的話,可以在int main()上一行新增西面**:
#pragma warning(disable:4996);
即可編譯通過。
C 記憶體管理 C 記憶體分類
c 記憶體管理 記憶體分類 moakap 在編寫程式過程中,程式設計師必須清楚程式記憶體的分配機制,合理進行記憶體管理,這樣才能得到高效的程式。同時,如果對c 記憶體分配基本概念不理解,使用不當,一方面浪費了寶貴的記憶體資源,降低了程式執行效率,另一方面還會造成程式中意想不到的錯誤。在 c 程式中,...
C 記憶體管理
在嵌入式系統中使用c 的乙個常見問題是記憶體分配,即對new 和 delete 操作符的失控。具有諷刺意味的是,問題的根源卻是c 對記憶體的管理非常的容易而且安全。具體地說,當乙個物件被消除時,它的析構函式能夠安全的釋放所分配的記憶體。這當然是個好事情,但是這種使用的簡單性使得程式設計師們過度使用n...
c 記憶體管理
這裡對我暫時所了解的記憶體機制做個記錄,以後再補。首先是記憶體分配 記憶體主要分為3個部分 一是從靜態儲存區域分配。編譯時分配好,主要存放全域性變數,static變數,程式結束釋放。二是從堆疊區域分配。函式內區域性變數存放的地方。隨變數生命週期自動釋放。效率較高,但大小有限。三是從記憶體池分配,即從...