C++記憶體管理與注意事項
阿新 • • 發佈:2020-01-30
記憶體是程式執行必不可少的資源,由作業系統分配和管理。作為程式設計師,我們通常做的只能是申請和歸還。本文主要介紹C++記憶體的申請和釋放(歸還),以及注意事項。
1 申請和釋放記憶體的運算子
申請 new
釋放 delete
2 方法
申請記憶體:
int *p = new int; // 定義一個指標,來接收new申請到的地址
釋放記憶體:
delete p;
塊記憶體的申請和釋放:
//申請 int *arr = new int[10]; //釋放 delete []arr;
3 注意事項
3.1 配套使用
我們知道在c語言中記憶體的申請和釋放是malloc 和free完成:
//申請 void *malloc(size_t size); //釋放 void free(void *memblock);
但是在C++中使用的是new和delete;如果使用C語言的方式申請,就得用C語言的方式釋放;使用C++的方式申請,就得用C++的方式釋放;配套使用。否則無法通過編譯。
3.2 記憶體可能申請失敗,需要有異常處理
int *p = new int[1000]; if (NULL == p) { //記憶體分配失敗 }
3.3 釋放記憶體需要將指標置為空
int *p = new int[1000]; if (NULL == p) { //記憶體分配失敗 //異常處理 } delete []p; //釋放 p = NULL;
除了釋放記憶體,還得將指標置為空;否則指標還指向之前的記憶體,如果不小心再執行了delete []p;操作,就會導致同一塊記憶體被重複回收兩次,將引發嚴重錯誤。
4 Demo
#include <string.h> #include <iostream> using namespace std; int main(void) { //在堆中申請100個char型別的記憶體 char *str = new char[100]; //拷貝Hello C++字串到分配的堆中的記憶體中 strcpy(str, "Hello C++"); //列印字串 cout << str << endl; //釋放記憶體 delete []str; str = NULL; return 0; }