首页 > 代码库 > C++动态分配内存
C++动态分配内存
动态分配(Dynamic Memory)内存是指在程序运行时(runtime)根据用户输入的需要来分配相应的内存空间。
1.内存分配操作符new 和 new[]
Example:
(1)给单个元素动态分配内存
int * pointer = new int; //动态分配一个用于存放整型变量的内存空间,并将该存储空间的地址返回给pointer
(2)给多个元素(数组)动态分配内存空间
int * p = new int [10]; //动态分配可以存放10个整型变量的内存空间,并将该存储空间的首地址返回给 p
在这里,动态创建的数组 p 的长度可以是常量,也可以是变量(用户输入的长度);而一般的数组在创建时的长度必须是常量。
2.内存收回操作符delete 和 delete[]
与上面两种情况分别对应的内存收回操作符为:
delete pointer; //收回动态分配的单个元素的内存空间delete [] p; //收回动态分配数组的内存空间
3.Demo
#include <iostream>using namespace std;int main() { char input[100]; int i, n; long * p; cout << "How many numbers do you want to type in ? "<<endl; cin.getline(input, 100); i = atoi(input); p = new long[i]; //根据输入的长度来动态创建内存空间 if (p == NULL) //检查所请求的内存是否成功分配 exit(1); for (n = 0; n < i; n++) { cout << "Please enter number: "; cin.getline(input, 100); p[n] = atol(input); } cout << "You have entered: "; for (n = 0; n < i; n++) { cout << p[n] << ", "; } cout << endl; delete[] p; //回收已分配的内存空间 system("pause"); return 0;}
result:
4.关于二位数组的内存动态分配问题
(1)二位数组的动态内存分配方式:
int **p = new int *[row]; //其中row指的是二位数组的行数for(int i=0;i<row;i++){ p[i]=new int [col]; //col 是二维数组的列,p 是一个指向 int 类型的指针}
(2)删除这个二位数组分配的内存空间的方式:
for(int i=0;i<row;i++){ delete[] p[i]; //先删除二维数组的列} delete[] p; //再删除二维数组的行
(3)Demo
#include<iostream>using namespace std;int main(){ double **data; int m, n; cout << "Please input the row:" << endl; cin >> m; cout << "Please input the column: " << endl; cin >> n; data = new double*[m]; //申请行的空间 if (data =http://www.mamicode.com/= NULL) //检查内存是否分配成功 { cout << "Could not allocate." << endl; exit(1); } for (int i = 0;i < m;i++) { data[i] = new double[n]; //申请列的空间 if (data[i] == NULL) { cout << "Could not allocate,Bye..." << endl; exit(1); } } //申请空间结束,接下来进行初始化操作 for (int i = 0;i < m;i++) //初始化数组 { for (int j = 0;j < n;j++) { data[i][j] = i*n + j; } } for (int i = 0;i < m;i++) //输出数组 { for (int j = 0;j < n;j++) { cout << data[i][j] << " "; } cout << endl; } for (int i = 0;i < m;i++) //释放动态分配的内存 delete[] data[i]; delete[] data; system("pause"); return 0; }
C++动态分配内存
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。