[牛人杂谈]

C语言动态内存管理

[复制链接]
738|2
手机看帖
扫描二维码
随时随地手机跟帖
稳稳の幸福|  楼主 | 2017-4-26 22:46 | 显示全部楼层 |阅读模式
动态内存的分配

malloc与free一起必须成对出现
避免内存泄漏
丢失了内存的地址
隐式泄漏:没有对使用完的空间进行释放。例如定义了动态成员变量的结构体,只释放了结构体指针,而没有释放成员指针
动态内存释放函数
[td]
函数名作用
malloc分配内存空间,使用最多,函数返回内存区域第一个字节的地址
realloc重新分配内存空间,用于扩展和缩小空间
calloc分配空间并清空,等同于malloc+memset
memset清空内存区域
free释放内存区域
使用malloc可能会返回空指针,所以可以加一步判断
int *pi = (int* ) malloc (sizeof(int));
if(pi != NULL) {
// Pointer should be good
} else {
// Bad pointer
}
realloc函数的特殊性可以让其有多种功能

[td]
第一个参数第二个参数行为
同malloc
非空0原内存块被释放
非空比原内存块小利用当前位置分配更小的块
非空比元内存块大在当前位置或其他位置分配更大的块
迷途指针
如果原内存被释放,但是原指针确仍然指向原来区域,那么该指针则被称为迷途指针。迷途指针最好的解决办法就是将释放后的指针置为NULL
动态分配内存的监控
正由于动态分配的内存存在大量的陷阱,因此产生了很多工具来监视和检测迷途指针和内存泄漏等。


xixi2017| | 2017-4-27 20:16 | 显示全部楼层
采用编译系统提供的这个内存分配函数,分配内存的时候会进行边界检测的。

使用特权

评论回复
dongnanxibei| | 2017-4-29 19:07 | 显示全部楼层
如果不使用这些函数操作,那么如果不注意会有有不少的空间会被占用浪费。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

161

主题

3089

帖子

8

粉丝