C++的内存管理
我们所说的内存本质上可以理解为资源,由操作系统管理,我们能做的就是申请与释放。
申请与释放就是内存管理。
如何申请和释放内存呢?
这里用到两个运算符:
new 申请
delete 释放
申请一个内存:
定义一个指针,用指针来接受new运算符申请到的内存
浦】
申请一块内存:
int *arr=new int[10];//申请块内存
delete [ ]arr;释放块内存
内存操作注意事项:
1.内存管理方式:
2.申请内存判断成功,以及释放内存:
int *p =new int[100];
if(p==NULL){
//内存分配失败
}
delete [ ] p;
p=NULL;
int *p=new int ;
if(p==NULL){
//内存分配失败
}
delete p;
p=NULL;为什么最后还要给p赋值空指针呢?
如果不置为空,则指针还指向内存,如果我们在再delete一次,则表明同一块内存被同时被回收两次,则会出现异常。
例子:
#include<iostream>
using namespace std;
int main(void){
int *p=new int(100);//申请100个地址空间
if(p==NULL){
exit 0;//分配失败
}
p[0]=20//因为是块内存,采用数组访问
cout<<p[0]<<endl;
delete [ ]p;//如果没有[ ]表明之释放了一个内存
p=NULL;
system("pause");
return 0;
}
练习:
在堆中申请100个char类型的内存,拷贝Hello world字符串到分配的堆中的内存中,打印字符串,最后释放内存
#include <string.h>
#include <iostream>
using namespace std;
int main(void)
{
//在堆中申请100个char类型的内存
char *str = new char[100];
//拷贝Hello C++字符串到分配的堆中的内存中
strcpy(str, "Hello world");
//打印字符串
cout<<str<<endl;
//释放内存
delete []str;
str=NULL;
return 0;
}