内存分配失败
内存分配可能失败。常用解决办法是,在使用内存之前检查指针是否为NULL。
内存分配成功,但是尚未初始化就引用
一定要赋零值
内存分配成功并且已经初始化,但操作越界
例如在使用数组时经常发生下标“多1”或者“少1”的操作。特别是在for循环语句中,循环次数很容易搞错,导致数组操作越界。
忘记释放内存,造成内存泄露
动态内存的申请与释放必须配对,如果因程序错综复杂而导致难以检查,请尽量重新设计代码结构。
释放了内存却继续使用它。
有三种情况:
(1)程序中的对象调用关系过于复杂,实在难以搞清楚某个对象究竟是否已经释放了内存,此时应该重新设计数据结构,从根本上解决对象管理的混乱局面。
(2)函数的return语句写错了,注意不要返回指向“栈内存”的“指针”或者“引用”,因为该内存在函数体结束时被自动销毁。
(3)使用free或delete释放了内存后,没有将指针设置为NULL。导致产生“野指针”。
内存分配规则
申请内存之后,应该立即检查指针值是否为NULL,防止使用指针值为NULL的内存。
为数组和动态内存赋初值,防止将未被初始化的内存作为值使用。
避免数组或指针的下标越界,特别要当心发生“多1”或者“少1”操作。
动态内存的申请与释放必须配对,防止内存泄漏。
释放内存之后,立即将指针设置为NULL,防止产生“野指针”。