C++面试常见问题——02动态分配内存
动态分配内存
C++动态内存
C++程序中内存分为两个部分
- 堆:程序中未使用的内存,在程序运行时可用于动态分配内存。
- 栈:函数内部申明的所有变量都将占用栈内存。
很多时候不知道一个程序到底需要多少内存,可以在程序运行时使用关键字new动态分配内存,这会返回所分配的空间地址。当不在需要分配的内存时可以使用delete进行删除。
动态内存分配方式
1. new与delete
用法:
类型名 *指针变量 = new 类型名;
类型名 *指针变量 = new 类型名[元素个数];
int *p = new int; //指向int型的指针
int *pArr = new int[len]
使用new时自由存储区可能已经被用完,因此最好检查是否分配成功。
int *p = NULL;
if( !(p = new int) ){
cout<<"ERROR"<<endl;
exit(1);
}
delete的用法
delete p;
delete []pArr; //删除内存块后强烈建议将指针指向NULL,避免其成为野指针。
pArr = NULL;
二维数组的动态内存分配
int **array;
//假设维度为m x n
array = new int *[m];
for(int i = 0; i < m;i++){
array[i] = new int array[n];
}
//删除
for(int i = 0;i < m;i++){
delete []array[i];
}
delete []array;
2.对象的二动态内存分配
#include<iostream>
using namespace std;
class Box{
public:
Box(){
cout<<"构"<<endl;
}
~Box(){
cout<<"析"<<endl;
} };
int main(){
Box* b = new Box[5]; //构构构构构
delete []b; //析析析析析
return 0;
}
2. malloc与free
malloc是编译器的内置函数,包含于头文件stdlib.h。
//malloc原型
void malloc(unsigned in size)
//free原型
void free(void* p)
//malloc用法
int *p = (int*)malloc(sizeof(int)*len);
for(int i= 0;i < len;i++){
cin>>*p;
}
//free用法
free(p);
- 使用new关键字时不仅开辟了内存,还创建了对象,特别是对类使用时自动调用构造函数,delete时自动调用析构函数。而malloc对类使用时只会开辟内存空间,不会对类自动进行初始化,free时也不会清理成员函数的
- malloc&free是标准库函数,new&delete是C++关键字。
- malloc&free需要手动计算大小,返回值为void*。new&delete自动计算类型的大小,返回对应类型的指针。
- malloc&free分配内存失败会返回0。new&delete分配失败时会抛出异常。
参考链接:
C++面试常见问题——02动态分配内存的更多相关文章
- Java后台面试 常见问题
Java后台面试 常见问题 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米.百度.阿里.京东.新浪.CVTE.乐视家的研发岗offer.我找的是java后台开发,把常见的问题分享 ...
- 面试问了解Linux内存管理吗?10张图给你安排的明明白白!
文章每周持续更新,各位的「三连」是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) 今天来带大家研究一下Linux内存管理.对于精通 CURD 的业务同学 ...
- MySQL索引知识点&面试常见问题
来源:BiggerBoy 作者:北哥 原文链接:https://mp.weixin.qq.com/s/fucHvdRK5wRrDfBOo6IBGw 大家好我是北哥,今天整理了MySQL索引相关的知识点 ...
- 不可或缺 Windows Native (9) - C 语言: 动态分配内存,链表,位域
[源码下载] 不可或缺 Windows Native (9) - C 语言: 动态分配内存,链表,位域 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 动态分配内存 链 ...
- C++动态分配内存
动态分配(Dynamic Memory)内存是指在程序运行时(runtime)根据用户输入的需要来分配相应的内存空间. 1.内存分配操作符new 和 new[] Example: (1)给单个元素动态 ...
- 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个字节的连续空间,返回所分配区域的首字节地址. 可以看到 ...
- gcc -02引起内存溢出'unsigned i'应修订为'volatile unsigned i'
2017-12-13 10:44:19gcc -02引起内存溢出'unsigned i'应修订为'volatile unsigned i' 1.3.100 driver/char/random.cst ...
随机推荐
- Day11 - H - Euclid's Game HDU - 1525
Two players, Stan and Ollie, play, starting with two natural numbers. Stan, the first player, subtra ...
- [Linux] day07——查看及过滤文本
查看及过滤文本 =====================================cat concatenate -n 添加行号------------------- ...
- 5G风口之下,NFV为何发展迅速
导读 5G高带宽.低时延.大容量的接入方式,注定它一定要依赖于跟以往完全不同的专业设备模式来实现,因此也创造了更多的方向和机会.NFV就是其中之一. 5G最大的变化在网络层面,需要底层网络架构形成一种 ...
- 华为轮值CEO,富士康却坚持独裁,二者究竟有什么不一样?
谈到深圳龙华的大企业,人们会很自然地想到华为和富士康,两家公司毗邻,有两个门仅仅隔着一条马路,都是世界500强,对国家,对社区的经济发展有着重要贡献,员工压力最大的时候,也都出现过自杀的情况,一个讲究 ...
- Socket传输大文件(发送与接收)
下载 Client using System; using System.Collections.Generic; using System.Linq; using System.Text; usin ...
- NPM概述及使用简介
什么是 NPM npm之于Node,就像pip之于Python,gem之于Ruby,composer之于PHP. npm是Node官方提供的包管理工具,他已经成了Node包的标准发布平台,用于Node ...
- jdk1.7推出的Fork/Join提高业务代码处理性能
jdk1.7推出的Fork/Join提高业务代码处理性能 jdk1.7之后推出了Fork/Join框架,其原理个人理解为:递归多线程并发处理业务代码,以下为我模拟我们公司业务代码做的一个案例,性能可提 ...
- 吴裕雄--天生自然JAVA数据库编程:SQL常用语句基础
DROP TABLE user ; -- 删除表 CREATE TABLE user( id INT AUTO_INCREMENT PRIMARY KEY , name ) NOT NULL , pa ...
- python2学习------基础语法5(常用容器以及相关操作)
1.list(列表) #生成数据list a=[x for x in range(10)]; #print a; #遍历list for i in a: pass; #print i; #追加元素 a ...
- JS - 判断字符串某个下标的值
<html><body> <script type="text/javascript"> var str="0123456789!&q ...