动态内存的分配
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 动态分配内存的监控正由于动态分配的内存存在大量的陷阱,因此产生了很多工具来监视和检测迷途指针和内存泄漏等。
|