动态分配(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++动态分配内存的更多相关文章

  1. 不可或缺 Windows Native (9) - C 语言: 动态分配内存,链表,位域

    [源码下载] 不可或缺 Windows Native (9) - C 语言: 动态分配内存,链表,位域 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 动态分配内存 链 ...

  2. c/c++动态分配内存和malloc的使用

    c/c++动态分配内存  为什么需要动态分配内存 ---很好的解决的了传统数组的4个缺陷 动态内存分配举例 ---动态数组的构造 使用动态数组的优点:    1. 动态数组长度不需要事先给定: 2. ...

  3. 标C编程笔记day06 动态分配内存、函数指针、可变长度參数

    动态分配内存:头文件 stdlib.h     malloc:分配内存     calloc:分配内存,并清零     realloc:调整已分配的内存块大小     演示样例:         in ...

  4. C&C++动态分配内存(手动分配内存)三种方式

    1. malloc函数 函数原型:void *malloc(unsigned int size)函数的作用是:在内训的动态存储区开辟一个size个字节的连续空间,返回所分配区域的首字节地址. 可以看到 ...

  5. mfc 动态分配内存

     动态内存分配new  为数组动态分配内存  为多维数组分配内存  释放内存delete malloc free  动态内存分配new int * pi; pi= new int ;  为 ...

  6. 【c++习题】【17/4/16】动态分配内存

    #include<iostream> #include<cstring> #define N 100 using namespace std; class String{ pu ...

  7. 指针和动态分配内存 (不定长度数组)------新标准c++程序设计

    背景: 数组的长度是定义好的,在整个程序中固定不变.c++不允许定义元素个数不确定的数组.例如: int n; int a[n]; //这种定义是不允许的 但是在实际编程中,往往会出现要处理的数据数量 ...

  8. 数据结构复习之C语言malloc()动态分配内存概述

    #include <stdio.h> #include <malloc.h> int main(void) { ] = {, , , , }; // 计算数组元素个数 ]); ...

  9. C++——动态分配内存问题

    class Obj { public: float score; ]; }; class Result { public: int id; ]; Obj obj[]; }; 合法,可动态分配内存给Re ...

随机推荐

  1. visual studio 2010 "创建控件时出错"解决办法[转]

    之前我有在博问里面提问(http://space.cnblogs.com/q/16208/),但一直都没答案.我系统都重装了两次了,可还是出现这样的错误,我很郁闷啊.今天我终于找到原因了. 我写了一个 ...

  2. pm 2.5

    定陵</a></div><div class="staaqi"><span class="label pmsmall" ...

  3. poj 1149 PIGS【最大流经典建图】

    PIGS Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 18727   Accepted: 8508 Description ...

  4. Asp.net Mvc 自定义Session (二)

    在 Asp.net Mvc 自定义Session (一)中我们把数据缓存工具类写好了,今天在我们在这篇把 剩下的自定义Session写完 首先还请大家跟着我的思路一步步的来实现,既然我们要自定义Ses ...

  5. &lt;Android&gt;从窗口泄漏谈android:configChanges属性

    今天有幸去哥们的大公司做了半天的暂时工,一个偶现的Bug折腾了他好久,好不easy今天抓到了异常Log日志.大致的意思就是android.view.windowleaked--窗口泄漏.我在网上查了资 ...

  6. dubbo与spring mvc

    安装 一.本地服务     1.定义服务接口: (该接口需单独打包,在服务提供方和消费方共享) public interface CustomerService { public String get ...

  7. QStyleFactory类参考

      QStyleFactory类创建QStyle对象.#include <QStyleFactory> 静态公有成员QStyle* create(const QString & k ...

  8. Enable SPI 1.0 and 1.1 with device tre overlays on BeagleBone

    For most people the above image means absolutely nothing, but for that one guy that has been searchi ...

  9. Java基础知识强化之IO流笔记61:输入流 和 输出流 使用总结

    1. 结构: 字节流:InputStream,OutputStream 字符流:Reader,Writer 2. 字符流 和 字节流: (1)Reader:读取字符流的抽象类 BufferedRead ...

  10. Java实现折半(二分)插入排序

    /*折半插入查找思想:每趟将一个带排序的元素作为关键字插入到已经排好的部分序列的适当位置上,查找适当位置的方法用折半查找法 * 适合记录数较多的场景 * 在查找插入位置时节省了时间 * 在记录移动次数 ...