c 动态内存分配
2013-10-17 13:45
281 查看
C语言中提供的动态内存分配为了解决数组的静态的分配方式的问题:即数组大小必须在定义时指定,程序在运行时不能动态改变数组的大小 。
在标准库<stdlib.h>中提供了三个动态内存分配的函数供程序调用,下面将分别对这三个函数进行介绍:
1. void *malloc(size_t size)
malloc 在分配一段连续的内存时,不会初始化该内存区并且返回指向该段内存区的首地址,当内存分配失败时返回NULL;通常我们在成功分配内存后在使用前要使用memset来初始化该内存区。
2.void * calloc(size_t n,size_t size)
该函数在动态存储区(堆)中分配n个长度为size的连续存储空间,并且对该段连续的内存空间初始化成0,如果分配失败则返回NULL,成功则返回指向首地址的空间。
3. void *realloc(void *ptr, size_t size)
该函数重新分配内存空间的大小,当ptr指向的区域空间足够时,则直接返回ptr的指针,若ptr指向的空间区域不够时,则新分配size个大小的空间,并将ptr指向的内存数据内容拷贝到新的空间,同时返回新的首地址,当ptr == NULL时,该函数相当于malloc。当size == 0时,则等同于free(ptr);
在标准库<stdlib.h>中提供了三个动态内存分配的函数供程序调用,下面将分别对这三个函数进行介绍:
1. void *malloc(size_t size)
malloc 在分配一段连续的内存时,不会初始化该内存区并且返回指向该段内存区的首地址,当内存分配失败时返回NULL;通常我们在成功分配内存后在使用前要使用memset来初始化该内存区。
2.void * calloc(size_t n,size_t size)
该函数在动态存储区(堆)中分配n个长度为size的连续存储空间,并且对该段连续的内存空间初始化成0,如果分配失败则返回NULL,成功则返回指向首地址的空间。
3. void *realloc(void *ptr, size_t size)
该函数重新分配内存空间的大小,当ptr指向的区域空间足够时,则直接返回ptr的指针,若ptr指向的空间区域不够时,则新分配size个大小的空间,并将ptr指向的内存数据内容拷贝到新的空间,同时返回新的首地址,当ptr == NULL时,该函数相当于malloc。当size == 0时,则等同于free(ptr);
相关文章推荐
- 安装SQL Server出现在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke的错误解决办法
- 工作目录
- 自动、手动同步FishEye, JIRA的联系人信息
- java的集合框架
- 让job在指定oracle rac 节点上执行
- grouping Function
- Uploadify 上传后的文件删除,上传队列无法更新问题
- [leetcode]Single Number II
- NS-2安装——Linux平台
- C陷阱与缺陷笔记
- SQLServer如何快速生成100万条不重复的随机8位数字
- 什么是随机种子
- 如何在outlook里面把收件箱分组,以便快速的查看最重要的email。
- Error initializing endpoint java.net.BindException: Address already in use: JVM_Bind:8080
- Parasoft C++test 快速安装指南
- [转]CSDN的博客搜索功能太弱,教你怎么搜索自己博客的文章
- Ciccarello has written a book about his life in learning
- Abington graduating high school announces honor roll
- The Louvre has been the most famous and favorite museums inside world
- continues to make the grade