本期话题
聊一聊
与内存有关的错误,最让人感到头疼,有时候程序出错很随机,需要排查好久才能找到。
所以,我们应该尽量避免与内存有关的错误,下边列举几种错误,供你参考。
(1)间接引用坏指针
如果间接引用一个指向没有任何意义的数据的指针,那么操作系统会以段异常终止程序。如果向只读区域中写入数据,这些区域会以保护异常终止这个程序。
(2)读未初始化的内存
常见的错误是假设堆内存被初始化为零。
(3)栈缓冲区溢出
如果一个程序不检查输入字符串的大小就写入栈中目标缓冲区,那么这个程序就会出现缓冲区溢出的错误
(4)假设指针和它们指向的对象大小相同
常见的错误是,假设指向对象的指针和它们所指向的对象是相同大小的。
(5)内存越界
这种错误会越界覆盖原有内存的数据,导致出错。
(6)引用指针,而不是它所指向的对象
如果不太注意 C 操作符的优先级和结合性,我们就会错误地操作指针,而不是指针所指向的对象。若对优先级和结合性有疑问的时候,就用括号。
(7)误解指针运算
这类错误是忘记指针的算术运算操作是如何进行。是以指针指向的对象的大小为单位进行的,而这种大小单位并不一定是字节。
(8)误解指针运算
这类错误是忘记指针的算术运算操作是如何进行。是以指针指向的对象的大小为单位进行的,而这种大小单位并不一定是字节。
(9)引用空闲堆块中的数据
引用已经被释放了的堆块中的数据会导致出错。
(10)引起内存泄漏
内存泄漏是缓慢、隐形的杀手,当程序员不小心忘记释放已分配的内存块,则会引起内存泄漏。
以上总结了 C 程序中,管理和使用内存常见的错误类型。在实际的编程中,应该避免出现这些错误,否则会出现意想不到的后果。
觉得文章不错,点击“分享”、“赞”、“在看” 呗!