C++ 动态内存分配

来源:互联网 发布:企业阿里云邮箱登陆 编辑:程序博客网 时间:2024/06/06 03:03


通常,我们在声明一个数组时,数组的元素个数是确定的,即是一个常数。在编译的时候,编译器会根据数组的大小分配好内存。

如果我们需要在运行时决定数组的大小,比如接受用户的输入。此时,如果你试图用变量来代替常量,编译器则不允许通过。

在C++中,提供了两个专有的操作符,new delete

new基本格式是:

new data_type;new data_type[array_element_size];

new后面跟一个数据类型,比如int,double等。如果只请求一组元素,则需添加一个中括号,中括号里存储数组的大小,可以是常量,也可以是变量。

new操作符返回的是一个相应类型的指针。如果请求的是一个元素,则该指针指向该元素的第一个字节。如果是数组,则指向该数组的第一个元素的第一个字节。

如果数组的大小太大,比如用户申请10亿个数组,则分配失败,会抛出异常。为了简单起见,我们可以在 new后加一个参数nothrow,如果内存分配失败,则返回一个null的指针。

对于动态分配的数组访问,可以有两种方法,如果我们想访问第1个元素,pointer[0]     or      *(pointer+0)

new的一个简单例子:

int main(){int i;int * pointer;cout<<"请输入一个数字"<<endl;cin>>i;pointer = new(nothrow) int[i];if(pointer == 0){cout<<"动态内存分配失败"<<endl;}else{cout<<"内存分配成功"<<endl;}}

该例子中声明了一个变量i,用来存储用户输入的数字。然后通过new操作符动态申请内存,如果申请成功,将该数组的第一个元素的指针返回给pointer。否则返回null。


动态分配的内存存储在内存堆中(heap),因为我们知道内存是有限的,因此处理完之后应该释放空间,这里需要用到另一个操作符 delete。

 delete基本格式:

delete pointer;delete[] pointer;

第一种格式是释放一个元素空间,第二种格式是释放一个数组空间。


所以上面的例子存在漏洞,修改之后:

int main(){int i;int * pointer;cout<<"请输入一个数字"<<endl;cin>>i;pointer = new(nothrow) int[i];if(pointer == 0){cout<<"动态内存分配失败"<<endl;}else{cout<<"内存分配成功"<<endl;}delete[] pointer;}

注意new 和delete操作符是C++专有的,C语言不含有该操作符,但是有其它操作动态内存分配的函数,比如malloc,realloc,calloc和free。C++如果包含<cstdlib>也可以使用该函数。


Over...


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 商标被注销后被别人注册怎么办 电商35类商标被抢注怎么办 血小板太低怎么办可以吃水果吗? 微信好友删除了只记得昵称怎么办 优酷会员1080p很卡怎么办 电脑最下面的任务栏不显示怎么办 ea账号保留的问题忘了怎么办 微博超级话题账号被屏蔽怎么办 梦幻西游手机将军令号码换了怎么办 文档的内容被锁定无法修改怎么办 用户没有权限访问u盘时该怎么办? 电脑找不到ip地址连不上网怎么办 商标提前被别人注册微博昵称怎么办 扫码注册显示手机号被占用怎么办 vivo手机屏锁密码忘了怎么办 手机号注册微博手机号不用了怎么办 微博更换手机号被别人注册过怎么办 怎么有个qq注册验证码怎么办 12306手机丢了密码忘了怎么办 教师考试注册时邮箱填写错误怎么办 计算机二级注册时邮箱填错了怎么办 注册时执业范围填错了怎么办 百度号被盗了申诉不回来怎么办 斗鱼直播伴侣显示分类不可用怎么办 斗鱼黑名单显示网络加载失败怎么办 平台登录验证码只能显示一半怎么办 想改微博密码但是忘了原密码怎么办 微博账号密码都忘了怎么办 新浪博客忘记邮箱和密码忘了怎么办 新浪助学贷款邮箱密码忘了怎么办 客厅的父母乐忘记密码了怎么办 微博密码忘记了手机号也换了怎么办 想改密码旧密码忘了怎么办 商标转让转让方不配合做补证怎么办 肇事后责任方拒赔怎么办久草www 我出车祸了对方逃逸找不到人怎么办 肇事车辆怀疑是故意伤人怎么办啊 法院判的交通事故罚金没钱交怎么办 公安抓人应该行政拘留却放了怎么办 停车场把人家车刮了跑了后怕怎么办 膝盖半月板损伤可走路不疼怎么办