第二章 C语言动态内存管理

动态内存的分配

  • malloc与free一起必须成对出现
  • 避免内存泄漏
    • 丢失了内存的地址
    • 隐式泄漏:没有对使用完的空间进行释放。例如定义了动态成员变量的结构体,只释放了结构体指针,而没有释放成员指针

动态内存释放函数

函数名 作用
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函数的特殊性可以让其有多种功能

第一个参数 第二个参数 行为
同malloc
非空 0 原内存块被释放
非空 比原内存块小 利用当前位置分配更小的块
非空 比元内存块大 在当前位置或其他位置分配更大的块

迷途指针

如果原内存被释放,但是原指针确仍然指向原来区域,那么该指针则被称为迷途指针。迷途指针最好的解决办法就是将释放后的指针置为NULL

动态分配内存的监控

正由于动态分配的内存存在大量的陷阱,因此产生了很多工具来监视和检测迷途指针和内存泄漏等。以下是书中介绍的工具和技术,具体可以查看相应网站

results matching ""

    No results matching ""