C和指针详解------动态内存分配
2016-04-12 20:27
176 查看
malloc和free
malloc和free分别用于执行动态内存分配和释放。这些函数维护一个可用内存池。当一个程序另外需要一些内存时,它就调用malloc函数,malloc从内存池中提取一块合适的内存,并向该程序返回一个指向这块内存的指针。当一块以前的内存不再使用时,程序调用free函数把它归还给内存池供以后之需。两个函数原型声明如下
void *malloc(size_t size); void free(void *pointer);
malloc所分配的是一块连续的内存。
如果操作系统无法向malloc提供更多的内存,malloc就返回一个NULL指针。
向free传递一个NULL参数不会产生任何效果
malloc是如何知道你所请求的内存需要存储的是整数、浮点数、结构还是数组呢?它并不知道。所以malloc返回一个类型为void *的指针,供你强制转换。
calloc 和 realloc
void *calloc(size_t num_elemnets, size_t element_size); void realloc(void *ptr, size_t new_size);
calloc也用于分配内存。malloc和calloc之间的主要区别是后者在返回指向内存的指针之前把它初始化为0。
realloc函数用于修改一个原先已经分配的内存块的大小。使用这个函数,你可以使一块内存扩大或缩小。
常见的动态内存错误
在使用动态内存分配的程序中,尝尝会出现许多错误。这些错误包括对NULL指针进行解引用操作、对分配的内存进行操作时越过边界、释放并非动态分配的内存、试图释放一块动态分配的内存的一部分以及一块动态内存被释放之后被继续使用。相关文章推荐
- Onekey Ghost找不到硬盘分区怎么办
- nyoj311完全背包
- java.lang.UnsupportedOperationException
- maven项目 启动报错:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
- 关于Unity5版本动画系统中anystate跳转重复播放当前动画解决方案
- 项目3——游戏类
- 验证码
- 【BZOJ1004】Cards
- WCF服务怎样与宿主程序交互
- whu 1581 Union of cubes
- 2016年腾讯实习生面试技术面一面二面
- C++作业3/3
- 用java实现输出字符串中第一个出现不重复的字符
- 什么是web标准、可用性、可访问性
- STL --- understand
- ACM内部函数--数学问题--最大公约数最小公倍数
- IO瓶颈
- 第七周项目3—用多文件组织多个类的程序
- 数据挖掘:关联规则的apriori算法在weka的源码分析
- c++第四次上机作业