C++基础(动态分配内存)2

来源:互联网 发布:java redis分布式锁 编辑:程序博客网 时间:2024/06/05 00:41

一.new与delete
这里写图片描述
c++内存分配的两种方式:静态分配和动态分配
静态分配是在编译时分配相应的存储空间,因为是在编译时分配,要求编译时空间大小明确,数组长度必须为常量,一旦编译完成,这个数组的长度就是固定不变的。
动态分配是程序运行期间根据实际需要动态申请或释放内存。它不需要预先分配存储空间,分配的空间可以扩大或缩小
使用malloc和free动态申请和释放内存:
这里写图片描述
*new运算符结果是指向分配得到的内存空间的指针,如果没有足够的内存空间可以分配,其运算结果是一个0值指针。
销毁对象后,指针p1变成了没有定义,然而它羽然存放所指向对象的地址,所以指针p1不再有效,被称为迷途指针,通常在delete运算后将其设为NULL即0值指针,避免了迷途指针;
用new创建的动态对象使用完后,必须用delete销毁它。
delete只能删除由new创建的动态对象,否则将导致程序错误。
静态内存管理有编译器进行,程序员只是做対象定义(相当于分配),但是动态分配是按照程序员人为的指令进行。
动态分配和释放必须对应,不释放会内存泄漏,后果是随着程序运行多次,可以使用的内存空间越来越少,而释放已经释放的内存会导致程序奔溃
静态分配内存的生命期由编译器自动确定,要么是程序运行期,要么是函数执行期。动态分配内存的生命期由程序员决定,即从分配时开始,至释放时结束。特别地,动态分配内存的生命期允许跨多个函数。
静态分配内存的对象有初始化,动态分配内存一般需要人为
的指令赋初始值
避免释放内存后出现“迷途指针”,应及时设置为空指针*
这里写图片描述

2.动态分配内存应用

2.1动态分配数组
  • 使用动态内存,可以轻而易举的解决在程序运行中产生任意大小的数组
  • 动态分配一维或多维数组的方法是由指针管理数组,二维以上数组按一维数组方式来处理,具体步骤为:
    ①定义指针p;
    ②分配数组空间,用来存储数组元素,空间大小按元素个数计算;
    ③按一维数组方式使用这个数组(例如输入、输出等);若是一维数组,则元素为p[i];若是二维数组则元素为p[i*M+j],其中M为列元素个数,以此类推。
    ④释放数组空间;

    • 例 :计算N*N 二维数组的平均值
      这里写图片描述
    • -

    2.2 动态分配字符串

    • 实际编程中,字符串类型表示文字信息数据,其特点是字符长度不
      固定。通过动态分配字符串,根据程序的需要确定字符串的实际长
      度。
    • 动态分配字符串的方法是由字符指针管理字符串,具体步骤为:
      ①定义字符指针; ②分配字符串空间,用来存储字符串; ③使用这个字符串(例如输入、输出等); ④释放字符串空间

这里写图片描述

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 cfa考试准考证名字有错怎么办 火车票护照号错了怎么办 国际机票名字错一个字怎么办 国际机票名字拼音错了怎么办 订机票名字写错了怎么办 亚航机票护照号写错怎么办 打发过了的奶油怎么办? 孩子生了没人带怎么办 办理退休审核未通过怎么办 整天沉迷全民k歌怎么办 吃鸡账号被误封了怎么办 手机换号了银行卡怎么办 评副高没有病房论文怎么办 收件人姓名写错了怎么办 汇款姓名写错了怎么办 在菲律宾旅游签证过期怎么办 微博转发被限制怎么办 百香果蜂蜜沉在下面怎么办 领导要潜我老婆怎么办 被领导潜了该怎么办 实习期单位领导开除我我该怎么办 泡泡袖显手臂肥怎么办 客人想吃霸王餐怎么办 在四楼上课时发生地震怎么办 学生在上课时发生地震怎么办 学生上课时发生地震怎么办 老板承诺的工资不兑现怎么办 只有本科毕业证没有学位证怎么办 孩子跟坏孩子玩怎么办 苕帚跟簸箕掉下来了怎么办 身体发烫又觉得冷怎么办 买苹果8后悔了怎么办 手机死机了怎么办不可拆卸电池 百度网盘密码忘了怎么办 空调冷凝水无法排出怎么办 转账时名字错了怎么办 打款名字错了怎么办 转账名字写错了怎么办 国际汇款汇错了怎么办 汇款英文写错了怎么办 体重秤不显示了怎么办