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