1. 程式人生 > >C++記憶體管理與注意事項

C++記憶體管理與注意事項

記憶體是程式執行必不可少的資源,由作業系統分配和管理。作為程式設計師,我們通常做的只能是申請和歸還。本文主要介紹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;
}