动态内存管理中的一些问题

容易出现的问题:

  1. 使用malloc分配内存后没有清零内存,可以使用memset或者calloc来初始化内存,进行清零操作
  2. 没有检查分配内存函数的返回值。但C++的new出错会抛出异常。
  3. 引用已释放的内存
  4. 多次释放内存
  5. 不匹配的动态内存管理函数。比如malloc跟free配对,new和delete配对,但malloc的内存不能用delete来释放。
  6. 未正确区分标量和数组。比如用new分配的数组a[2],必须用delete [] a来释放。
  7. 对内存分配函数的不当使用。比如使用malloc(0),最好避免这种0长度的内存分配

缓解方法:

  1. 空指针。释放内存后指针置NULL。
  2. 一致的内存管理约定。比如:
    • 使用同样的模式分配和释放内存。比如在C++中,在构造函数中进行所有的内存分配,在析构函数中进行所有的内存释放。
    • 在同一个模块中,在同一个抽象层次中,分配和释放内存。
    • 让分配和释放配对。
  3. 堆完整性检测。需要修改内存结构块和管理函数。
  4. 内存随机化。比如内核使用mmap来分配或者映射附加的内存页。
  5. 运行时分析工具。可以检测出内存访问违例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值