动态分配(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. 无法连接 mysql

    ==================================================================================================== ...

  2. HW4.45

    public class Solution { public static void main(String[] args) { int count = 0; for(int i = 1; i < ...

  3. POJ1365 - Prime Land(质因数分解)

    题目大意 给定一个数的质因子表达式,要求你计算机它的值,并减一,再对这个值进行质因数分解,输出表达式 题解 预处理一下,线性筛法筛下素数,然后求出值来之后再用筛选出的素数去分解....其实主要就是字符 ...

  4. zoj 3757 Alice and Bob and Cue Sports 模拟

    题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3757 #include<cstdio> #incl ...

  5. poj 1273 Drainage Ditches【最大流入门】

    Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 63924   Accepted: 2467 ...

  6. linux命令之nohup

    功能: 使进程在退出登录后仍旧继续执行,nohup就是不挂起的意思(no hang up). 格式:$nohup command 和 $nohup command & 两种,二者之间的区别就是 ...

  7. 删除mysql服务

    当我们卸载完MySQL后重新装MySQL提示 The service already exists! 是因为服务名称还残留在系统里 打开cmd 输入下面 sc delete mysql 这个mysql ...

  8. cocos2d-x游戏开发实战原创视频讲座系列1之2048游戏开发

     cocos2d-x游戏开发实战原创视频讲座系列1之2048游戏开发 的产生 视持续更新中.... 视频存放地址例如以下:http://ipd.pps.tv/user/1058663622     ...

  9. linux 打补丁

    http://blog.csdn.net/maotianwang/article/details/11107083

  10. 数据持久层(三)ODB介绍

    ODB: C++ Object-Relational Mapping (ORM) ODB is an open-source, cross-platform, and cross-database o ...