内存动态管理
来源:互联网 发布:元数据浏览器丢失 编辑:程序博客网 时间:2024/05/16 01:12
内存动态管理:只要是指对“堆”内存的管理和使用。
在C语言中使用malloc()和free()动态分配和释放存储单元。Malloc()以空间大小作为参数,不知道数据类型,因此分配空间后范围的地址指针无法指向具体的数据,必须进行强制转换后才可以指向具体数据。
C++提供了使用简便而功能更强的new和delete算符来分配和回收动态存储单元。
具体如下:
//////////////////////////////////////////////////////////C语法///////////////////////////////////////////////////////////////////////
ANSI C标准邀请在使用动态分配函数是要包含#include命令将stdlib.h文件包含进来。但是目前使用的一些C系统中,用的是malloc.h头文件。在使用中注意系统版本,当然有的系统不要求添加任何头文件。
void*malloc(unsigned int size):开辟size大小的空间。
返回类型为void*是标准ANSI C建议的,也就是说返回指针不指向任何具体的类型,如果想将这个指针赋给执行类型的指针变量应当进行显式的转换(强制类型转换)。应当指出,现在使用的许多C系统提供的malloc函数返回的类型为char*,如果想要将其赋给指定类型的指针变量仍要进行强制类型转换。对于程序员来说,无论函数返回的指针类型是void还是char型,用法是一样的。
如果内存空间不够,则函数范围0.
void* calloc(unsigned int num,unsigned int size):开辟num个大小为size字节的空间。
void free(void *ptr):释放ptr所指向的已分配空间。
ptr所指的对象必须是动态开辟(是原来用malloc函数分配)的空间。不能free两次同一动态开辟的空间。
void* realloc(void *void,unsigned int size)
将ptr指向的存储区(是原来用malloc函数分配的)的大小改为size个字节。可以是原先分配的空间扩大或缩小。注意,新的存储空间的地址与原存储空间的地址不一定相同。
/////////////////////////////////////////////////////////C++语法//////////////////////////////////////////////////////////////////////
new数据类型
new数据类型[元素个数] //对数组
delete指向分配空间的指针变量 //如分配的是单个对象空间
delete []指向分配空间的指针变量 //如分配的是数组对象空间
l new和delete是算法,不是函数。
l 如果 new 表达式无法获取需要的内存空间,系统将抛出名为 bad_alloc 的异常。
l “delete指针”后,指针将变成悬垂指针,因此执行delete之后,最好立即将指针置为0.
警告:动态内存的管理容易出错
下面三种常见的程序错误都与动态内存分配相关:
1.删除( delete)指向动态分配内存的指针失败,因而无法将该块内存返还给自由存储区。删除动态分配内存失败称为“内存泄漏(memory leak)”。内存泄漏很难发现,一般需等应用程序运行了一段时间后,耗尽了所有内存空间时,内存泄漏才会显露出来。
2.读写已删除的对象。如果删除指针所指向的对象之后,将指针置为 0值,则比较容易检测出这类错误。
3.对同一个内存空间使用两次 delete表达式。当两个指针指向同一个动态创建的对象,删除时就会发生错误。如果在其中一个指针上做 delete运算,将该对象的内存空间返还给自由存储区,然后接着 delete第二个指针,此时则自由存储区可能会被破坏。操纵动态分配的内存时,很容易发生上述错误,但这些错误却难以跟踪和修正。
- 动态内存管理
- 动态内存管理实例
- C++ 动态内存管理
- 动态内存管理
- 动态内存管理
- 动态内存管理
- 动态内存管理
- 动态内存管理
- 动态内存管理
- 动态内存管理
- 动态内存管理
- 动态内存管理类
- 【007】动态内存管理
- 动态内存管理
- 动态 内存管理
- 动态内存管理
- c++动态内存管理
- 动态内存管理
- 仿射变换VS透视变换
- 递归 10的阶乘为例子
- 自动化测试复习总结(面试前准备)
- python:浅析python 中__name__ = '__main__' 的作用
- 千锋老师解析大数据HBase
- 内存动态管理
- 最少拦截系统
- java基础学习IO流之缓冲流 十一 -5
- leveldb安装和使用
- 1,2,3,4能组成多少不重复的3位数,用js实现
- 银嘉金融后台管理系统技术架构设计
- <input type='file' />选择图片不上传,在页面中显示的功能。
- 对称加密算法PBE
- 软件再工程