#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则有调用。 |
申请和释放堆内存
最新推荐文章于 2024-08-21 16:22:56 发布