动态内存可以动态的申请数组的内存空间,用多少申请多少,用完可以释放内存,进而节省内存空间内你。
内存申请和释放有两组方式:
(1)new 和delete
(2)malloc 和free
一、new和delete
使用new动态分配内存,使用delete释放内存空间。
语法:
类型名 *指针变量 = new 类型名[元素个数]
eg.
int =5
int *pNum = new int[i]
1.代码实现
代码如下(示例):
#include<iostream>
#include<string>
using namespace std;
int main(){
int num=0;
cout<<"请输入数组长度" <<endl;
cin>>num;
cout<<"请输入具体元素"<<endl;
int *array = new int[num];//申请动态内存
for(int i=0;i<num;i++){
cin>>array[i];
}
cout<<"数组如下"<<endl;
for(int i=0;i<num;i++){
cout<<array[i]<<" ";
}
cout<<endl;
delete []array; //释放动态内存
array = NULL;//避免成为野指针
cout<<"释放动态内存后"<<endl;
for(int i=0;i<num;i++){
cout<<array[i]<<" ";
}
}
二、malloc和free
使用malloc和free动态申请内存
语法:
类型名 *指针变量 = (类型名 *)malloc(个数 *sizeof(类型名))
eg. int i;
int *pNum = (int )malloc(isizeof(int));
代码实现
代码如下(示例):
#include<iostream>
#include<string>
#include<stdlib.h>
using namespace std;
int main(){
int num=0;
cout<<"请输入数组长度" <<endl;
cin>>num;
cout<<"请输入具体元素"<<endl;
int *array=(int*)malloc(num*sizeof(int));//申请动态内存
for(int i=0;i<num;i++){
cin>>*(array+i);
}
cout<<"数组如下"<<endl;
for(int i=0;i<num;i++){
cout<<array[i]<<" ";
}
cout<<endl;
free(array); //释放动态内存
}
三、New申请二维动态数组
- 申请aXb的数组空间
int **array = new int*[a];
for(int j=0;j<b;j++){
array[j] = new int[b];
}
- 释放内存空间
//释放内存
for(int i=0;i<b;i++){
delete[] array[i];
}
delete[] array;
完整代码如下:
//new申请二维数组内存
#include<iostream>
using namespace std;
int main(){
int a,b;
/*
cin>>a;
//申请一维数组
float *array = new float[a];
for(int i=0;i<a;i++){
cin>>array[i];
}
for(int j=0;j<a;j++){
cout<<array[j]<<" ";
}
delete[] arraay;
cout<<endl;
return 0;
*/
cin>>a>>b;
int **array = new int*[a];
for(int j=0;j<b;j++){
array[j] = new int[b];
}
for(int i=0;i<a;i++){
for(int j=0;j<b;j++){
cin>>array[i][j];
}
}
for(int i=0;i<a;i++){
for(int j=0;j<b;j++){
cout<<array[i][j]<<" ";
}
cout<<endl;
}
//释放内存
for(int i=0;i<b;i++){
delete[] array[i];
}
delete[] array;
array = NULL;//避免野指针
}