C++:new分配内存
#include <stdio.h>
#include <malloc.h>
#include <iostream>
using namespace std;
int main()
{//第一种 int* p1 = new int; //动态的在堆上分配一块内存(手动分配) cin >> *p1;cout << *p1 << endl;cout << p1 << endl;delete p1; //释放内存 //第二种用法 int* p2 = new int[3]; //分配3块int类型大小的内存空间 int i = 0;while (i < 3){cin >> p2[i];cout << p2[i] << endl;i++;}delete[] p2; //注意这个释放方式 //第三中用法 int* p3 = new int(45); //分配一块内存,并将45存放到这块内存中 printf("%d/n", *p3);delete p3;return 0;
}
1.new的作用是从自由存储为 类 的对象或对象数组分配内存,并将已适当分类的非零指针返回到对象。
比如:char * pchar= new char[10];
delete pchar;
例子中动态分配了10个char类型的内存给了pchar,来构成一个数组。需要注意的是,分配数组采用[] ,如果只是单个的只要new char就可以了。
2.注意事项:
(1)使用 delete 运算符可解除分配使用 new 运算符分配的内存。而且new和delete是成对出现的。只出现一个是错误的或不规范的写法,即使能编译通过,也会有安全隐患,可能会造成内存泄露;
(2)使用的new与delete要相同。也就是说如果你在 new表达式中使用了 [],你必须在对应的 delete 表达式中使用 []。如果你在 new 表达式中没有使用 [],你也不必在对应的 delete 表达式中使用 []。
(3)使用 new 为 C++ 类对象分配内存时,将在分配内存后调用对象的构造函数。所以如果是自己写的类的话,最好自己写个构造函数,这样会比较好。https://zhidao.baidu.com/question/1574224420983531660.html
原理:分开分配内存
int** ptr = new int* [10 * 10]; /这句是指分配了100个int指针,并不是一1010的2维数组。*/
//给一个2维数组分配空间
int **ptr = new int *[10]; //指针的数组
for(int i=0;i<10;i++)
{
ptr[i]=new int[10]; /再分别给每个指针的头指针分配内存/
}
https://blog.csdn.net/a_doctor/article/details/105824349
验证二级指针
#include <stdio.h>
#include <malloc.h>
#include <iostream>
using namespace std;
int main()
{int** ptr = new int* [3]; //指针的数组for (int i = 0; i < 3; i++){ptr[i] = new int[2]; // 再分别给每个指针的头指针分配内存 /for (int j = 0; j < 2; j++){cin >> ptr[i][j];}}for (int i = 0; i < 3; i++){for (int j = 0; j < 2; j++){cout << ptr[i][j];}cout << endl;}cout << **ptr << endl;cout << *ptr[0] << endl;cout << *ptr[1] << endl;cout << *ptr[2] << endl;cout << *ptr << endl;cout << ptr[0] << endl;cout << *(*(ptr+1)+1) << endl;return 0;
}
C++:new分配内存相关推荐
- 1-1 分配内存资源给容器和POD
这一小节讲解如何分配内存请求和对一个容器做内存限制.一个容器被保证拥有足够的内存可以处理请求,但是也不允许使用超过限制的内存. 开始之前 需要拥有一个k8s集群 需要安装好一个kubectl 工具,并 ...
- 只能在堆或只能在栈上分配内存的类
只能在堆上分配内存的类 方法:将析构函数设置为私有 原因:C++ 是静态绑定语言,编译器管理栈上对象的生命周期,编译器在为类对象分配栈空间时,会先检查类的析构函数的访问性.若析构函数不可访问,则不能在 ...
- ubuntu mysql 内存满了_ubuntu – 如何为mySQL分配内存限制?
你可以配置 >所有MyISAM >所有InnoDB > MyISAM和InnoDB的混合物 在为任一引擎分配内存之前,最好反思每个存储引擎的缓存 配置MYISAM 使用的主要机制是密 ...
- Delphi 的内存操作函数(2): 给数组指针分配内存
静态数组, 在声明时就分配好内存了, 譬如: vararr1: array[0..255] of Char;arr2: array[0..255] of Integer; beginShowMessa ...
- linux异常 - 无法分配内存
linux异常 - 无法分配内存 参考文章: (1)linux异常 - 无法分配内存 (2)https://www.cnblogs.com/7q4w1e/p/9626174.html 备忘一下.
- C++中给二维指针分配内存
我们都知道在 C++ 中分配动态数组用的是 new , 撤销动态数组用的是 delete[ ] ,现在让我们来看看怎么利用这两个关键字给二维指针分配内存. 原理就不写在这里了, ...
- 内存分配的原理__进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)
如何查看进程发生缺页中断的次数? 用ps -o majflt,minflt -C program命令查看. majflt代表major fault,中文名叫大错误,minflt代表minor faul ...
- linux为系统分配内存,Linux操作系统知识讲解:走进Linux 内存分配算法
Linux 内存分配算法 内存管理算法--对讨厌自己管理内存的人来说是天赐的礼物 1.内存碎片 1) 基本原理 产生原因:内存分配较小,并且分配的这些小的内存生存周期又较长,反复申请后将产生内存碎片的 ...
- 如何给docker容器分配内存和cpu
如何给docker容器分配内存和cpu?默认情况下,容器使用的资源是不受限制的.也就是可以使用主机内核调度器所允许的最大资源.但是在容器的使用过程中,经常需要对容器可以使用的主机资源进行限制,下面我们 ...
- 未分配内存的指针导致段错误
一个最简单的队列初始化操作案例: 编译可以通过:但是运行程序时,会出现段错误:Segmentation fault 分析:主函数中声明了队列的一个指针(只是声明,并未实际分配地址空间),调用初始化函数 ...
最新文章
- 2021-07-12 深度学习服务器网络测试(顶会ECCV网络测试)
- 微信小程序实战篇-分类页面制作
- CocoaPods did not set the base configuration of your project 问题解决方案
- VMware vCenter Server Appliance Photon OS安全修补程序
- 有一天我突然接到他的电话
- 电子健康行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
- 在.NET项目中使用PostSharp,使用MemoryCache实现缓存的处理
- 如何用BabeLua运行Lua代码
- 人行横道——步行管理(交通运行管理)
- VUE之倒计时插件(超实用)
- vss服务器状态失败_Exchange快照错误,询问写入器状态失败
- 100行代码,10分钟,详解Vue2.x响应式原理——理解Observer,Dep,Watcher
- 2022年四川省职业院校技能大赛(中职组)网络安全赛项规程
- Spring中的用到的设计模式
- 对图像作LUT处理是什么意思
- python在国内外研究现状_机器人教育_国内外Python课程现状?
- 数据结构(逻辑结构和存储结构)
- 软件测评概要总结-中科软测认证中心
- 数字孪生系统有哪些意义?
- Linux学习笔记_5_文件目录类指令日期,时间