C++动态分配内存
动态分配(Dynamic Memory)内存是指在程序运行时(runtime)根据用户输入的需要来分配相应的内存空间。
1.内存分配操作符new 和 new[]
Example:
(1)给单个元素动态分配内存
int * pointer = new int; //动态分配一个用于存放整型变量的内存空间,并将该存储空间的地址返回给pointer
(2)给多个元素(数组)动态分配内存空间
int * p = new int []; //动态分配可以存放10个整型变量的内存空间,并将该存储空间的首地址返回给 p
在这里,动态创建的数组 p 的长度可以是常量,也可以是变量(用户输入的长度);而一般的数组在创建时的长度必须是常量。
2.内存收回操作符delete 和 delete[]
与上面两种情况分别对应的内存收回操作符为:
delete pointer; //收回动态分配的单个元素的内存空间
delete [] p; //收回动态分配数组的内存空间
3.Demo
#include <iostream>
using namespace std;
int main() {
char input[];
int i, n;
long * p;
cout << "How many numbers do you want to type in ? "<<endl;
cin.getline(input, );
i = atoi(input);
p = new long[i]; //根据输入的长度来动态创建内存空间
if (p == NULL) //检查所请求的内存是否成功分配
exit();
for (n = ; n < i; n++) {
cout << "Please enter number: ";
cin.getline(input, );
p[n] = atol(input);
}
cout << "You have entered: ";
for (n = ; n < i; n++) {
cout << p[n] << ", ";
}
cout << endl;
delete[] p; //回收已分配的内存空间
system("pause");
return ;
}
result:

4.关于二维数组的内存动态分配问题
(1)二维数组的动态内存分配方式:
int **p = new int *[row]; //其中row指的是二维··数组的行数
for(int i=;i<row;i++)
{
p[i]=new int [col]; //col 是二维数组的列,p 是一个指向 int 类型的指针
}
(2)删除这个二维数组分配的内存空间的方式:
for(int i=;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 == NULL) //检查内存是否分配成功
{
cout << "Could not allocate." << endl;
exit();
}
for (int i = ;i < m;i++)
{
data[i] = new double[n]; //申请列的空间
if (data[i] == NULL)
{
cout << "Could not allocate,Bye..." << endl;
exit();
}
} //申请空间结束,接下来进行初始化操作
for (int i = ;i < m;i++) //初始化数组
{
for (int j = ;j < n;j++)
{
data[i][j] = i*n + j;
}
} for (int i = ;i < m;i++) //输出数组
{
for (int j = ;j < n;j++)
{
cout << data[i][j] << " ";
}
cout << endl;
}
for (int i = ;i < m;i++) //释放动态分配的内存
delete[] data[i];
delete[] data;
system("pause");
return ;
}

C++动态分配内存的更多相关文章
- 不可或缺 Windows Native (9) - C 语言: 动态分配内存,链表,位域
[源码下载] 不可或缺 Windows Native (9) - C 语言: 动态分配内存,链表,位域 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 动态分配内存 链 ...
- c/c++动态分配内存和malloc的使用
c/c++动态分配内存 为什么需要动态分配内存 ---很好的解决的了传统数组的4个缺陷 动态内存分配举例 ---动态数组的构造 使用动态数组的优点: 1. 动态数组长度不需要事先给定: 2. ...
- 标C编程笔记day06 动态分配内存、函数指针、可变长度參数
动态分配内存:头文件 stdlib.h malloc:分配内存 calloc:分配内存,并清零 realloc:调整已分配的内存块大小 演示样例: in ...
- C&C++动态分配内存(手动分配内存)三种方式
1. malloc函数 函数原型:void *malloc(unsigned int size)函数的作用是:在内训的动态存储区开辟一个size个字节的连续空间,返回所分配区域的首字节地址. 可以看到 ...
- mfc 动态分配内存
动态内存分配new 为数组动态分配内存 为多维数组分配内存 释放内存delete malloc free 动态内存分配new int * pi; pi= new int ; 为 ...
- 【c++习题】【17/4/16】动态分配内存
#include<iostream> #include<cstring> #define N 100 using namespace std; class String{ pu ...
- 指针和动态分配内存 (不定长度数组)------新标准c++程序设计
背景: 数组的长度是定义好的,在整个程序中固定不变.c++不允许定义元素个数不确定的数组.例如: int n; int a[n]; //这种定义是不允许的 但是在实际编程中,往往会出现要处理的数据数量 ...
- 数据结构复习之C语言malloc()动态分配内存概述
#include <stdio.h> #include <malloc.h> int main(void) { ] = {, , , , }; // 计算数组元素个数 ]); ...
- C++——动态分配内存问题
class Obj { public: float score; ]; }; class Result { public: int id; ]; Obj obj[]; }; 合法,可动态分配内存给Re ...
随机推荐
- about云开发虚拟化资源汇总,持续更新
H3C实验手册H3C实验手册内容包括:1.帧中继典型配置举例一2.典型访问列表和地址转换综合应用配置案例3.交换机基本配置4.轮循DCC配置举例5.X.25典型配置举例6.MultiLink PPP配 ...
- 两个栈实现一个队列,C语言实现,队列可伸缩,容纳任意数目的元素。
一.思路:1.创建两个空栈A和B:2.A栈作为队列的入口,B栈作为队列的出口:3.入队列操作:即是入栈A:4.出队列操作:若栈B为空,则将A栈内容出栈并压人B栈,再出 B栈:不为空就直接出栈: 二.代 ...
- aix 扩展文件系统
今天发现公司的oracle测试 数据库不能启动,检查警告日志日志,提示归档空间不足,不能归档,于是扩展文件系统: 1.检查rootvg卷组的剩余空间[p2704u]:[/dsg/oracle11]$ ...
- java利用Google Zxing实现 二维码生成与解析
1.引入zxing 2.使用下面两个类:QRCodeUtil.java和BufferedImageLuminanceSource.java 3.新建单元测试类 复制下面测试代码即可. 1.pom文件中 ...
- SimpleDateFormat 转化毫秒到日期时,指定特定的时区
http://blog.csdn.net/wangpeng047/article/details/8560690 影响TimeZone的因素: 1. 操作系统的时区设置. 2. 数据传输时时区设置. ...
- PowerDesigner建数据库模型增加自定义扩展属性
PowerDesigner自7.x新增加一个特性,就是允许用户通过扩展模型的方式扩展模型的属性,但到底怎用一直搞不清楚.今天和同事商量准备直接在程序的Metadata信息实现上直接使用pdm时,我们需 ...
- Double 类型运算时的精度问题
double 类型运算时的 计算的精度不高,常常会出现0.999999999999999这种情况,那么就须要用BigDecimal 它是java提供的用来高精度计算的工具类 以下是对这个类的一个包 ...
- 读<大数据日知录:架构与算法>有感
前一段时间, 一个老师建议我能够学学 '大数据' 和 '机器学习', 他说这必定是今后的热点, 学会了, 你就是香饽饽.在此之前, 我对大数据, 机器学习并没有非常深的认识, 总觉得它们是那么的缥缈, ...
- APUE习题5.x
5.4 下面的代码在一些机器上运行正确,而在另外一些机器运行时出错,解释问题所在? #include <stdio.h> int main( void ) { char c; while( ...
- linux上gcc
查看gcc版本号 rpm -qa | grep gcc gnu的gcc是linux/unix下开发的,不能直接在window下运行.window下有gcc的移植版本.就是楼上说的MinGW和cygwi ...