C++內存管理與注意事項

內存是程序運行必不可少的資源,由操做系統分配和管理。做爲程序員,咱們一般作的只能是申請和歸還。本文主要介紹C++內存的申請和釋放(歸還),以及注意事項。ios

1 申請和釋放內存的運算符

申請 new程序員

釋放 deletespa

2 方法

申請內存:操作系統

int *p = new int;
// 定義一個指針,來接收new申請到的地址

釋放內存:指針

delete p;

塊內存的申請和釋放:code

//申請
int *arr = new int[10];

//釋放
delete []arr;  

3 注意事項

3.1 配套使用blog

咱們知道在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;
}
相關文章
相關標籤/搜索