正在加载图片...
7.1.1惟角存的分配与放 指针使用的几个问题: 1.动态分配失败。返回一个空指针(NULL),表示发生了异常,堆资源 不足,分配失败。 2.指针删除与堆空间释放。删除一个指针p( delete p;)实际意思 是删除了p所指的目标(变量或对象等),释放了它所占的堆空间,而不 是删除p本身,释放堆空间后,p成了空悬指针。 3.内存泄漏( memory leak)和重复释放。new与 delete是配对使用 的, delete只能释放堆空间。如果new返回的指针值丢失,则所分配的堆 空间无法回收,称内存泄漏,同一空间重复释放也是危险的,因为该空间 可能已另分配,所以必须妥善保存new返回的指针,以保证不发生内存泄 漏,也必须保证不会重复释放堆内存空间 4.动态分配的变量或对象的生命期。无名对象的生命期并不依赖于建立 它的作用域,比如在函数中建立的动态对象在函数返回后仍可使用。我们 也称堆空间为自由空间( free store)就是这个原因。但必须记住释放该 对象所占堆空间,并只能释放一次,在函数内建立,而在函数外释放是 件很容易失控的事,往往会出错。 心画7.1.1 堆内存的分配与释放 指针使用的几个问题: 1.动态分配失败。返回一个空指针(NULL),表示发生了异常,堆资源 不足,分配失败。 2.指针删除与堆空间释放。删除一个指针p(delete p;) 实际意思 是删除了p所指的目标(变量或对象等),释放了 它所占的堆空间,而不 是删除p本身,释放堆空间后,p成了空悬指针。 3.内存泄漏(memory leak)和重复释放。new与delete 是配对使用 的, delete只能释放堆空间。如果new返回的指针值丢失,则所分配的堆 空间无法回收,称内存泄漏,同一空间重复释放也是危险的,因为该空间 可能已另分配,所以必须妥善保存new返回的指针,以保证不发生内存泄 漏,也必须保证不会重复释放堆内存空间。 4.动态分配的变量或对象的生命期。无名对象的生命期并不依赖于建立 它的作用域,比如在函数中建立的动态对象在函数返回后仍可使用。我们 也称堆空间为自由空间(free store)就是这个原因。但必须记住释放该 对象所占堆空间,并只能释放一次,在函数内建立,而在函数外释放是一 件很容易失控的事,往往会出错
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有