内存管理心得(持续更新中...)

内存管理心得:

  1. 每个 malloc 都要有一个对应的 free
  2. 每当向指针写入值时,都要确保对可用字节数和所写入的字节数进行交叉核对
  3. 在对指针赋值前,要确保没有内存位置会变为孤立的
  4. 每当释放结构化的元素(而该元素又包含指向动态分配的内存位置的指针)时,都应首先遍历子内存位置并从那里开始释放,然后再遍历回父节点
  5. 始终正确处理返回动态分配的内存引用的函数返回值
  6. 确保您不是在访问空指针
  7. vector.erase(iter)之前注意释放(*iter)中的堆内存
  8. 遇到return语句时,注意检查return之前是否有申请的空间未释放,如果有则将其先释放,再return
  9. 涉及到字符串拷贝时统一使用 char dest[1024]; memset(dest, 0, 1024); strncpy(dest, src, sizeof(dest) - 1 );
  10. 涉及到字符串拷贝时统一使用 char dest[1024]; memset(dest, 0, 1024); snprintf(dest, sizeof(dest) - 1, "%s", "hello world");
  11. 共享资源在多个地方被访问时,注意要加锁,但锁不能连续两次加
  12. 内存分配未成功却使用了它
  13. 内存分配成功,但未初始化就使用它
  14. 内存分配成功且已初始化,但操作越过了边界
  15. 忘记释放内存
  16. 释放了内存却继续使用它:
  • 程序中对象的关系过于复杂,难以搞清哪个对象是否已经释放了内存
  • 函数中return写错,返回了指向栈中的指针或引用
  • ree或delete后,没有将指针设为NULL,产生”野指针

-- 2018/05/26
-- 魔都

你可能感兴趣的:(内存管理心得(持续更新中...))