申请和释放堆内存



#include <iostream>
#include <malloc.h>

using namespace std;

void main(){
     int arraysize;
     int *array;

     cout << "Please input the size of array." << endl;
     cin >> arraysize;
     
     if(array = (int*) malloc(arraysize*sizeof(int))==NULL) 
     {
         cout<<"can't allocate more memory!!"<<endl;
         exit(1);
     }
     for(int i=0;i<arraysize;i++){
          array[i]=i*2;
     }
     for(int j=0;j<arraysize;j++){
          cout << array[j]<< " ";
     }
     cout << endl;
     free(array);
}











主要申请的堆内存要进行类型转换,并且转换过去的是整型指针(int*),而不是整型(int)。
因为malloc()的原型是:(void*)malloc(size_t size),其中size_t即是unsign long;

但是该注意的情况是可能没有足够的内存空间让程序申请,那么这时候会返回一个
NULL空指针,所以申请堆内存的时候,最好检查一下是否有足够内存供程序申请。
如左边红色部分。






释放内存,其原型为:void free(void*)
#include <iostream>

using namespace std;

void main(){
     int arraysize;
     int *array;

     cout << "Please input the size of array." << endl;
     cin >> arraysize;
    
     if((array = new int[arraysize])==NULL){
          cout<< "can't allocate more memory!!"<<endl;
          exit(1);
     }

     for(int i=0;i<arraysize;i++){
          array[i]=i*2;
     }
     for(int j=0;j<arraysize;j++){
          cout << array[j]<< " ";
     }
     cout << endl;
    delete[] array;
}

无需include什么头文件









用new申请堆内存更加简洁











删除数组等聚集类型型需要加上[];
说明:malloc()和free()是C的,C++也有
   但是 new delete是C++专有的操纵符
另外,molloc()和free()并不调用构造函数和析构函数,
   而new和delete则有调用


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值