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

内存管理心得:

  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
-- 魔都

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 史上最全的iOS面试题及答案 iOS面试小贴士———————————————回答好下面的足够了----------...
    Style_伟阅读 2,417评论 0 35
  • __block和__weak修饰符的区别其实是挺明显的:1.__block不管是ARC还是MRC模式下都可以使用,...
    LZM轮回阅读 3,363评论 0 6
  • 布达拉宫的门票需要提前一天去售票处用身份证预订,我们没有订到隔天的票,于是预定后天早上,于是在拉萨的时间就多停留一...
    不爱写作的中意阅读 478评论 0 3
  • 我想 如果我一直揣着一颗文艺的心走到现在 ,我觉得我应该是个了不起的家伙。可是凡事冠以如果一词,那过往的一切都只会...
    没有希望的早晨阅读 289评论 0 0
  • 活着就难免走入困境,满心慌乱不知所措,有时天雷滚滚,震得人昏头昏脑,执著已久的信念突然碎了一地,我竟不知从...
    待好风阅读 444评论 1 1