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 ...
随机推荐
- 技术|Android安装包极限优化
版权声明 1.本文版权归原作者所有,转载需注明作者信息及原文出处. 2.本文作者:赵裕(vimerzhao),永久链接:https://github.com/vimerzhao/vimerzhao.g ...
- Python使用正则表达式(Regular Expression)超详细
一.导入re库 python使用正则表达式要导入re库. import re在re库中.正则表达式通常被用来检索查找.替换那些符合某个模式(规则)的文本.ps:另外很多人在学习Python的过程中,往 ...
- 在Linux上用Apache搭建Git服务器
在Linux上用Apache搭建Git服务器 最近在学Linux,终于在Linux上用Apache搭建起了Git服务器,在此记录一下. 服务器:阿里云服务器 Linux版本:CentOS 6.5 ...
- Jenkins安装 maven插件
Maven Artifact ChoiceListProvider (Nexus)Maven Metadata Plugin for Jenkins CI serverMaven Release Pl ...
- 吴裕雄--天生自然HADOOP操作实验学习笔记:pagerank算法
实验目的 了解PageRank算法 学会用mapreduce解决实际的复杂计算问题 实验原理 1.pagerank算法简介 PageRank,即网页排名,又称网页级别.Google左侧排名或佩奇排名. ...
- Vue 前后台交互,插件
目录 Vuex 插件 前端存储数据汇总 前后台交互方式(重点) axios 插件 同源策略-跨域问题 前后台分离项目交互流程 异步请求细节 Element-ui 插件 jQ + Bs插件 Django ...
- ES 查询时 排序报错(fielddata is disabled on text fileds by default ... )解决方法
背景:elasticsearch 进行排序的时候,可能会排序数字.日期.但是在排序text类型的时候就会出现上述错误 原因(参考): https://blog.csdn.net/wild46cat/a ...
- Android 四种加载方式详解(standard singleTop singleTask singleInstance) .
Android之四种加载方式 (http://marshal.easymorse.com/archives/2950 图片) 在多Activity开发中,有可能是自己应用之间的Activity跳转,或 ...
- Android中ListView结合CheckBox判断选中项
本文主要实现在自定义的ListView布局中加入CheckBox控件,通过判断用户是否选中CheckBox来对ListView的选中项进行相应的操作.通过一个Demo来展示该功能,选中ListView ...
- Android反编译与防止反编译
1.Android反编译 1)下载两个工具 dex2jar,jar2java,相关阅读下载见:http://www.linuxidc.com/Linux/2011-02/32775.htm ...